论文基本功——LaTeX:公式及其编号写理工科论文的时候,难免要用到大量公式。每次写论文,哪怕是用过的公示格式,也需要找之前的模板或者现到网上查询,很麻烦。因此决定自己整理一版,随用随补充,以方便来日查用。同时也欢迎大家收藏和帮助我一起完善,谢谢各位~
- 0. 图示索引
- 1. equation:整个公式只有一个编号
- 1)基本格式
- 2)多行
- 3)不编号公式
- 2. subequations:公式每行都有一个子编号
- 1)基本格式
- 2)只编号部分行
- 3)公式存在分类情况(如分段函数)
- 4)分段函数逐行编号(可以只编号部分行)
- 3. 超长公式
- 1) 在两栏论文中并栏展示超长公式(暂未实现)
为了方便直观查找,将本博客实现的所有无误的格式都列在下面,可以直接点击导航(由于CSDN中不支持该功能,个人颇花了些功夫实现,但目前点击时会打开新网页)。
equation基本格式
equation多行公式
equation不编号公式
subequations基本格式
subequations只编号部分行
subequations公式存在分类情况(如分段函数)
subequations分段函数逐行编号(可以只编号部分行)
% 整个公式只有一个编号
begin{equation}label{eqn-1}
y = ax + b
end{equation}
加label是为了在正文中引用该公式。引用时,只需使用“eqref{label名称}”,如“eqref{eqn-1}”,显示的格式为“(公式编号)”,如“(1)”。使用“ref{label名称}”的格式也可以引用,但是显示格式不带括号,只有公式编号,如“1”。建议在引用图片、表格或算法时再采用后者。另外,注意label具有唯一性,论文中不能出现相同的label。一旦出现重复label,虽然编译时不会报错,但引用时会出现混乱。
当需要使用多行公式时,可以采用下面的格式。
% 整个公式只有一个编号,
begin{equation}label{eqn-2}
begin{aligned}
y & = ax + b\
z & = cx + d
end{aligned}
end{equation}
其中的aligned是用于实现equation中的多行公式并且可以辅助公式内各行的对齐,对齐位置用“&”。“&”个数没有限制,甚至可以是0,但各行使用的“&”个数的必须相同,否则编译时会报错。
如果不嵌套aligned,各行无法对齐是其次,最重要的是无法实现换行。
% 错误演示:不嵌套aligned的equation
begin{equation}label{eqn-3}
y = ax + b\
z = cx + d
end{equation}
3)不编号公式
有时使用的公式并不需要编号,此时可以改用equation*。与前面的区别仅在于该格式在equation后面加了一个“*”。具体示例如下。
% 此时相应公式不编号,因没有编号,故无法引用
begin{equation*}
begin{aligned}
y & = ax + b\
z & = cx + d
end{aligned}
end{equation*}
2. subequations:公式每行都有一个子编号
使用equation可以一定程度上解决我们的需求,但在论文中引用公式时,有时只想引用公式中的某一个子行,也就是说公式的每行最好都能有自己的编号,此时使用subequations是最方便、直接的办法。
1)基本格式%每个子行都有唯一编号
begin{subequations}label{eqn-4}
begin{align}
y & = a + b\
z & = c + d
end{align}
end{subequations}
其中align也是用于公式内各行的对齐。需要注意的是,这里的与equation中嵌套的不同,不是aligned。align的基本用法与aligned一致,也采用“\”来换行,使用“&”来辅助对齐。
注:如果将align改为align*,也可以实现公式不编号的功能。也就是在上图中去掉后面的两个编号。
这里嵌套align很必要,否则公式虽然会编号也能引用,但是并不会显示,这会导致公式编号的混乱;而且此时subequations中的内容显示规则与正文一致(包括字体、缩进、写公式需要加“$”等)。
%有编号也能引用但不显示,内容的显示规则与正文一致
begin{subequations}label{eqn-5}
y = ax + b\
indent z = cx + d
end{subequations}
2)只编号部分行
有时在论文中会出现公式推导过程,此时中间步骤没有必要编号。为了实现这一目的,只需要在不需要编号的行的末尾(换行符“\”前)添加**nonumber**即可,具体如下:
begin{subequations}label{eqn-6}
begin{align}
y & = ax + (bx+c) nonumber\
& = (a + b)x + c\
z & = mx + (nx+p) nonumber\
& = (m + n)x + p
end{align}
end{subequations}
3)公式存在分类情况(如分段函数)
在某些情况下,论文中需要使用分段函数,即在不同条件下有不同结果,这个时候就需要用到cases。
begin{subequations}label{eqn-7}
begin{align}
y & =
begin{cases}
a x^2 + b x + d, & mbox{if}~x > 0 \
cx + d, & mbox{otherwise}
end{cases}\
z & =
begin{cases}
mx + p, & mbox{if}~x > 1 \
nx + q, & mbox{otherwise}
end{cases}
end{align}
end{subequations}
注意,公式中展示文字需要使用“mbox{文字内容}”,且有必要使用“~”来添加文字与公式中变量之间的空隙。如果不使用“mbox”就会出现下图中第一个“otherwise”的显示效果;不使用"~"就会出现“if”和“
x
x
x”贴在一起的情况。
4)分段函数逐行编号(可以只编号部分行)equation中同样可以嵌套使用cases,使用方法相同。
在某些情况下,论文中展示的多行公式是一个方程组,需要联立,也就是需要在公式最左侧添加一个大括号,这个时候可以使用cases。但如果要求大括号右侧每行都需要编号,那么就需要引入新的方法。这里建议使用numcases。
% 使用numcases需要现在文档开头引入宏包cases(注意包名不是numcases)
usepackage{cases}
...
begin{subequations}label{eqn-8}
begin{numcases}{mbox{case}~1:}
m = 3x + 2y + 5z label{eqn-8-1}\
n = 2x + 5y + 3z notag\
p = 3x + 4y + 2z label{eqn-8-3}
end{numcases}
end{subequations}
注意,如果某行不需要编号,直接在该行末尾(换行符“\”前)添加“notag”即可,而是否添加“label{}”不影响实际编号。
如果只是联立方程,可以直接去掉大括号左侧的内容,示例如下
begin{subequations}label{eqn-8}
begin{numcases}{} % 这里相对于前面的变化在于,去掉了{}中的内容
m = 3x + 2y + 5z label{eqn-8-1}\
n = 2x + 5y + 3z notag\
p = 3x + 4y + 2z label{eqn-8-3}
end{numcases}
end{subequations}
参考文献:百度文库-Latex-条目、编号、描述
该方法唯一不够优雅的就是不能对齐。如果在numcases中嵌套aligned(不是align),可以实现对齐,但是又无法实现逐行编号。如果各位有更优雅的写法,欢迎评论区分享一下~
3. 超长公式 1) 在两栏论文中并栏展示超长公式(暂未实现)待补充(需要翻翻以前的论文草稿)



