目录

IEEE期刊投稿公式编辑方法

本文介绍了向IEEE期刊投稿时,怎么优雅地编辑公式。

  1. 在编辑公式前,必须载入公式的基础包\userpackage{amsmath}

  2. 为了保持全文风格的一致性,建议只使用IEEEeqnarray环境,原因:

    • 不同的公式环境,前后留白的大小不一样
    • equation环境可以实现自动换行,但是有些时候,公式后面还有公式标号的空间时,也会自动换行后再生成公式标号,而IEEEequarray可以完全自由地控制换行的位置
    • align环境在某行公式过长时,会产生对齐问题,如下图所示。 <code>align</code>环境对齐问题
    • equarray环境可以解决公式对齐的问题,但是对齐后会导致=前后的空格变大,与其他任何一种环境都不一样,所以应严格不使用该环境 https://pic.rgsc.top/2020-12-10-d53659a0-equarray.png
    • IEEEeqnarray环境的灵活性和一致性,可以实现所有公式编辑中需要的功能
  3. 在使用IEEEeqnarray环境时,如果文档使用的是\documentclass[]{IEEEtran},则直接使用即可,如果不是则要载入包\usepackage{IEEEtrantools}(回复审稿意见时可能会用到)。

单行公式,直接一列,用{c}居中即可

1
2
3
\begin{IEEEeqnarray}{c}
  a = b + c
\end{IEEEeqnarray}

公式换行准则:

  • 通常在等号或者运算符前进行换行
  • 等号前优先于运算符前换行
  • 加号或者减号前优先于其他运算符前换行
  • 尽量避免其他换行方式

多行公式,分成三列,按照=进行对齐,左列靠右,中列剧中,右列靠左

1
2
3
4
5
\begin{IEEEeqnarray}{rCl}
  a & = & b + c    \\
    & = & e + f+ g \\
    & = & h + j
\end{IEEEeqnarray}

当公式后有括号说明时,可以添加空格列和文字对齐列,如:

