转自:https://ridiqulous.com/latex-notes-details/

By Jueqin

12 Min read

In Blog

27 comments

April 23, 2016

最近一段时间迷上了 (La)TeX,也看了不少资料。LaTeX 排版过程中有不少 de facto(约定俗成的)规则,它们不是必须,但是是区别「熟练掌握 LaTeX」与「会使用 LaTeX」的关键因素。我本身就是对细节有强迫症的人,比如修改了 WordPress 的 style.css 后我可以对所有文章的代码都修改一遍,仅仅只为了图片和图注之间的间隔更加美观一些……

过一段时间后也许我会不记得这些 LaTeX 的小细节,因此这里稍加记录,以作备忘。

• 严格区分文字和公式

这一条应该是 LaTeX 用于科学文章排版的最基本要求。在文本输入中应该严格避免出现 \mathbf{}\mathrm{} 等语句,同理,在公式的编辑中也应该严格避免出现 \textbf{}\textrm{} 等。当然,如果使用了 AMSMath 宏包,则 \text{} 是在公式中输入文本的一种很好的方法。虽然大部分情况下读者是无法分辨一个公式中 \mathbf{} 和 \textbf{} 的区别,但是这毕竟是应该遵守的语法规则。

• 正确处理单词间距

这一条仅适用于英文排版,中文中水平间距的讲究要少得多,基本用一个 xeCJK 就都帮你搞定。

英文排版时 TeX 通常默认句号 . 表示一句话的结束,因此在处理句号时会留出稍宽一点的水平间距。但是有些情况下,句号并不代表句子的结尾,比如「i.e. a word」和「e.g. a word」。按照 TeX 默认规则,这里的宽度会比正常句中单词之间的间隔稍大一些,因此我们需要使用 (即一个反斜杠 + 一个空格)来消除这个过大的间距:i.e.\ a word 以及 e.g.\ a word

然而还有一种特殊情况下,TeX 并不会认为句号表示句子的结尾,那就是句号跟在一个大写字母的后面。此时 TeX 会认为这个句号表示人名缩写的间隔符,因此仍然按照正常间距来排版,比如 「A. Einstein」。然而这个看似贴心的规则在一些情况下会适得其反,比如一句话明明以缩略语结尾,TeX 反而认为这并不是一句话的结尾:「…… in NBA. He…」。此时,排版出的「He」之前的空格会小于正常的句间间距。这种情况下,需要使用 \@. (反斜杠 + @ + 句号 + 空格)来取代原先的句号,即 ... in NBA\@. He...\@ 用来强制告诉 TeX 这里的的确确是一个句子的结尾。

如下所示:

Two people i.e. you and me...
Two people i.e.\ you and me...
... played in NBA. He was ...
... played in NBA\@. He was ...

以上规则除句号外,同样适用于感叹号和问号。

• 公式中的间距设置

积分公式中的微分符号  前应该加入一个间距 \,,这个大多数人都知道。不仅如此,一条公式结尾处的标点符号和公式之间,也应该有一个间距 \,。另外,对于积分公式,积分符号  与被积项之间通常间距过大,这个时候可以利用 \! 来缩小这一间距。差别如下(上式为偷懒写法,下式为强迫症写法):

$\int_a^bf(x)dx = \alpha.$\\
$\int_a^b\!f(x)\,dx = \alpha\,.$

• 连字符(Hyphens)、连接号(En-dashes)、破折号(Em-dashes)及减号(Minus signs)

连字符 - 通常用来连接复合词,比如 daughter-in-law

连接号 -- 通常用来表示范围,比如 see pages 5--7。如果真的希望连续输入两个连字符,使用 {-}{-}

破折号 --- 是一个正规的标点符号,用来表示转折或者承上启下。要注意的是,破折号与其前后的单词之间不应该存在空格,例如 A specter is haunting Europe---the specter of Communism.

排版中的减号应该比连字符要长,因此用来表示减号或者负号时,请严格使用数学模式 $-5$ 而不要使用文字模式 -5

以上四种区别如下:

• 转置符号

我搜了一下好像转置符号并没有严格的规定,好几种都在普遍被使用。但是有一点是明确的,转置符号不能是斜体。常见的转置符号大概有四种(自定义的不算):

