hilljie

1小时LATEX排版

优雅的 LaTeX

有很多 Geeks 或者 LaTeX\'s Fanatical Fans 过分地强调了 LaTeX 的一些并非重点的特性,以至于很多初学者会觉得 LaTeX 很神秘很复杂,从而引发了初学者的畏难情绪甚至是负面情绪。尽管这些 Fans 说得并没有错,我是说在事实上,但是他们的表达方式和内心态度却间接阻碍了 LaTeX 的发展,我想这也是和他们的初衷相悖的。

我曾经也受到过这些言论的影响,但幸运的事,至今为止我已经越过了这些障碍,并更加坚信了他们所言(LaTeX 的优点)的正确性。因此我想以我自己的方式,向更多的人介绍 LaTeX —— 这个优雅,但有着自己高傲,却绝不复杂甚至神秘的东西

关于编辑器的简单介绍

TeX 的源代码是后缀为 .tex 的纯文本文件。使用任意纯文本编辑器,都可以修改 .tex 文件:包括 Windows 自带的记事本程序,也包括专为 TeX 设计的编辑器(TeXworks, TeXmaker, TeXstudio, WinEdt 等),还包括一些通用的文本编辑器(Sublime Text, Atom, Visual Studio Code 等)。你可以在这些能够编辑纯文本文件的编辑器中任选其一作为你的 TeX 编辑器,也可以使用 TeX 发行自带的编辑器。最流行的两个 TeX 发行(TeX Live 和 MiKTeX)都带有 TeXworks 编辑器。

所谓 TeX 发行,也叫 TeX 发行版、TeX 系统或者 TeX 套装,指的是包括 TeX 系统的各种可执行程序,以及他们执行时需要的一些辅助程序和宏包文档的集合。

本文只介绍 TeXworks 的使用,原因有以下一些:

  • TeXworks 是 TeX Live 自带的编辑器,而 TeX Live 是 TeX User Group 出品的跨平台发行版,各个操作系统都可以使用;
  • 几乎所有 TeX 发行版都带有 TeXworks;
  • TeXworks 十分简洁,除了最基本的功能之外,没有其他复杂的东西,能使你将注意力集中在 TeX 的学习上。

排版工具

TeXworks 为我们预设了若干排版工具(pdfTeX, pdfLaTeX, XeTeX, XeLaTeX 等),本文主要用到其中的 *XeLaTeX*。关于这些排版工具的细节,讲解起来会有些复杂。因此此处按下不表,若有兴趣,可以参看后文。当你对 TeX 系统相当熟悉之后,也可以不使用 TeXworks 预设的工具,自己配置排版工具。

TeXworks 默认的排版工具是 pdfLaTeX。如果你希望更改这个默认值,可以在编辑 - 首选项 - 排版 - 处理工具 - 默认 中修改。

TeX - LaTeX

TeX 是排版引擎,同时也是该引擎使用的标记语言(Markup Language)的名称。这里所谓的引擎,是指能够实现断行、分页等操作的程序(请注意这并不是定义);这里的标记语言,是指一种将控制命令和文本结合起来的格式,它的主体是其中的文本而控制命令则实现一些特殊效果(同样请注意这并不是定义)。

你可以在这里找到关于 TeX 引擎的具体描述;

你可以在这里找到关于标记语言的具体描述。

而 LaTeX 则是 L. Lamport (1941年2月7日 -- ) 教授开发的基于 TeX 的排版系统。实际上 LaTeX 利用 TeX 的控制命令,定义了许多新的控制命令并封装成一个可执行文件。这个可执行文件会去解释 LaTeX 新定义的命令成为 TeX 的控制命令,并最终交由 TeX 引擎进行排版。

实际上,LaTeX 是基于一个叫做 plain TeX 的格式的。plain TeX 是高德纳教授为了方便用户,自己基于原始的 TeX 定义的格式,但实际上 plain TeX 的命令仍然十分晦涩。至于原始的 TeX 直接使用的人就更少了,因此 plain TeX 格式逐渐就成为了 TeX 格式的同义词,尽管他们事实上是不同的。

因此在 TeX - LaTeX 组合中,

  1. 最终进行断行、分页等操作的,是 TeX 引擎;
  2. LaTeX 实际上是一个工具,它将用户按照它的格式编写的文档解释成 TeX 引擎能理解的形式并交付给 TeX 引擎处理,再将最终结果返回给用户。

pdfTeX - pdfLaTeX

TeX 系统生成的文件是 dvi 格式,虽然可以用其他程序将其转换为例如 pdf 等更为常见的格式,但是毕竟不方便。

dvi 格式是为了排版而产生的,它本身并不支持所谓的「交叉引用」,pdfTeX 直接输出 pdf 格式的文档,这也是 pdfTeX 相对 TeX 进步(易用性方面)的地方。

为了解决这个问题,Hàn Thế Thành 博士在他的博士论文中提出了 pdfTeX 这个对 TeX 引擎的扩展。二者最主要的差别就是 pdfTeX 直接输出 pdf 格式文档,而 TeX 引擎则输出 dvi 格式的文档。

pdfTeX 的信息可以查看wiki.