1
2
3
\begin{IEEEeqnarray}{rCl"s}
 ...
\end{IEEEeqnarray}

列位置控制符:

符号 表示
l c r L C R 分别表示数字的靠左,居中,靠右
s t u 分别表示文字模式的靠左,居中,靠右
. / ? " 空格大小,逐渐变大

matrix环境实现:

  • matrix:无括号的矩阵,
  • pmatrix:(),
  • bmatrix:[],
  • Bmatrix:{},
  • vmatrix: | |,
  • Vmatrix: || ||

公式的某行是否编号以及是否有子编号,通过在行内加入 \IEEEyesnumber\IEEEnonumber\IEEEyessubnumber\IEEEnosubnumber来实现,上述命令后面加*,表示从此行起,遇到新的编号命令前,按照此行的命令执行。如\IEEEyesnumber*表示从此行起,后面的每行公式都编号。

编号命令放在每行的最后面,换行符\\前。

这种情况,不需要手动调整将比较长的那一行进行换行,只需在与编号重叠的那一行最后添加\IEEEeqnarraynumspace,公式整体会左移,空出公式编号的位置。

使用此方法时,要注意不要让公式的左侧超出文字的边界。

可以用\IEEEeqnarraymulticol{3}{l}{}将第一行的三列合并为一行,如下式:

1
2
3
4
5
\begin{IEEEeqnarray}{rCl}
  \IEEEeqnarraymulticol{3}{l}{ a + b + c + d + e + f + g + h}\IEEEnonumber\\* 
  \quad & = & i + j \\ 
       & = & k + l + m 
\end{IEEEeqnarray}

显示效果如下: https://pic.rgsc.top/2020-12-10-b49fe48b-multi_col.png 通过,添加\qquad可以调整下几行公式缩进的程度,需特别注意:\IEEEeqnarraymuticol前面不可以添加\lable{}

latex可以自动根据括号中公式的大小,调整对应的括号的大小,只需要在括号前加入\left\right或者\middle,如以下代码所示:

1
2
3
\begin{IEEEeqnarray}{c}
    H\left(X \, \middle| \, \frac{Y}{X} \right) 
\end{IEEEeqnarray}

显示效果如下: https://pic.rgsc.top/2020-12-11-7ca0acc6-presences.png

但是还需要解决以下两个问题:

  • 用括号表示函数$f()$时,$f$与$()$的距离太远,如下图所示: https://pic.rgsc.top/2020-12-11-2725110a-too_far.png 可以在文件头加入以下代码解决此问题:
1
2
\usepackage{mleftright}
\mleftright
  • 当左、右括号之间出现换行时,如下图所示 https://pic.rgsc.top/2020-12-11-bd6afbb7-swicth_line.png 可以在头文件加入以下代码解决此问题:
1
\newcommand{\sizecorr}[1]{\makebox[0cm]{\phantom{$\displaystyle #1$}}}

只需在公式换行符号\\后添加*

在文件头添加\interdisplaylinepenalty=xx

  • 若xx=0,则允许公式换页
  • 若xx=2500, 则由latex自行判断,在没有更好的处理办法时,再进行换页
  • 若xx=10000, 则严格禁止公式换页

只需在文件头添加\usepackage[colorlinks=true,linkcolor=blue]{hyperref}

  • -作为一元操作符是负号,作为二元操作符是减号,当他在公式某行的最前面时,会自动被当作一元操作符,会导致其与后一个符号的距离太近,应在符号后面添加\>,使其保持与后侧符号距离,作为二元操作符显示。
  • 某些情况下,latex会将一元操作符,显示为二元操作符,如在\log\sin前时,为了使其作为一元操作符显示应将后面的表达式用{}括起来,如-{\log a}

公式的\lable{}最好放在本行公式的最后,换行符\\前,以避免类似\IEEEeqnarraymulticol的情况

文字部分的字体应与公式符号的字体不一样,应该将文字部分用\text{}括起来,或者在指定环境中各列对齐方式时,使用s, t, u指定该部分为文字,在文字位置需要添加公式则用行内公式的写法$...$实现。

在文件头添加\newcommand{\dd}{\mathop{}\!\mathrm{d}},用\dd表示微分符号d

在文件头加入以下代码:

1
2
3
4
5
6
7
% argmin argmax  trace
\DeclareMathOperator*{\argminA}{arg\,min}
\DeclareMathOperator*{\argminB}{argmin}
\DeclareMathOperator*{\argmaxA}{arg\,max}
\DeclareMathOperator*{\argmaxB}{argmax}

\DeclareMathOperator{\tr}{Tr}

A和B两种样式都可以使用,选择自己习惯的样式。

不可见引用是指,在公式中使用了子编号如(3a), (3b), 并没有显式的出现编号(3), 而文中却引用了公式(3)。此时公式(3)的引用超链结会出现问题。需要在文件头中加入以下代码:

1
2
3
4
5
6
7
8
9
\makeatletter
\def\IEEElabelanchoreqn#1{\bgroup
\def\@currentlabel{\p@equation\theequation}\relax
\def\@currentHref{\@IEEEtheHrefequation}\label{#1}\relax
\Hy@raisedlink{\hyper@anchorstart{\@currentHref}}\relax
\Hy@raisedlink{\hyper@anchorend}\egroup}
\makeatother
\newcommand{\subnumberinglabel}[1]{\IEEEyesnumber
  \IEEEyessubnumber*\IEEElabelanchoreqn{#1}}

IEEEeqnarray环境中,如果定义了环境的字体,则公式的编号字体也会随之变化,为了避免这个问题,可以在文件头中加入下列代码:

1
2
\renewcommand{\theequationdis}{{\normalfont (\theequation)}} 
\renewcommand{\theIEEEsubequationdis}{{\normalfont (\theIEEEsubequation)}}

具体实现方法如下:

1
2
3
4
5
6
7
We have 
\begin{IEEEeqnarray}{rCl}
  \subnumberinglabel{eq:block3} a & = & b + c \label{eq:block3_eq1}\\ 
  & = & d + e \label{eq:block3_eq2}\\ 
  \noalign{\noindent and \vspace{2\jot}} 
 f & = & g - h + i \label{eq:block3_eq3} 
\end{IEEEeqnarray}

显示效果如下: https://pic.rgsc.top/2020-12-10-cb2793f2-align.png

注意中间的and部分实现代码是\noalign{\noindent and \vspace{2\jot}}

IEEEeqnarraybox用法与IEEEeqnarray类似,其特点是可以嵌套在其他环境中。 在IEEEeqnarraybox的属性中添加IEEEequarraystrutmode,具体用法见下列示例。 举例1:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
\begin{IEEEeqnarray}{c}
 \IEEEnonumber*
    \begin{IEEEeqnarraybox}[ \IEEEeqnarraystrutmode \IEEEeqnarraystrutsizeadd{3pt} {1pt} ]{c’c/v/c’c’c}
        D_1 & D_2 & & X_1 & X_2 & X_3 \\
        \hline 
        0 & 0 && +1 & +1 & +1\\ 
        0 & 1 && +1 & -1 & -1\\ 
        1 & 0 && -1 & +1 & -1\\ 1 & 1 && -1 & -1 & +1 
    \end{IEEEeqnarraybox} 
\end{IEEEeqnarray}

其中{3pt}{1pt}表示行前,行后添加的空白大小。

举例2:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
\begin{IEEEeqnarray}{c} 
    \left.
    \begin{IEEEeqnarraybox}[\IEEEeqnarraystrutmode \IEEEeqnarraystrutsizeadd{2pt}{2pt}][c]{rCl} 
    x & = & a + b\\ 
    y & = & a - b 
    \end{IEEEeqnarraybox} 
    \, \right\} \iff \left\{ \, 
    \begin{IEEEeqnarraybox}[ \IEEEeqnarraystrutmode \IEEEeqnarraystrutsizeadd{7pt} {7pt}][c]{rCl} 
    a & = & \frac{x}{2} + \frac{y}{2} \\ 
    b & = & \frac{x}{2} - \frac{y}{2} 
    \end{IEEEeqnarraybox} 
    \right.
    \label{eq:example_left_right2} 
\end{IEEEeqnarray}

上一个方法可以实现函数组,但他将函数组作为整体进行编号,要为组中每个函数逐个编号时,采用下述方法:

1
2
3
4
5
\begin{IEEEeqnarray}{rrCl}
    & \dot{x} & = & f(x,u) \\* 
    \smash{\left\{ \IEEEstrut[8\jot] \right.} & x+\dot{x} & = & h(x) \\* 
    & x+\ddot{x} & = & g(x) 
\end{IEEEeqnarray}

在左侧再添加一列,用\smash实现大括号${$, 其中的[8\jot]需要根据公式的大小进行调整,数字为 $(lines \times 2 + 2)$(公式中有\frac时是2行)。

  • 若公式行数为偶数时,用隐藏行实现大括号的对齐
1
2
3
4
5
6
7
8
9
\begin{IEEEeqnarray}{rrCl} 
    & \dot{x} & = & f(x,u) \\*
    [-0.625\normalbaselineskip] 
    % start invisible row 
    \smash{\left\{ \IEEEstrut[6\jot] \right.} \nonumber 
    % end invisible row \\*
    [-0.625\normalbaselineskip] 
    & x+\dot{x} & = & h(x) 
\end{IEEEeqnarray}
  • 若某些公式占用多行导致大括号位置不对称时
1
2
3
4
5
6
7
8
9
\begin{IEEEeqnarray}{rrCl}
    \subnumberinglabel{eq:uneven2} 
    & a_1 + a_2 & = & \sum_{k=1}^{\frac{M}{2}} f_k(x,u) \\*
    [-0.1\normalbaselineskip] 
    \smash{\left\{ \IEEEstrut[12\jot] \right.} \nonumber \\*
    [-0.525\normalbaselineskip]
    & b & = & g(x,u) \\* 
    & y_{\theta} & = & h(x) 
\end{IEEEeqnarray}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
% add packages
\usepackage{amsmath}
\usepackage{IEEEtrantools}

% add hyperlink for equation citation
\usepackage[colorlinks=true,linkcolor=blue]{hyperref}

% page-break permission : 0 :yes  10000:no  other:yes but let latex find someother way
\interdisplaylinepenalty=2500

% fix hyperlink to invisible equation number
\makeatletter
\def\IEEElabelanchoreqn#1{\bgroup
\def\@currentlabel{\p@equation\theequation}\relax
\def\@currentHref{\@IEEEtheHrefequation}\label{#1}\relax
\Hy@raisedlink{\hyper@anchorstart{\@currentHref}}\relax
\Hy@raisedlink{\hyper@anchorend}\egroup}
\makeatother
\newcommand{\subnumberinglabel}[1]{\IEEEyesnumber
  \IEEEyessubnumber*\IEEElabelanchoreqn{#1}}

% fix font behavior of IEEEeqnarray
\renewcommand{\theequationdis}{{\normalfont (\theequation)}} 
\renewcommand{\theIEEEsubequationdis}{{\normalfont (\theIEEEsubequation)}} 

% fix distance between f and ()
\usepackage{mleftright}
\mleftright

% fix ()paris in different line same size
\newcommand{\sizecorr}[1]{\makebox[0cm]{\phantom{$\displaystyle #1$}}}

% argmin argmax  trace
\DeclareMathOperator*{\argminA}{arg\,min}
\DeclareMathOperator*{\argminB}{argmin}
\DeclareMathOperator*{\argmaxA}{arg\,max}
\DeclareMathOperator*{\argmaxB}{argmax}

\DeclareMathOperator{\tr}{Tr}

% fix d in integration
\newcommand{\dd}{\mathop{}\!\mathrm{d}}

欢迎留言讨论。

Комментарии