$\mathbf{A}^\mathrm{T}$
$\mathbf{A}^\top$
$\mathbf{A}^\mathsf{T}$
$\mathbf{A}^\intercal$

各自效果如下图所示:

我个人倾向于使用第三或者第四个。其中 \intercal 符号需要使用 AMS 的字符包: \usepackage{amssymb}

• 数学公式中的括号和斜除号

不要粗暴地使用 \left(...\right)\left[...\right]\left\{...\right\} 同理),用 \big\bigg\Big\Bigg 会更美观。在写单边括号时我个人还喜欢使用 \bigl\{ 或 \bigr\} 这种。

对于一些需要用到斜除号的地方,如果斜除号两边的字符比较高,用常规的 / 会导致式子很不协调,这个时候可以使用 \middle/ 来使得斜除号的高度与两侧字符高度相匹配。如下所示:

$x = a^\frac{1}{2}/b$
$x = \left.a^\frac{1}{2}\middle/b\right.$

• 序号

英文中的序号 1st、2nd、3rd 等,通常用文字模式输入就可以,但是在数学中,经常会涉及「nth element,第 n 个元素」等序号问题。一般会使用连字符来表示,比如 $n$-th。有的时候可能需要使用上标的方法,那么一般使用 $n^{\text{th}}$。如果再强迫症一点,可以使用 $n^{\text{\tiny th}}$ 使上标稍小一些。文字模式下,可以使用 \textsuperscript{th} 来显示为上标。或者使用 nth 宏包来方便输入(需要使用 [super] 选项来输入上标)。

以上几种方式总结如下:

\documentclass{article}
\usepackage[super]{nth}
\usepackage{amsmath}
\begin{document}
$n$th
$n$-th
$n^{\text{th}}$
$n^{\text{\tiny th}}$
1\textsuperscript{st}\quad 2\textsuperscript{nd}\quad n\textsuperscript{th}
\nth{1}\quad \nth{2}\quad \nth{4}
\end{document}

各自效果如下图:

• 避免数字出现在行首

这个细节大部分人应该都了解,使用 ~ 来代替空格可以避免交叉引用或者输入人名时尴尬地被打破成两行,例如 如图~\ref{Fig1} 所示,或者 as A.~Einstein said...

• 中英混排时空格的使用

对于中文排版或中英混排,推荐使用 xeCJK 而非古老的 CJK 或 CTeX。在 xeCJK 下(其他两个我没试过)(更正:这个其实是 XeLaTeX 的功劳,与 xeCJK 无关),中文与英文(或数字)之间,没有必要手动敲入一个空格,编译时会自动为中文与英文(或数字)之间添加合适的间距。但是有一个情况比较特殊,就是在交叉引用时,这个空格是需要手动敲入的,否则这个间距会消失。如下图所示:

\documentclass{article}
\usepackage{amsmath}
\usepackage{xeCJK}
\begin{document}
\begin{equation}
\int_a^b\!f(x)\,dx = \alpha\,.
\label{eq1}
\end{equation}
\begin{center}
... 在式~\eqref{eq1}中,...
... 在式~\eqref{eq1} 中,...
\end{center}
\end{document}

• 其他

  1. 波浪号(经常在页面的 url 中出现)可以使用 \~{} 来输入,但是这样会造成位于偏上的位置,像  这样。这个时候可以通过 $\sim$ 来解决,效果为 。
  2. 斜杠用来表示「或者」的关系时,最好不要简单地使用 /,比如 read/write,因为这样 TeX 会认为这两个单词是一个整体,不允许在它们之间加入断号,导致有些情况下一行文字过密或过疏。这个时候推荐使用 read\slash write,即允许排版时把这两个单词隔在两行。而在输入单位的时候,仍然使用 / 即可,比如 5 MB/s
  3. 用 \mbox{} 来避免一个单词中两个字母粘在一起的情况。比如为了防止「Sheffield」的两个 f 以及 f 和 i 之间相邻过近,可以写成 Shef\mbox{}f\mbox{}ield
  4. arydshln 宏包跟 array 宏包有冲突(也可能是 tabulary),需要把\usepackage{arydshln}放在最后。但是这会导致编译速度变得很慢。类似的做法也适合其他明明看上去很正常但是就是无法正确编译的情况,试试把某些宏包的声明放到最后。
  5. (参考自这里)使用 align 环境时,应该在对齐符号 & 前后使用一个占位符 {} 来避免不正确的缩进。比如
    \begin{align*}
    x+2y={}&1\\
    2x+y={}&1\\
    &{}+1
    \end{align*}

