14° toollatex tool1,508字0条评论

LaTeX 参考资料

LaTex

https://b.kunn.cc


20200614, 如何优雅地使用LaTeX写论文? - 陈林的回答 - 知乎

以下所列的内容,并没有特别的排序。其中有些很可能是个人的偏好。我根据我新学到的LaTeX格式上的知识会不断更新在最前面。如有错误,欢迎评论,我会修改并致谢。

  1. 区分-(hyphen,连字符,如model-based algorithm),--(en-dash,表示范围,如page 3--7)和---(em-dash,破折号)三者不同的用法。

  2. 在displayed equation(比如\[ 1+1=2 \]环境中,如果这个公式是句子的结尾,要加句号,但是句号前面要有一点空格,我一般用\,,如果再加上句号,就写成\[ 1+1=2\,. \]。如果后面有句子,比如用来解释其中字母含义的where,要加逗号,写成\[ 1+1=2\,, \]

  3. 在公式中的省略号用\dots(或者\ldots\cdots,其中\dots会根据上下文变成\ldots或者\cdots),不要手动写三个点。

  4. 如果希望括号随着括号中的内容的大小能自动变化,则使用\left(\right)\left[\right]、或者\left\{\right\}

  5. 有一个package叫paralist,提供了行距比较小的enumerate和itemize环境,叫做compactenumcompactitem,还提供很多其他的功能,有兴趣可以看看文档。

  6. 引用文章时如果有会议或是期刊的版本,则引用之,尽量不要引用arXiv。如果没有会议或期刊版本而有arXiv版本,则引用arXiv版本。
  7. 不要引用Wikipedia,它不是正规的学术出处。 (感谢@Enrique Juan

:引用wikipedia内容的正确姿势是看wiki条目中标注的原始来源,好的条目通常会注明引用自哪篇学术文章或新闻报导。)

  1. 如果觉得LaTeX的article环境的页边距(margin)太大,可以用fullpage包。
  2. 如果e.g.i.e.i.i.d.等缩写不在句子结尾,且后面没有标点符号(比如逗号),则需要加\再加一个空格,写成e.g.\ apple,否则LaTeX会认为这是一个句子的结尾而增加空白(除非是french spacing)。 最容易犯此类错误的可能就是i.i.d.了。

  3. 表示引用或强调的斜体一般用\emph而不是\textit,这是因为后者在上下文是斜体的环境(比如定理环境)中不会变成别的字体,而依然是斜体,起不到强调作用。

  4. 如果公式里字母的下标是文字,使用\textnormal,比如P_{\textnormal{total}},它不会随着外在环境的字体而改变,而且大小一般也是正确的。

  5. 在使用align环境的时候,如果定位符&在等号(或者大于号、小于号等)后面,要加{},写成={}&,因为&会吃掉前面的空格。

  6. 不要用数学公式或者数学符号作为一个句子的开头。也不要用拉丁缩写如I.e.开头。

  7. 了解natbib的引用命令\citep\citet\citep一般会产生带括号的引用,如[1]或者(Chen et al., 2019),取决于设定的引用风格。而\citet会产生带有作者名字的的引用,一般用于做主语,如Chen et al. (2019) proposed an interesting algorithm.

  8. 引用文献前应该有空格,例如The Hello World algorithm [1]。个人比较喜欢在此处用~来产生空格。

  9. 书写(有姓和名等几个部分的)西方人名的时候,用~产生空格,这样名字不会被分成两行。

  10. 如果需要使用自己定义的文字型的数学运算符,比如conv表示凸包,需要用\DeclareMathOperator或者\DeclareMathOperator*(这两者在公式是displayed的时候下标的位置不同)或者\operatorname,不要用\mathrm或者\text等。(@卧在角落的猫提到的\mathop,可以参看 https://tex.stackexchange.com/questions/84302/what-is-the-difference-of-mathop-operatorname-and-declaremathoperator 。正如上面的链接所指出,依然建议只用\operatorname\DeclareMathOperator\DeclareMathOperator*

  11. 引用数学公式用\eqref{eq:equation-name},不需要像这样手动加括号(\ref{eq:equation-name})

  12. 有能够自动给长公式分行的包叫breqn,但是有时不够智能。

  13. cleveref包会根据标签类型自动加上前缀,比如某个label是属于一个section的(比如\label{sec:intro}),那么用\cref{sec:intro}就会产生Section 1(如果这个section编号是1,前面的Section前缀是自动产生的)。如果label是一个定理,也会自动产生Theorem前缀。通常我们希望前缀是大写的,所以用\usepackage[capitalize]{cleveref}

  14. \label{}里面标签的命名分为两段,前面是类型名,后面是具体的标签名,中间用冒号隔开,比如\label{sec:introduction}是给introduction这个section的标签,再如\label{thm:main}是给一个定理环境的标签。这样的好处是LaTeX的IDE可以在输入类型名的时候自动对文章的标签进行过滤,只显示这个类型名的标签。常用的类型名如

    • sec: section
    • sub: subsection
    • alg: algorithm
    • thm: theorem
    • lem: lemma
    • cor: corollary
    • rmk: remark
    • defn: definition
    • it: item (用在enuemrate, itemize等环境中)
    • tab: table
    • fig: figure
    • ln:line(算法的某一行)
  15. 批量定义 mathcal, mathbb, mathbf 字母的 macro
\usepackage{forloop}
% Caligraphics and Board Letters
\newcommand{\defcal}[1]{\expandafter\newcommand\csname 
    c#1\endcsname{{\mathcal{#1}}}}
\newcommand{\defbb}[1]{\expandafter\newcommand\csname 
    b#1\endcsname{{\mathbb{#1}}}}
\newcommand{\defbf}[1]{\expandafter\newcommand\csname 
    bf#1\endcsname{{\mathbf{#1}}}}
\newcounter{calBbCounter}
\forLoop{1}{26}{calBbCounter}{
    \edef\letter{\Alph{calBbCounter}}
    \expandafter\defcal\letter
    \expandafter\defbb\letter
    \expandafter\defbf\letter
}
\forLoop{1}{26}{calBbCounter}{
    \edef\letter{\alph{calBbCounter}}
    \expandafter\defbb\letter
    \expandafter\defbf\letter
}

这样 对于26个字母都定义了 macro,比如\cR 就等价于 \mathcal{R},\bR 等价于 \mathbb{R} ,\bfx 等价于 \mathbf{x} 。

end

EOF
Speech 演讲
Comments
Write a Comment