pdfLaTeX 这个程序的主要工作依旧是将 LaTeX 格式的文档进行解释,不过此次是将解释之后的结果交付给 pdfTeX 引擎处理。

XeTeX - XeLaTeX

高德纳教授在实现 TeX 的当初并没有考虑到中日韩等字符的处理,而只支持 ASCII 字符。这并不是说中日韩字符就无法使用 TeX 引擎排版了,事实上 TeX 将每个字符用一个框包括起来(这被称为盒子)然后将一个个的盒子按照一定规则排列起来,因而 TeX 的算法理论上适用于任何字符。ASCII 字符简单理解,就是在半角模式下你的键盘能直接输出的字符。

在 XeTeX 出现之前,为了能让 TeX 系统排版中文,国人曾使用了 天元、CCT、CJK 等手段处理中文。其中 天元和CCT 现在已经基本不用,CJK 因为使用时间长且效果相对较好,现在还有人使用。

不同于 CJK 等方式使用 TeX 和 pdfTeX 这两个不直接支持 Unicode 字符的引擎,XeTeX 引擎直接支持 Unicode 字符。也就是说现在不使用 CJK 也能排版中日韩文的文档了,并且这种方式要比之前的方式更加优秀。

XeLaTeX 和 XeTeX 的关系与 pdfLaTeX 和 pdfTeX 的关系类似,这里不再赘述。

使用 XeTeX 引擎需要使用 UTF-8 编码。

所谓编码就是字符在计算机储存时候的对应关系。例如,假设有一种编码,将汉字「你」对应为数字「1」;「好」对应为数字「2」,则含有「你好」的纯文本文件,在计算机中储存为「12」(读取文件的时候,将「12」再转换为「你好」显示在屏幕上或打印出来)。

UTF-8 编码是 Unicode 编码的一种,可以参考它的 wiki.

LuaTeX

LuaTeX 是正在开发完善的一个 TeX 引擎,相对它的前辈们还相当的不完善,这里不赘述。

CTeX - MiKTeX - TeX Live

之前介绍了 TeX, LaTeX, pdfTeX, pdfLaTeX, XeTeX, XeLaTeX, LuaTeX 等,他们都是 TeX 家族的一部分。但是作为一个能够使用的 TeX 系统,仅仅有他们还是不够的。CTeX, MiKTeX, TeX Live 都是被称为「发行」的软件合集。他们包括了上述各种引擎的可执行程序,以及一些文档类、模板、字体文件、辅助程序等等。其中 CTeX 是建立在 MiKTeX 的基础之上的。

总结

TeX - pdfTeX - XeTeX - LuaTeX 都是排版引擎,按照先进程度递增(LuaTeX 尚未完善)。

LaTeX 是一种格式,基于 TeX 格式定义了很多更方便使用的控制命令。上述四个引擎都有对应的程序将 LaTeX 格式解释成引擎能处理的内容。

CTeX, MiKTeX, TeX Live 都是 TeX 的发行,他们是许许多多东西的集合。

第一篇文档

Hello, world!

在编辑框中,输入如下内容:

helloworld.tex
\documentclass{article}
% 这里是导言区
\begin{document}
Hello, world!
\end{document}

将文档保存在你希望的位置,然后在排版工具的下拉选框中选中 XeLaTeX 后,按下绿色的编译按钮。一会儿,如果没有意外,屏幕的右边就会出现编译之后结果。如下图:

