• 论文基本功——LaTeX:公式及其编号


    写理工科论文的时候,难免要用到大量公式。每次写论文,哪怕是用过的公示格式,也需要找之前的模板或者现到网上查询,很麻烦。因此决定自己整理一版,随用随补充,以方便来日查用。同时也欢迎大家收藏和帮助我一起完善,谢谢各位~

    0. 图示索引

    为了方便直观查找,将本博客实现的所有无误的格式都列在下面,可以直接点击导航(由于CSDN中不支持该功能,个人颇花了些功夫实现,但目前点击时会打开新网页)。
    equation基本格式
    equation基本格式
    equation多行公式
    equation多行公式
    equation不编号公式
    equation*
    subequations基本格式
    subequations基本格式
    subequations只编号部分行
    subequations中只编号部分行
    subequations公式存在分类情况(如分段函数)
    公式存在分类情况
    subequations分段函数逐行编号(可以只编号部分行)
    每行自由编号

    1. equation:整个公式只有一个编号

    1)基本格式

    % 整个公式只有一个编号
    \begin{equation}\label{eqn-1} 
      y = ax + b
    \end{equation}
    
    • 1
    • 2
    • 3
    • 4

    equation基本格式
    加label是为了在正文中引用该公式。引用时,只需使用“(???)”,如“(???)”,显示的格式为“(公式编号)”,如“(1)”。使用“???”的格式也可以引用,但是显示格式不带括号,只有公式编号,如“1”。建议在引用图片、表格或算法时再采用后者。另外,注意label具有唯一性,论文中不能出现相同的label。一旦出现重复label,虽然编译时不会报错,但引用时会出现混乱。

    2)多行

    当需要使用多行公式时,可以采用下面的格式。

    % 整个公式只有一个编号,
    \begin{equation}\label{eqn-2}
      \begin{aligned}
        y & = ax + b\\
        z & = cx + d
      \end{aligned}
    \end{equation}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    equation多行公式
    其中的aligned是用于实现equation中的多行公式并且可以辅助公式内各行的对齐,对齐位置用“&”。“&”个数没有限制,甚至可以是0,但各行使用的“&”个数的必须相同,否则编译时会报错。

    如果不嵌套aligned,各行无法对齐是其次,最重要的是无法实现换行。

    % 错误演示:不嵌套aligned的equation
    \begin{equation}\label{eqn-3}
        y = ax + b\\
        z = cx + d
    \end{equation}
    
    • 1
    • 2
    • 3
    • 4
    • 5

    不嵌套aligned的equation公式

    3)不编号公式

    有时使用的公式并不需要编号,此时可以改用equation*。与前面的区别仅在于该格式在equation后面加了一个“*”。具体示例如下。

    % 此时相应公式不编号,因没有编号,故无法引用
    \begin{equation*}
      \begin{aligned}
        y & = ax + b\\
        z & = cx + d
      \end{aligned}
    \end{equation*}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    equation*

    2. subequations:公式每行都有一个子编号

    使用equation可以一定程度上解决我们的需求,但在论文中引用公式时,有时只想引用公式中的某一个子行,也就是说公式的每行最好都能有自己的编号,此时使用subequations是最方便、直接的办法。

    1)基本格式

    %每个子行都有唯一编号
    \begin{subequations}\label{eqn-4}
      \begin{align}
        y & = a + b\\
        z & = c + d
      \end{align}
    \end{subequations}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    subequations基本格式
    其中align也是用于公式内各行的对齐。需要注意的是,这里的与equation中嵌套的不同,不是alignedalign的基本用法与aligned一致,也采用“\\”来换行,使用“&”来辅助对齐。

    注:如果将align改为align*,也可以实现公式不编号的功能。也就是在上图中去掉后面的两个编号。

    这里嵌套align很必要,否则公式虽然会编号也能引用,但是并不会显示,这会导致公式编号的混乱;而且此时subequations中的内容显示规则与正文一致(包括字体、缩进、写公式需要加“$”等)。

    %有编号也能引用但不显示,内容的显示规则与正文一致
    \begin{subequations}\label{eqn-5}
        y = ax + b\\
        \indent z = cx + d
    \end{subequations}
    
    • 1
    • 2
    • 3
    • 4
    • 5

    不嵌套align的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}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    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}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    公式存在分类情况
    注意,公式中展示文字需要使用“\mbox{文字内容}”,且有必要使用“~”来添加文字与公式中变量之间的空隙。如果不使用“\mbox”就会出现下图中第一个“otherwise”的显示效果;不使用"~"就会出现“if”和“ x x x”贴在一起的情况。
    不使用\mbox和~的错误示例

    equation中同样可以嵌套使用cases,使用方法相同。

    4)分段函数逐行编号(可以只编号部分行)

    在某些情况下,论文中展示的多行公式是一个方程组,需要联立,也就是需要在公式最左侧添加一个大括号,这个时候可以使用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}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    每行自由编号
    注意,如果某行不需要编号,直接在该行末尾(换行符“\\”前)添加“\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}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    联立方程且逐行编号

    参考文献:百度文库-Latex-条目、编号、描述

    该方法唯一不够优雅的就是不能对齐。如果在numcases中嵌套aligned(不是align),可以实现对齐,但是又无法实现逐行编号。如果各位有更优雅的写法,欢迎评论区分享一下~

    3. 超长公式

    1) 在两栏论文中并栏展示超长公式(暂未实现)

    待补充(需要翻翻以前的论文草稿)

  • 相关阅读:
    【面试】虚拟机栈面试题
    [安卓逆向]一步到位动态调试AliCrackme的so文件
    ubuntu安装freeswitch 1.10.10
    服务器硬件基础知识
    Tomcat,jdk下载配置(发布项目)
    摩托罗拉手机连接Wifi后提示“网络受限”问题的解决!
    计算机视觉专家:如何从C++转Python
    windows 上的C语言 图形界面设计函数 ( easyx 插件 )
    c++的多态,继承,抽象类,虚函数表,虚函数等题目+分析
    【王道】操作系统OS第四章文件管理(四)
  • 原文地址:https://blog.csdn.net/AbaloneVH/article/details/125599538