另外还有以下几点,不算细节的问题,但是是我这段时间学习到的一些经验:

• 谨慎使用 BibLaTeX

其实我是更偏向于使用 BibLaTeX,毕竟可定制化的地方更多一些,功能也更为强大。但是有不少的期刊并不接受 BibLaTeX,原因应该是 BibLaTeX 出现的时间太晚(2006年),而那些期刊早就有了自己固定的样式文件。例如我最近准备向 OSA 投稿,但是 OSA 提供的 LaTeX 模板中明确指定了使用 natbib 来生成参考文献。因此我的建议是,对于一些不是太正式的文档,可以利用 BibLaTeX 来生成文献引用,但是对于一些投稿的文档,则必须注意接稿方的要求,谨慎使用 BibLaTeX。

• 写文本之前明确文档类型

对于没有模板的文档,或者自己从头开始编写的文档,一定要先确定好文档类型,是 article 还是 report 还是 book。因为对于不同的文档类型,TeX 的层次结构是不一样的,如果写到一半时对文档类型进行变动,所有的层次、交叉引用的编号都会乱套。尤其对于中文排版,如果在导言区中自定义了一些针对不同层级的 renewcommand,结果会更惨…… 虽然可以通过一些方法对这个问题进行挽救,但是在写文档前就应该考虑清楚文档类型,尽量避免这种不必要的麻烦。

• 允许 MathJax 使用单美元符号输入行内公式

最后再补充一点跟排版无关的内容。我使用 MathJax 来使 WordPress 支持 (La)TeX,但是 MathJax 的默认配置是不允许使用单美元符号 $ ... $ 来输入行内公式的,而必须使用括号形式 \( ... \)。官方的理由是单美元符号 $ 出现频率太高,因此用括号的形式能够避免一些不必要的麻烦。但是在大部分的 .tex 文档中,我们往往习惯使用单美元符号来输入行内公式,这个时候,只需要在主题的 header.php 文件中加入 MathJax 的配置说明:

MathJax.Hub.Config({
tex2jax: {
inlineMath: [['
,'
], ['\\(','\\)']],
processEscapes: true}
});

这段配置通常放在原有调用 MathJax 语句下面即可,这时候 header.php 文件应该是这个样子:

References

  • Stack Exchange, What is the best symbol for vector/matrix transpose?, http://tex.stackexchange.com/questions/30619/what-is-the-best-symbol-for-vector-matrix-transpose
  • Martin J. Osborne, some common (la)tex errors, https://www.economics.utoronto.ca/osborne/latex/LTXERR.HTM
  • Will Robertson, Correct punctuation spaces, http://latex-alive.tumblr.com/post/827168808/correct-punctuation-spaces
  • Dr How, 强迫症玩转 LaTeX, http://zhuanlan.zhihu.com/p/19683504
  • Tobias Oetiker et.al.The Not So Short Introduction to LaTeX2ε, https://tobi.oetiker.ch/lshort/
  • Stack Exchange, bibtex vs. biber and biblatex vs. natbib, http://tex.stackexchange.com/questions/25701/bibtex-vs-biber-and-biblatex-vs-natbib
  • Wilson_NJUer, LaTeX 写作新手须知, http://weibo.com/ttarticle/p/show?id=2309403955741387052924