![img](https://liam.page/uploads/teaching/LaTeX/figures/818901c1jw1e44e55rnkkj211y0kmwgi.jpg

请注意,由于操作系统编码和 TeX 内部实现的限制,在 Windows 平台上,TeX 涉及到的文件(包括 .tex, .jpg 等各类文件)都不要包含中文名字。否则,在编译时可能会因为编码问题导致稀奇古怪的报错。

很容易发现,输入进编辑框的五行文字,在最终输出的 pdf 档中只显示了 1 行。事实上,交付 TeX 处理的文档内容,并不会全部输出。

此处的第一行 \documentclass{article} 中包含了一个控制序列(或称命令/标记)。所谓控制序列,是以反斜杠 \ 开头,以第一个*空格或非字母* 的字符结束的一串文字。它们不被输出,但是他们会影响输出文档的效果。这里的控制序列是 documentclass,它后面紧跟着的 {article} 代表这个控制序列有一个必要的参数,该参数的值为 article。这个控制序列的作用,是调用名为 article 的文档类。

*请注意,TeX 对控制序列的大小写是敏感的*

部分控制序列还有被方括号 [] 包括的可选参数。

所谓文档类,即是 TeX 系统预设的(或是用户自定的)一些格式的集合。不同的文档类在输出效果上会有差别。

此处的第二行以 % 开头。TeX 以百分号 % 作为注释标记。具体来说,TeX 会忽略从 % 开始到当前行末尾的所有内容。这些内容不会被输出,也不影响最终排版效果,只供人类阅读。若要输出 % 字符本身,则需要在 % 之前加上反斜杠 \ 进行转义(escape)。例如:

今年的净利润为 20\%,比去年高。

此处 % 被当做正常的百分号处理,其后的文字也将被正常输出。

我们继续分析第一篇文档的内容。在注释行之后出现了控制序列 begin。这个控制序列总是与 end 成对出现。这两个控制序列以及他们中间的内容被称为「环境」;它们之后的第一个必要参数总是一致的,被称为环境名。

只有在 document 环境中的内容,才会被正常输出到文档中去或是作为控制序列对文档产生影响。也就是说,在 \end{document} 之后插入任何内容都是无效的。

\documentclass{article} 开始到 \begin{document} 之前的部分被称为导言区。你可以将导言区理解为是对整篇文档进行设置的区域——在导言区出现的控制序列,往往会影响整篇文档的格式。

比如,我们通常在导言区设置页面大小、页眉页脚样式、章节标题样式等等。

组织你的文章

作者、标题、日期

保存并用 XeLaTeX 编译如下文档,查看效果:

\documentclass[UTF8]{ctexart}
\title{你好,world!}
\author{Liam}
\date{\today}
\begin{document}
\maketitle
你好,world!
\end{document}

导言区复杂了很多,但和之前的文档主要的区别只有一处:定义了标题、作者、日期。

document 环境中,除了原本的你好,world!,还多了一个控制序列 maketitle。这个控制序列能将在导言区中定义的标题、作者、日期按照预定的格式展现出来。

使用titling宏包可以修改上述默认格式。参考TeXdoc

章节和段落

保存并用 XeLaTeX 编译如下文档,查看效果:

\documentclass[UTF8]{ctexart}
\title{你好,world!}
\author{Liam}
\date{\today}
\begin{document}
\maketitle
\section{你好中国}
中国在East Asia.
\subsection{Hello Beijing}
北京是capital of China.
\subsubsection{Hello Dongcheng District}
\paragraph{Tian\'anmen Square}
is in the center of Beijing
\subparagraph{Chairman Mao}
is in the center of 天安门广场。
\subsection{Hello 山东}
\paragraph{山东大学} is one of the best university in 山东。
\end{document}

在文档类 article/ctexart 中,定义了五个控制序列来调整行文组织结构。他们分别是

  • \section{·}
  • \subsection{·}
  • \subsubsection{·}
  • \paragraph{·}
  • \subparagraph{·}

report/ctexrep中,还有\chapter{·};在文档类book/ctexbook中,还定义了\part{·}

插入目录

在上一节的文档中,找到 \maketitle,在它的下面插入控制序列 \tableofcontents,保存并用 XeLaTeX 编译两次,观察效果

插入数学公式

首先恭喜你看到这里。如果前面的几个文档你都认真编译过了,那么你已经可以胜任许多文档的排版工作。下面我们进入 LaTeX 最为犀利的部分。

这部分的演示中,为了节省篇幅,将取消导言区中中文支持的部分。在实际使用中,你只需要将导言区中的相关部分加上,就可以同时使用中文和编写数学公式了。

为了使用 AMS-LaTeX 提供的数学功能,我们需要在导言区加载 amsmath 宏包:

\usepackage{amsmath}

数学模式

LaTeX 的数学模式有两种:行内模式 (inline) 和行间模式 (display)。前者在正文的行文中,插入数学公式;后者独立排列单独成行,并自动居中。

在行文中,使用 $ ... $ 可以插入行内公式,使用 \[ ... \] 可以插入行间公式,如果需要对行间公式进行编号,则可以使用 equation 环境:

省略号

省略号用 \dots, \cdots, \vdots, \ddots 等命令表示。\dots\cdots 的纵向位置不同,前者一般用于有下标的序列。

\[ x_1,x_2,\dots ,x_n\quad 1,2,\cdots ,n\quad
\vdots\quad \ddots \]

矩阵

amsmathpmatrix, bmatrix, Bmatrix, vmatrix, Vmatrix 等环境可以在矩阵两边加上各种分隔符。

\[ \begin{pmatrix} a&b\\c&d \end{pmatrix} \quad
\begin{bmatrix} a&b\\c&d \end{bmatrix} \quad
\begin{Bmatrix} a&b\\c&d \end{Bmatrix} \quad
\begin{vmatrix} a&b\\c&d \end{vmatrix} \quad
\begin{Vmatrix} a&b\\c&d \end{Vmatrix} \]

使用 smallmatrix 环境,可以生成行内公式的小矩阵。

Marry has a little matrix $ ( \begin{smallmatrix} a&b\\c&d \end{smallmatrix} ) $.

多行公式

有的公式特别长,我们需要手动为他们换行;有几个公式是一组,我们需要将他们放在一起;还有些类似分段函数,我们需要给它加上一个左边的花括号。

长公式

不对齐

无须对齐的长公式可以使用 multline。 如果不需要编号,可以使用 multline* 环境代替。

\begin{multline}
x = a+b+c+{} \\
d+e+f+g
\end{multline}

公式组

无需对齐的公式组可以使用 gather 环境,需要对齐的公式组可以使用 align 环境。他们都带有编号,如果不需要编号可以使用带星花的版本。

\begin{gather}
a = b+c+d \\
x = y+z
\end{gather}
\begin{align}
a &= b+c+d \\
x &= y+z
\end{align}

效果:

img

请注意,不要使用 eqnarray 环境。原因可以参考:

分段函数

分段函数可以用cases次环境来实现,它必须包含在数学环境之内。

\[ y= \begin{cases}
-x,\quad x\leq 0 \\
x,\quad x>0
\end{cases} \]

效果图:

img

辅助工具

站在我个人的角度,我建议 LaTeX 用户应当尽可能避免使用辅助工具输入数学公式。但对于急用的初学者而言,适当地使用辅助工具(而不形成依赖)也是有一些收益的。因此这里介绍一些关于数学公式的辅助工具。

  • https://mathpix.com/ 能够通过热键呼出截屏,而后将截屏中的公式转换成 LaTeX 数学公式的代码。
  • http://detexify.kirelabs.org/classify.html 允许用户用鼠标在输入区绘制单个数学符号的样式,系统会根据样式返回对应的 LaTeX 代码(和所需的宏包)。这在查询不熟悉的数学符号时特别有用。

插入图片和表格

图片

在 LaTeX 中插入图片,有很多种方式。最好用的应当属利用 graphicx 宏包提供的 \includegraphics 命令。比如你在你的 TeX 源文件同目录下,有名为 a.jpg 的图片,你可以用这样的方式将它插入到输出文档中:

\documentclass{article}
\usepackage{graphicx}
\begin{document}
\includegraphics{a.jpg}
\end{document}

图片可能很大,超过了输出文件的纸张大小,或者干脆就是你自己觉得输出的效果不爽。这时候你可以用 \includegraphics 控制序列的可选参数来控制。比如

\includegraphics[width = .8\textwidth]{a.jpg}

这样图片的宽度会被缩放至页面宽度的百分之八十,图片的总高度会按比例缩放。

\includegraphics 控制序列还有若干其他的可选参数可供使用,一般并用不到。感兴趣的话,可以去查看该宏包的文档

表格

tabular 环境提供了最简单的表格功能。它用 \hline 命令表示横线,在列格式中用 | 表示竖线;用 & 来分列,用 \\ 来换行;每列可以采用居左、居中、居右等横向对齐方式,分别用 lcr 来表示。

\begin{tabular}{|l|c|r|}
 \hline
操作系统& 发行版& 编辑器\\
 \hline
Windows & MikTeX & TexMakerX \\
 \hline
Unix/Linux & teTeX & Kile \\
 \hline
Mac OS & MacTeX & TeXShop \\
 \hline
通用& TeX Live & TeXworks \\
 \hline
\end{tabular}

浮动体

插图和表格通常需要占据大块空间,所以在文字处理软件中我们经常需要调整他们的位置。figuretable 环境可以自动完成这样的任务;这种自动调整位置的环境称作浮动体(float)。我们以 figure 为例。

\begin{figure}[htbp]
\centering
\includegraphics{a.jpg}
\caption{有图有真相}
\label{fig:myphoto}
\end{figure}

htbp 选项用来指定插图的理想位置,这几个字母分别代表 here, top, bottom, float page,也就是就这里、页顶、页尾、浮动页(专门放浮动体的单独页面或分栏)。\centering 用来使插图居中;\caption 命令设置插图标题,LaTeX 会自动给浮动体的标题加上编号。注意 \label 应该放在标题命令之后。

版面设置

页边距

设置页边距,推荐使用 geometry 宏包。可以在这里查看它的说明文档。

比如我希望,将纸张的长度设置为 20cm、宽度设置为 15cm、左边距 1cm、右边距 2cm、上边距 3cm、下边距 4cm,可以在导言区加上这样几行:

\usepackage{geometry}
\geometry{papersize={20cm,15cm}}
\geometry{left=1cm,right=2cm,top=3cm,bottom=4cm}

页眉页脚

设置页眉页脚,推荐使用 fancyhdr 宏包。可以在这里查看它的说明文档。

比如我希望,在页眉左边写上我的名字,中间写上今天的日期,右边写上我的电话;页脚的正中写上页码;页眉和正文之间有一道宽为 0.4pt 的横线分割,可以在导言区加上如下几行:

\usepackage{fancyhdr}
\pagestyle{fancy}
\lhead{\author}
\chead{\date}
\rhead{152xxxxxxxx}
\lfoot{}
\cfoot{\thepage}
\rfoot{}
\renewcommand{\headrulewidth}{0.4pt}
\renewcommand{\headwidth}{\textwidth}
\renewcommand{\footrulewidth}{0pt}

行间距

段间距

我们可以通过修改长度 \parskip 的值来调整段间距。例如在导言区添加以下内容

\addtolength{\parskip}{.4em}

则可以在原有的基础上,增加段间距 0.4em。如果需要减小段间距,只需将该数值改为负值即可。

实现中英文混排

关于 LaTeX 的中文支持,首先要说的是:在现在,一切教你使用 CJK 宏包的模板、人、网页、书,都是糟糕的、有害的、恼人的、邪恶的和应该摒弃的。

成功编译输出第一个文档之后,中国 TeX 用户面临的第二个普遍问题大概就是「实现中英文混排」了。众所周知,TeX 系统是高教授开发的。在 TeX 开发当初并没有考虑到亚洲文字的问题。因此早期的 TeX 系统并不能直接支持中文,必须要用其他工具先处理一下(或者是一些宏包之类的)。但是现在,XeTeX 原生支持 Unicode,并且可以方便地调用系统字体。可以说解决了困扰中国 TeX 使用者多年的大问题。至此,我们只需要使用几个简单的宏包,就能完成中文支持了。

所谓宏包,就是一系列控制序列的合集。这些控制序列太常用,以至于人们会觉得每次将他们写在导言区太过繁琐,于是将他们打包放在同一个文件中,成为所谓的宏包(台湾方面称之为「巨集套件」)。\usepackage{} 可以用来调用宏包。

除去中文支持,中文的版式处理和标点禁则也是不小的挑战。好在由吴凌云和江疆牵头,现在主要由刘海洋等维护的 CTeX 宏集一次性解决了这些问题。CTeX 宏集的优势在于,它能适配于多种编译方式;在内部处理好了中文和中文版式的支持,隐藏了这些细节;并且,提供了不少中文用户需要的功能接口。我们来看如何使用 CTeX 宏集来处理中英文混排的文档。

请注意,CTeX 宏集和 CTeX 套装是两个不同的东西。CTeX 宏集本质是 LaTeX 宏的集合,包含若干文档类(.cls 文件)和宏包(.sty 文件)。CTeX 套装是一个过时的 TeX 系统。

新版 CTeX 宏集的默认能够自动检测用户的操作系统,并为之配置合适的字库。对于 Windows 用户、Mac OS X 用户和 Linux 用户,都无需做任何配置,就能使用 CTeX 宏集来排版中文。[2015-05-20 更新]

在 TeXworks 编辑框中输入以下内容,以 UTF-8 编码保存,使用 XeLaTeX 编译

EC-mix.tex
\documentclass[UTF8]{ctexart}
\begin{document}
你好,world!
\end{document}

读文档

关于 LaTeX 的文档有很多,其中有些内容过时地很快。所以有必要告诉大家,哪些文档应该看,那些文档不应该看。索性,这个问题,刘海洋(milksea)前辈已经叙述得很清楚了。前段时间,我和几个朋友,将现在看起来还未过时的文档打包上传到了我的博客。参考:ZIP 归档

遇到问题怎么办

  1. 绝对的新手,先读完一本入门读物,了解基本的知识;
  2. 无论如何,先读文档!绝大部分问题都是文档可以解决的;
  3. 利用 Google 搜索你的问题;
  4. 在各个论坛或者 LaTeX 交流群里聪明地提出你的问题。

参考:https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md

  1. (几乎是)最简洁的 (La)TeX 编辑器——TeXworks——的基本使用方法;
  2. 如何使用 (Xe)LaTeX 进行简单的中英混排
  3. 简单的文章组织结构;
  4. 如何用 (Xe)LaTeX 进行数学公式的排版;
  5. 如何在 (Xe)LaTeX 的文档中插入图片/表格;
  6. 如何进行简单的版面设置;
  7. 几个最常见的带有 TeX 的单词的含义;
  8. 出现问题应当如何处理/怎样聪明地提出你的问题——怎样从这里毕业。

插入目录找到 \maketitle,在它的下面插入控制序列 \tableofcontents,保存并用 XeLaTeX 编译两次

问题解决

标题自动编号

\section{Notation}  % 带序号
1

标题不编号

\section*{Notation}  %不带序号

公式换行

目前用到的公式换行情况主要有2种,分别为表格内的公式换行和常规的公式换行,现总结如下。

  1. 表格内公式换行

    % 先将下面的语句放在latex正文的导言区:
    \newcommand{\tabincell}[2]{\begin{tabular}{@{}#1@{}}#2\end{tabular}
    % 在tabular内的格子内使用 \tabincell{c}{} 插入相应内容, 就可以在表格中自动换行
    \hline 2 & \tabincell{c}{hello\ aha\ ok \yes \en} & \tabincell{c}
    
  2. 公式内换行

    \begin{equation}
    \begin{split}
    ...
    \end{split}
    \end{equation}
    
  3. 绝对值使用:

    \lvert char \rvert
    

强制图片位置

常用选项[htbp]是浮动格式:
『h』当前位置。将图形放置在正文文本中给出该图形环境的地方。如果本页所剩的页面不够,这一参数将不起作用。
『t』顶部。将图形放置在页面的顶部。
『b』底部。将图形放置在页面的底部。
『p』浮动页。将图形放置在一只允许有浮动对象的页面上。

一般使用[htb]这样的组合,只用[h]是没有用的。这样组合的意思就是latex会尽量满足排在前面的浮动格式,就是h-t-b这个顺序,让排版的效果尽量好。
!h 只是试图放在当前位置。如果页面剩下的部分放不下,还是会跑到下一页的。一般页言,用 [!h] 选项经常会出现不能正确放置的问题,所以常用 [ht]、[htbp] 等。

如果你确实需要把图片放在当前位置,不容改变,可以用float宏包的[H]选项。不过如果这样做,出现放不下的问题时需要手工调整。使用格式如下:

\usepackage{float}

调整表格大小

\begin{table}
\centering
\caption{}
\resizebox{\textwidth}{!}{
\begin{tabular}
...
\end{tabular}
}
\end{table}

章节编号显示

\setcounter{secnumdepth}{4}

参考文献格式

\usepackage[option]{natbib}

具体的 option 有

  • round: (default) 使用圆括号
  • square: 使用方括号
  • curly: 使用花括号
  • angle: 使用尖括号
  • colon: (default) 用引号分隔多个引用
  • comma: 用逗号分隔多个引用
  • authoryear: (default) 使用作者--年引用形式
  • numbers: 使用编号引用形式
  • super: 使用 Nature 那样的上标编号引用
  • sort: 多个引用按照首字母排序
  • sort&compress: 除排序外,多个引用可以合并 (如 3-6, 15)
  • longnamesfirst: 多个作者的文献第一次被引用时列出所有作者,以后的引用可以缩写为 et al.
  • sectionbib: 重定义了 \thebibliography 使用 \section* 而不是 \chapter*。这样使用 chapterbib 宏包时,参考文献名称为 section 一级
  • nonamebreak: 在一行排版所有作者名字,这可能引起 overfull hbox 警告但是消除了跨行的 hyperref 问题
\citet{jon90} Jones et al. (1990)
\citet[chap. 2]{jon90} Jones et al. (1990, chap. 2)
\citep{jon90} (Jones et al., 1990)
\citep[chap. 2]{jon90} (Jones et al., 1990, chap. 2)
\citep[see][]{jon90} (see Jones et al., 1990)
\citep[see][chap. 2]{jon90} (see Jones et al., 1990, chap. 2)
\citet*{jon90} Jones, Baker, and Williams (1990)
\citep*{jon90} (Jones, Baker, and Williams, 1990)
\citealt{jon90} Jones et al. 1990
\citealt*{jon90} Jones, Baker, and Williams 1990
\citealp{jon90} Jones et al., 1990
\citealp*{jon90} Jones, Baker, and Williams, 1990
\citealp{jon90,jam91} Jones et al., 1990; James et al., 1991
\citealp[pg. 32]{jon90} Jones et al., 1990, pg. 32
\citeauthor{jon90} Jones et al.
\citeauthor*{jon90} Jones, Baker, and Williams
\citeyear{jon90} 1990
\citeyearpar{jon90} (1990)
\citetext{priv. comm.} (priv. comm.)

如果采用编号形式引用,上述作者--年会被替换为相应的文献编号。

定制

标点

使用 \bibpunct 可以定制引用所使用的标点符号。这个命令有六个变量

  1. 开头的括号,默认为 (
  2. 结束的括号,默认为 )
  3. 分隔多个引用的标点,默认为 ;
  4. n:编号;s:上标编号;其他字母为作者--年,默认也是作者--年
  5. 作者姓名和年之间的标点,默认无标点
  6. 同一作者多篇文献合并引用时,年代之间或者编号之间的标点,默认为 ,

例子

\bibpunct{(}{)}{;}{a}{}{}

产生

\citep{jon90,jam92} --> (Jones et al. 1990; James et al. 1992)
其他
  • \bibsection 控制参考文献标题所使用的章节层次,一般是 \section* 或者 \chapter*
  • \bibpreamble 控制参考文献标题和列表之间的文字
  • \bibfont 控制文献列表的字体
  • \citenumfont 控制引用编号的字体,可以声明为 \textit 之类
  • \bibnumfmt 控制文献列表编号格式,它带有一个变量,默认为 [#1]
  • \bibhang 控制文献列表中每一条目第一行第一行之后的缩进,使用 \setlength 命令来改变
  • \bibsep 控制文献列表中条目之间的空白,使用\setlength 命令来改变

分章节的文献列表

使用chapterbib 宏包,与 natbib 兼容,用来产生分章节的文献列表。这个宏包本质上使用 \include 命令来为每一章节添加文献列表。每一章节的参考文献都要单独声明 \bibliographystyle 以及 \bibliography 要导入的 bib 文件。

chapterbib 也有一个 sectionbib 的选项,但是会和 natbib 有冲突。要使其生效,只能对 natbib 使用 sectionbib 选项。

强制大写

如果作者名字的前置词为小写,如 della Robbia,当位于句首时,需要其首字母大写,这时候可以用上述命令的大写形式,以\Citet 为例

\citet{dRob98} della Robbia (1998)
\Citet{dRob98} Della Robbia (1998)
\Citep{dRob98} (Della Robbia, 1998)
\Citealt{dRob98} Della Robbia 1998
\Citealp{dRob98} Della Robbia, 1998
\Citeauthor{dRob98} Della Robbia

\citet,\citep,以及 \citep 也有相应的大写版本。

深入文件底层

项目组成

1.参考文献

XX.bib文件与XX.bst文件
第一个以bib结尾的文件为包含参考文献的文件,其格式均为bib的格式,这种格式可以使用谷歌学术中引用里使用BibTex导出即可,或者使用ENDNOTE的参考文献:将 EndNote 文献信息导出成 BibTeX 格式

在正文中,只需要在适当的位置写入以下语句即可,这里需要提一点的是,不同的论文对其参考文献的格式要求不同,一般会给出一个bst后缀的文件,这个文件是规定了参考文献的格式与排版。

\bibliography{acl2019}  %bib文件名
\bibliographystyle{acl_natbib} %参考文献的格式的文件名

2.正文样式

XX.sty文件与XX.cls文件
这个文件表明的是LaTex文件中所使用的各种样式,这就像是在网页中的css文件一样。一般的,我们多半使用sty文件,也有使用cls文件。一般来说,.cls 和 .sty 文件都是增加 LaTeX 功能的补足文件。它们在我们排版文章是时对应的使用 \documentclass{} 和 \usepackage{} 加载。

在主文件中,只需要在开头引入相关的样式文件即可,如下代码所示:

\documentclass[11pt,a4paper]{article} %这是引入一个cls文件
\usepackage[hyperref]{acl2019} %这是引入一个sty文件
\usepackage{times}
\usepackage{latexsym}

3.主文件

XXX.tex文件
第四个文件就是主文件,也就是编写我们内容的文件。我们可以看到,它其实是一个增强版的标记语言文件,既包含了格式化样式,也包含部分逻辑语句,就像是带了脚本的网页一样。

插入参考文献

方法一:不使用BibTeX (使用BibTex编译最后的bbl格式)

先在文章文章末尾写好需要插入的参考文献,逐一写出,例如:

\begin{thebibliography}{99}  
\bibitem{ref1}Zheng L, Wang S, Tian L, et al., Query-adaptive late fusion for image search and person re-identification, Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, 2015: 1741-1750.  
\bibitem{ref2}Arandjelović R, Zisserman A, Three things everyone should know to improve object retrieval, Computer Vision and Pattern Recognition (CVPR), 2012 IEEE Conference on, IEEE, 2012: 2911-2918.  
\bibitem{ref3}Lowe D G. Distinctive image features from scale-invariant keypoints, International journal of computer vision, 2004, 60(2): 91-110.  
\bibitem{ref4}Philbin J, Chum O, Isard M, et al. Lost in quantization: Improving particular object retrieval in large scale image databases, Computer Vision and Pattern Recognition, 2008. CVPR 2008, IEEE Conference on, IEEE, 2008: 1-8.  
\end{thebibliography}

上面列出了4个参考文献,{thebibliography}的选项99指的是参考文献的个数最大为99

在正文中引用参考文献的方法是:

\cite{ref1}
\cite{ref1, ref4}
% 编译后:
% [1]
% [1, 4]

方法二:使用BibTeX

这种方法需要建立参考文献数据库,引用的时候调用所需要的参考文献。

BibTeX 是一种格式和一个程序,用于协调LaTeX的参考文献处理.
BibTeX 使用数据库的的方式来管理参考文献. BibTeX 文件的后缀名为 .bib . 先来看一个例子

在LaTeX中使用BibTeX

为了在LaTeX中使用BibTeX 数据库, 你必须先做下面三件事情:

  1. 设置参考文献的类型 (bibliography style). 标准的为 plain:

  \bibliographystyle{plain}

将上面的命令放在 LaTeX 文档的 \begin{document}后边.

  • plain – 按照第一作者字母顺序排.
  • unsrt – 按照bib文件的顺序
  • alpha – 按作者名称和出版年份排序.
  • abbrv – 缩写格式 .
  1. 标记引用 (Make citations). 当你在文档中想使用引用时, 插入 LaTeX 命令

\cite{引用文章名称}

"引用文章名称" 就是前边定义@article后面的名称.

  1. 告诉LaTeX生成参考文献列表,在 LaTeX 的结束前输入

\bibliography{xxx}

这里xxx就是你的 BibTeX 数据库文件 xxx.bib .

\documentclass[preprint,review,12pt,authoryear]{elsarticle}
\begin{document}
\nocite{*}
\bibliographystyle{plain}
\bibliography{bibfile_name}
\end{document}

3.生成.bbl文件
将前两个步骤生成的reference.bib和main.tex放在同一个文件夹下;
使用WinEdt在main.tex中运行Latex 或PDFLatex ,再点击bibtex 即可生成包含所有bibitem 内容的.bbl 文件,使用记事本打开.bbl文件,即可看到bibitem格式的参考文献。详细过程如下所示:
(1)根据步骤1和2,生成的reference.bib和main.tex
生成的reference.bib和main.tex
(2)在WinEdt中点击PDFLatex运行main.tex文件
这里写图片描述
(3)在工具栏中的Tex中找到BibTex,并点击生成.bbl文件
这里写图片描述
(4)此时,在文件夹下即可看到生成的main.bbl文件。
这里写图片描述

4.在Latex中使用.bbl文件
在Latex对应参考文献位置使用如下语句即可引用生成的.bbl文件,或者将.bbl文件中的内容直接粘贴到Latex中。

\input{publications.bbl}1

另外:
如果在生成的PDF的参考文献的会议或者期刊下面出现横线,可能是因为Latex中的强调命令(\em)在论文模板环境下的不兼容所导致。
在.bbl文件中每个bibitem条目中,可以看到期刊名称前面有一个“\em”,即对期刊名进行了强调,正常情况下能够使得后面的英文字体变成斜体,将中文变成楷体。
而我们这里遇到了非正常的,文字下面出现了下划线的情况。
那么将\em替换成\it,并保存修改后的.bbl文件,并重新执行PDFLatex即可,但是不要再执行BibTex命令了。

一、若是latex模板中参考文献编写的命令是:

\begin{thebibliography}

\bibitem{lab1}LIU M L, ZHANG Y H,ZHOU X H et al. Phys. Rev. C, 2004, {\bf 70}: 14---34

...

\end{thebibliography}

我们可以按照bibitem行的格式在endnote中编写相应的outstyle,然后即可批量从endnote中输出参考文献插入latex文件中。

例如:编写期刊Chinese Physics C的参考文献时,我们可以直接将附件(点击下载:Bibitems Export.ens)的style拷贝到自己的endnote安装文件夹的style文件夹中使用,

第一步,在endnote界面,选中该style;

第二步,给需要导出的参考文献添加label标记(在label字段中添加即可);

第三步,批量选中endnote中需要导出的参考文献,并右键单击copy formatted,如下图所示,复制到latex文件中即可。

运行 BibTeX

分为下面四步

  • 用LaTeX编译你的 .tex 文件 , 这是生成一个 .aux 的文件, 这告诉 BibTeX 将使用那些应用;
  • 用BibTeX 编译 .bib 文件;
  • 再次用LaTeX 编译你的 .tex 文件,这个时候在文档中已经包含了参考文献,但此时引用的编号可能不正确;
  • 最后用 LaTeX 编译你的 .tex 文件,如果一切顺利的话, 这是所有东西都已正常了.

本着 遇事不觉先知乎 的观念,搜了一下,好像没找到满意的答案。于是 bing 了一下关键词: EndNote export BibTeX,没让我失望,第一条就给出了官方网站的解决方案!

img

点击链接进去看到是一个 EndNote 的 style 文件,如红框所示,点击下载即可。当然,大家也可以点击蓝色双线框中的 Download all styles,这是包含目前几乎所有期刊 style 的压缩包。如下图所示:

img

我下载了所有的 styles,解压之后,将所有的 .ens 文件 放在 EndNote 的安装目录下的 Styles 文件夹内。比如我的安装目录是:

C:\Program Files (x86)\EndNote X8\Styles

把所有 .ens 文件粘贴到上述目录后,效果如下图所示:

img

总共有 7089 个文件。

然后我们启动 EndNote,点击工具栏上的 Edit ——> Output Styles ——> Open Style Manager,如下图红框所示:

img

在弹出的对话框中我们会看到如下的选项:BibTeX Export,以及 BibTeX Export using EN Label Field,如下图红框所示:

img

勾选它们,然后关闭刚这个对话框。回到 EndNote 主界面,在 Styles 选框中就能看到这两个选项了,如下图所示:

img

下面简要说明一下这两个选项的区别:

1) BibTeX Export

选中它,EndNote 会自动给每篇文献添加一个 BibTeX key,也就是用 LaTeX 引用文献时的文献代码 \cite{xxx}xxx 的内容,如下图中红框所示:

img

显然,这样做不太合适,我们引用文献时不可能去根据这个随机码来判断要引用的文献。

2) BibTeX Export using EN Label Field

如果用这个选项来导出,那么 EndNote 会依据 Label 标签中的内容添加到相应文献的 BibTeX key 中,如下图所示:

img

在 Label 项目里输入简单的文献标注后,就能在预览内容中看到 BibTeX key 了,如下图红框内容所示:

img

img

总结一下上述准备工作:

1)下载 Styles,并将下载的 Styles 文件(.ens)放置到 EndNote 安装目录下的 Styles 文件夹;

2)勾选 BibTeX Export using EN Label Field

3)填写文献的 Label 信息,以创建 BibTeX key

接下来就可以将 EndNote 文献信息转换成 BibTeX 格式了。

全选 EndNote 中的所有文献信息(当然,你也可以只选择你需要转换格式的某些文献),然后点击 EndNote 工具栏上的 File ——> Export ,如下图所示:

img

在弹出的对话框中,确认 Output style: 对应的是 BibTeX Export using EN Label Field,以及勾选了 Export Selected References,如下图所示:

img

保存文本文件之后,打开就是 BibTeX 格式的文献信息了(最后修改后缀名为 .bib)。如下图所示:

Visio中画的图怎么更清晰美观地插入LaTeX中

简言之,保存为pdf后使用Adobe Acrobat裁剪图片,具体参考LaTex插入PDF

Reference

码农家园

blog

一份其实很短的 LaTeX 入门文档

将 EndNote 文献信息导出成 BibTeX 格式

分类:

技术点:

相关文章:

  • 2021-08-15
  • 2021-06-15
  • 2021-11-14
  • 2021-06-11
  • 2021-11-04
  • 2021-10-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-12-07
  • 2021-11-15
  • 2021-11-29
  • 2021-09-17
  • 2021-08-18
  • 2021-05-07
相关资源
相似解决方案