强迫症的 LaTeX 学习笔记相关推荐

  1. 二、LaTeX学习笔记——基本结构、设置表格、文字变形及符号、插入图片

    LaTeX学习笔记 写在最前面:LaTeX的注释符 界面字体放大 一.环境搭建与RUN 二.基本结构 三.设置表格 四.文字变形及符号 五.插入图片 附录.一些小tip LaTeX是一个可以用于文字编 ...

  2. 3、Latex学习笔记之表格篇

    目录 表格 1.基本结构 1.1框架 1.2行高 1.3标题 1.4标签 1.5居中 1.6表格 2.引用表格 3.常见表格类型 3.1三线表 3.2 斜线表头 3.3合并单元格 4.在线表格生成工具 ...

  3. Latex学习笔记——常用符号的输入

    我的Latex学习笔记 箭头符号 集合符号 数学运算符号 箭头符号 符号 代码 右箭头→\rightarrow→ \rightarrow 左箭头←\leftarrow← \leftarrow 右推出符 ...

  4. 假装认真的LaTeX学习笔记(1)—— Sublime中自动补全LaTeX命令(LaTeX-cwl安装教程)

    假装认真的LaTeX学习笔记(1)-- Sublime中自动补全LaTeX命令 简介 使用环境 如何在Sublime中获得LaTeX自动补全功能 安装Sublime插件--LaTeX-cwl 方法一: ...

  5. LaTeX学习笔记(中文版使用)

    下面是一篇优秀的LaTeX学习笔记, 转自: http://vincentme.org/post/LaTeX_study_note.php LaTeX LaTeX(LATEX,音译"拉泰赫& ...

  6. LaTeX 学习笔记

    LaTeX 学习笔记 在word中轻松将mathtype公式转换成latex 数学式行文规范 数学排式规范 LaTex中多行注释方法 使用不同中文字体 导言区 参考文献 latex的Table参数 图 ...

  7. 1、Latex学习笔记之基础入门篇

    目录 一.Latex基础 1.架构 2.引用.脚注 3.单栏.双栏 4.常用快捷键 5.宏包 6.空格 7.换行.行间距 8.换段 9.下划线 10.引号 11.注释 12.字体 13.缩进 14.超 ...

  8. 4、Latex学习笔记之数学公式篇

    目录 数学公式 1.基础操作 1.1插入公式 1.2 编号 1.3对齐 1.4上下标 2.希腊字母 3.字体 4.括号 4.1括号 4.2大括号 5.运算符 5.1关系运算符 5.2集合运算符 5.3 ...

  9. 3天的LaTeX学习笔记 ψ`∇´ψ、白嫖2018年河南专升本高数试卷一个——源码

    3天的LaTeX学习笔记 ψ`∇´ψ.白嫖2018年河南专升本高数试卷一个--源码 开始咯,助你迅速tex(科学与艺术)入门 安装 测试一下 LaTeX_笔记 ->可直接copy使用 不要走开精 ...

最新文章

  1. Linux下eclipse及mysql安装,c++访问mysql数据库
  2. Camera服务之--架构浅析
  3. 您的UX库不只是书籍
  4. 好看的css3用户基本信息卡片样式源码
  5. mysql column which is not functionally dependent GROUP BY clause
  6. Spark-Streaming获取kafka数据的两种方式-Receiver与Direct的方式
  7. linux 的常用命令---------第十二阶段(smb、FTP服务)
  8. CSDN markdown 数学公式指导手册
  9. ttl一会255一会64_什么是TTL 生存时间?Ping TTL的含义
  10. python tokenize()_tokenize- 用于Python源代码的Python – Python语言服务(Python教程)(参考资料)...
  11. java实现分数相加减
  12. 耀世升级发布,阿里新出第三版Java多线程核心技术手册PDF全彩版
  13. 手机设置代理后无法上网
  14. 服务器出错的原因有哪些
  15. GPT3类自动补全助手,个体+超级团队成为可能 | 技术趋势
  16. MySQL中的事务回滚机制
  17. 2019ICPC南昌网络赛总结
  18. Irrlicht学习笔记(5)--UserInterface
  19. Think PHP 5 定时任务
  20. java如何保证一个方法只能执行一次

热门文章

  1. 2021-03-21 什么是鲁棒性?
  2. 1028 大数乘法 V2(NTT or FTT)
  3. 基于FPGA的数字钟设计实验报告
  4. 如何使用HTML5+CSS3绘制一个QQ 企鹅Logo
  5. vscode中怎样格式化js代码_vsCode配置代码格式化
  6. 让 Google 搜索到自己的博客
  7. 泛泰A880 Recovery
  8. Python excel转成html页面 excel 在线预览
  9. 一台电脑可以登录多个微信的脚本
  10. Seaborn调色板设置