出现问题应当如何处理

最后更新于:2022-04-01 01:07:15

> 出现问题应当如何处理 / 怎样聪明地提出你的问题——怎样从这里毕业 这篇文章原来的名字叫做慢慢爱上 LaTeX,后来行文的过程中发觉 LaTeX 实在是有太多的内容可以讲述,越发地没有把握让大家仅仅通过这一篇短小的文章就喜欢上 LaTeX,于是改成了现在这个名字。 限于篇幅,还有我的精力,这篇文章事实上还有许多的问题没有讲明白。它仅仅是提供了一些,在你学习使用 LaTeX 可能遇到的问题的解决方案,并不完全,而且没有教会你如何处理编译过程中可能遇到的形形色色的错误。 所以这最终只能是一篇小文,而不可能成为一篇正式的文档。 因此,如果通过我这篇小文,体验到了 LaTeX 带给你的一些乐趣,有了对 LaTeX 的兴趣(如果是这样,我就已经能够无比开心了~),请务必去阅读一些正式的 LaTeX 文档。 ## 去读文档 关于 LaTeX 的文档有很多,其中有些内容过时地很快。所以有必要告诉大家,哪些文档应该看,那些文档不应该看。 索性,这个问题,刘海洋 (milksea) 前辈已经叙述得很清楚了。前段时间,我和几个朋友,将现在看起来还未过时的文档打包上传到了我的博客。参考: [http://liam0205.me/attachment/LaTeX-useful-tools/LaTeX_Docs_2014.rar](http://liam0205.me/attachment/LaTeX-useful-tools/LaTeX_Docs_2014.rar) ## 遇到问题怎么办 1. 绝对的新手,先读完一本入门读物,了解基本的知识; 2. 无论如何,先读文档!绝大部分问题都是文档可以解决的; 3. 利用 Google 搜索你的问题; 4. 在各个论坛或者 LaTeX 交流群里聪明地提出你的问题。 参考:[http://www.wapm.cn/smart-questions/smart-questions-zh.html](http://www.wapm.cn/smart-questions/smart-questions-zh.html)。 CTeX 论坛提问版:[http://bbs.ctex.org/forum.php?mod=forumdisplay&fid=6&page=1](http://bbs.ctex.org/forum.php?mod=forumdisplay&fid=6&page=1) 提供一个交流 QQ 群:141877998
';

TeX 家族

最后更新于:2022-04-01 01:07:13

恭喜你终于看到了这里。如果你认真完成了上面所有的练习,并琢磨了其中的意义,相信你已经可以用 LaTeX 排版出漂亮的文档了。现在我们说一点历史,帮助你更好地理解 TeX 这个系统。 带有 TeX 的词,仅仅是本文就已经提到了 TeX, LaTeX, XeLaTeX. 通常中国学生面对不了解意思的一群形近单词,都会有一种“本能的恐惧”(笑~)。 因此,“大神们”在为新手介绍 TeX 的时候,如果互相争论 “XXTeX 比 YYTeX 好”或者是“XXTeX 的 YYTeX 如何如何”,往往会蹦出下面这些带有 TeX 的词汇: TeX, pdfTeX, XeTeX, LuaTeX, LaTeX, pdfLaTeX, XeLaTeX … 事实上,这部分的内容太过复杂,我自己的了解也实在有限。所以下面这部分的内容也只能是对我了解到的知识的一个概括,甚至可能有些许谬误。所以大家只需要将这部分的内容当做是一个参考就可以了。 ## TeX - LaTeX TeX 是高德纳(Donald Ervin Knuth,1938 年 1 月 10 日 —)教授愤世嫉俗(大雾;追求完美)做出来的排版引擎,同时也是该引擎使用的标记语言(Markup Lang)的名称。这里所谓的引擎,是指能够实现断行、分页等操作的程序(请注意这并不是定义);这里的标记语言,是指一种将控制命令和文本结合起来的格式,它的主体是其中的文本而控制命令则实现一些特殊效果(同样请注意这并不是定义)。 > 你可以在[这里](http://en.wikipedia.org/wiki/TeX)找到关于 TeX 引擎的具体描述; > > 你可以在[这里](http://en.wikipedia.org/wiki/Markup_language)找到关于标记语言的具体描述。 而 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](http://en.wikipedia.org/wiki/PdfTeX). 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](http://en.wikipedia.org/wiki/UTF-8). ## 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 的发行,他们是许许多多东西的集合。
';

版面设置

最后更新于:2022-04-01 01:07:11

## 页边距 设置页边距,推荐使用`geometry`宏包。可以在[这里](http://texdoc.net/texmf-dist/doc/latex/geometry/geometry.pdf)查看它的说明文档。 比如我希望,将纸张的长度设置为 20cm、宽度设置为 15cm、左边距 1cm、右边距 2cm、上边距 3cm、下边距 4cm,可以在导言区加上这样几行: ~~~ \usepackage{geometry} \geometry{papersize={20cm,15cm}} \geometry{left=1cm,right=2cm,top=3cm,bottom=4cm} ~~~ ## 页眉页脚 设置页眉页脚,推荐使用`fancyhdr`宏包。可以在[这里](http://texdoc.net/texmf-dist/doc/latex/fancyhdr/fancyhdr.pdf)查看它的说明文档。 比如我希望,在页眉左边写上我的名字,中间写上今天的日期,右边写上我的电话;页脚的正中写上页码;页眉和正文直接有一道宽为 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} ~~~ ## 首行缩进 中国人写文章,习惯每一段的段首都空出两个中文汉字的长度。美国人没有这个习惯,他们每一小节的段首都顶格。为了解决这个问题,我们可以在导言区调用`\usepackage{indentfirst}`. 就算是这样,首行缩进的长度,仍然不符合中国人的习惯。我们可以在导言区添加这样的控制序列`\setlength{\parindent}{2.45em}`来调整首行缩进的大小。这里的 2.45em 是中文小四号字大小两个中文字的长度。 ## 行间距 我们可以通过`setspace`宏包提供的命令来调整行间距。比如在导言区添加如下内容,可以将行距设置为 1.5 倍: ~~~ \usepackage{setspace} \onehalfspacing ~~~ 具体可以查看该宏包的[文档](http://texdoc.net/texmf-dist/doc/latex/setspace/README)。 ## 段间距 我们可以通过修改计数器`\parskip`的值来调整段间距。例如在导言区添加以下内容 ~~~ \addtolength{\parskip}{.4em} ~~~ 则可以在原有的基础上,增加段间距 0.4em. 如果需要减小段间距,只需将该数值改为负值即可。
';

插入图片和表格

最后更新于:2022-04-01 01:07:09

## 图片 在 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`控制序列还有若干其他的可选参数可供使用,一般并用不到。感兴趣的话,可以去查看[该宏包的文档](http://texdoc.net/texmf-dist/doc/latex/graphics/graphicx.pdf)。 ## 表格 `tabular`环境提供了最简单的表格功能。它用`\hline`命令表示横线,`|`表示竖线;用`&`来分列,用`\\`来换行;每列可以采用居中、居左、居右等横向对齐方式,分别用`l`、`c`、`r` 来表示。 ~~~ \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} ~~~ 效果: [![](http://ww1.sinaimg.cn/large/818901c1jw1e44ku9n696j20cj05haad.jpg)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-07-07_559b472878db1.jpg) ## 浮动体 插图和表格通常需要占据大块空间,所以在文字处理软件中我们经常需要调整他们的位置。`figure`和`table`环境可以自动完成这样的任务;这种自动调整位置的环境称作浮动体 (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`应该放在标题之后。 > 图片和表格的各种特殊效果,限于篇幅此处无法详叙。请查看最后一章推荐的文档。
';

插入数学公式

最后更新于:2022-04-01 01:07:06

首先恭喜你看到这里。如果前面的几个文档你都认真编译过了,那么你已经可以胜任许多文档的排版工作。下面我们进入 LaTeX 最为犀利的部分。 这部分的演示中,为了节省篇幅,将取消导言区中中文支持的部分。在实际使用中,你只需要将导言区中的相关部分加上,就可以同时使用中文,并编写数学公式了——这并不冲突。 为了使用 AMS-LaTeX 提供的数学功能,我们需要在导言区加载`amsmath`宏包: ~~~ \usepackage{amsmath} ~~~ ## 数学模式 LaTeX 的数学模式有两种:行内模式 (inline) 和行间模式 (display)。前者在正文的行文中,插入数学公式;后者独立排列单独成行。 在行文中,使用`$ ... <div class="entry" style="text-align: justify; line-height: 1.6; color: rgb(85, 85, 85); font-family: 'Helvetica Neue', Helvetica, HiraginoSansGB-W3, SourceHanSansSC-Regular, SourceHanSansCN-Regular, 'Microsoft YaHei', 'WenQuanYi Micro Hei', Arial, sans-serif; font-size: 15px; background-color: rgb(222, 222, 222);"可以插入行内公式,使用`\[ ... \]`可以插入行间公式,如果需要对行间公式进行编号,可以使用`equation`环境: … > 行内公式也可以使用`\(...\)`来插入,略嫌麻烦。无编号的行间公式也可以使用`$ ... $`来插入,但是这样做会改变行文的默认行间距,不推荐。 ## 上下标 示例代码(请保存后,使用 XeLaTeX 编译,查看效果): ~~~ \documentclass{article} % % 数学环境支持 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \usepackage{amsmath} \begin{document} Einstein 's $E=mc^2$. \[ E=mc^2\. \] \begin{equation} E=mc^2. \end{equation} \end{document} ~~~ 值得一提的是,行内公式和行间公式对标点的要求是不同的。行内公式的标点,应该放在数学模式的限定符之外,而行间公式则应该放在数学模式限定符之内。 在数学模式中,需要表示上标,可以使用`^`来实现(下标则是`_`)。它默认只作用于之后的一个字符,如果想对连续的几个字符起作用,请将这些字符用花括号`{}`括起来,例如: ~~~ \[ z = r\cdot e^{2\pi i}. \] ~~~ ## 根式与分式 根式用`\sqrt{·}`来表示,分式用`\frac{·}{·}`来表示(第一个参数为分子,第二个为分母)。 示例代码(请保存后,使用 XeLaTeX 编译,查看效果): ~~~ \documentclass{article} % % 数学环境支持 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \usepackage{amsmath} \begin{document} $\sqrt{x}$, $\frac{1}{2}$. \[ \sqrt{x}, \] \[ \frac{1}{2}. \] \end{document} ~~~ 可以发现,在行间公式和行内公式中,分式的输出效果是有差异的。如果要强制行内模式的分式显示为行间模式的大小,可以使用`\dfrac`, 反之可以使用`\tfrac`。 ## 运算符 一些小的运算符,可以在数学模式下直接输入;另一些需要用控制序列生成,如 ~~~ \[ \pm\; \times \; \div\; \cdot\; \cap\; \cup\; \geq\; \leq\; \neq\; \approx \; \equiv \] ~~~ 连加、连乘、极限、积分等大型运算符分别用`\sum`, `\prod`, `\lim`, `\int`生成。他们的上下标在行内公式中被压缩,以适应行高。我们可以用`\limits`和`\nolimits`来强制显式地指定是否压缩这些上下标。例如: ~~~ $ \sum_{i=1}^n i\quad \prod_{i=1}^n $ $ \sum\limits _{i=1}^n i\quad \prod\limits _{i=1}^n $ \[ \lim_{x\to0}x^2 \quad \int_a^b x^2 dx \] \[ \lim\nolimits _{x\to0}x^2\quad \int\nolimits_a^b x^2 dx \] ~~~ 多重积分可以使用`\iint`, `\iiint`, `\iiiint`, `\idotsint` 等命令输入。 ~~~ \[ \iint\quad \iiint\quad \iiiint\quad \idotsint \] ~~~ ## 分隔符 各种括号用`()`, `[]`, `\{\}`, `\langle\rangle` 等命令表示;注意花括号通常用来输入命令和环境的参数,所以在数学公式中它们前面要加`\`。因为 LaTeX 中`|`和`\|`的应用过于随意,amsmath 宏包推荐用`\lvert\rvert`和`\lVert\rVert`取而代之。 为了调整这些分隔符的大小,amsmath 宏包推荐使用`\big`, `\Big`, `\bigg`, `\Bigg`放在上述括号前面调整大小。 ~~~ \[ \Bigg(\bigg(\Big(\big((x)\big)\Big)\bigg)\Bigg) \] \[ \Bigg[\bigg[\Big[\big[[x]\big]\Big]\bigg]\Bigg] \] \[ \Bigg \{\bigg \{\Big \{\big \{\{x\}\big \}\Big \}\bigg \}\Bigg\} \] \[ \Bigg\langle\bigg\langle\Big\langle\big\langle\langle x \rangle\big\rangle\Big\rangle\bigg\rangle\Bigg\rangle \] \[ \Bigg\lvert\bigg\lvert\Big\lvert\big\lvert\lvert x \rvert\big\rvert\Big\rvert\bigg\rvert\Bigg\rvert \] \[ \Bigg\lVert\bigg\lVert\Big\lVert\big\lVert\lVert x \rVert\big\rVert\Big\rVert\bigg\rVert\Bigg\rVert \] ~~~ [![](http://ww2.sinaimg.cn/large/818901c1jw1e44jk66wwfj204x0a4aa0.jpg)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-07-07_559b4727844d9.jpg) ## 省略号 省略号用`\dots`, `\cdots`, `\vdots`, `\ddots` 等命令表示。`\dots` 和`\cdots`的纵向位置不同,前者一般用于有下标的序列。 ~~~ \[ x_1,x_2,\dots ,x_n\quad 1,2,\cdots ,n\quad \vdots\quad \ddots \] ~~~ ## 矩阵 amsmath 的`pmatrix`, `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} \] ~~~ 效果图: [![](http://ww2.sinaimg.cn/large/818901c1jw1e44jpqbz2aj208k024744.jpg)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-07-07_559b4727b4154.jpg) 使用`smallmatrix`环境,可以生成行内公式的小矩阵。 ~~~ Marry has a little matrix $ ( \begin{smallmatrix} a&b\\c&d \end{smallmatrix} ) $. ~~~ 效果图: [![](http://ww3.sinaimg.cn/large/818901c1jw1e44jsd9ldbj20680200si.jpg)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-07-07_559b4727c9241.jpg) ## 多行公式 有的公式特别长,我们需要手动为他们换行;有几个公式是一组,我们需要将他们放在一起;还有些类似分段函数,我们需要给它加上一个左边的花括号。 ### 长公式 #### 不对齐 无须对齐的长公式可以使用`multline`环境。 ~~~ \begin{multline} x = a+b+c+{} \\ d+e+f+g \end{multline} ~~~ 效果: [![](http://ww2.sinaimg.cn/large/818901c1jw1e44jzfychej20dv02sjr6.jpg)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-07-07_559b4727ddce6.jpg) 如果不需要编号,可以使用`multiline*`环境代替。 #### 对齐 需要对齐的公式,可以使用`aligned`_次环境_来实现,它必须包含在数学环境之内。 ~~~ \[\begin{aligned} x ={}& a+b+c+{} \\ &d+e+f+g \end{aligned}\] ~~~ 效果图: [![](http://ww3.sinaimg.cn/large/818901c1jw1e44k2acde4j205g02ft8h.jpg)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-07-07_559b4727f2d5c.jpg) ### 公式组 无需对齐的公式组可以使用`gather`环境,需要对齐的公式组可以使用`aligned`环境。他们都带有编号,如果不需要编号可以使用带星花的版本。 ~~~ \begin{gather} a = b+c+d \\ x = y+z \end{gather} \begin{align} a &= b+c+d \\ x &= y+z \end{align} ~~~ 效果: [![](http://ww4.sinaimg.cn/large/818901c1jw1e44k5od3xaj209u04lweb.jpg)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-07-07_559b47282be3c.jpg) ### 分段函数 分段函数可以用`cases`次环境来实现,它必须包含在数学环境之内。 ~~~ \[ y=\ begin{cases} -x,\quad x\leq 0 \\ x,\quad x>0 \end{cases} \] ~~~ 效果图: [![](http://ww1.sinaimg.cn/large/818901c1jw1e44k7zto1wj205o01pt8i.jpg)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-07-07_559b472859954.jpg)
';

组织你的文章

最后更新于:2022-04-01 01:07:04

由于新的中英混排方法的引入,这里对于每一个效果提供两份代码(如果有必要)。如果没有特别的需求,应当使用新方法。 ## 作者、标题、日期 保存并用 XeLaTeX 编译如下文档,查看效果: 新方法: ~~~ \documentclass[UTF8]{ctexart} \title{你好,world!} \author{Liam} \date{\today} \begin{document} \maketitle 你好,world! \end{document} ~~~ 旧方法: ~~~ \documentclass{article} % % 设置中文字体 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \usepackage[SlantFont,BoldFont,CJKchecksingle,CJKnumber]{xeCJK} \newcommand\fontnamehei{SimHei}% 黑体 \newcommand\fontnamesong{SimSun}% 宋体 \newcommand\fontnamekai{KaiTi_GB2312}% 楷体 \newcommand\fontnameyahei{Yahei Mono}% 雅黑 \defaultfontfeatures{Mapping=tex-text} \setCJKmainfont[BoldFont=\fontnamehei,ItalicFont=\fontnamekai]{\fontnamesong} \setCJKmonofont{\fontnameyahei} \setCJKsansfont[BoldFont=\fontnamehei]{\fontnameyahei} % % 设置标题、作者、日期 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \title{你好,world!} \author{Liam} \date{\today} \begin{document} \maketitle 你好,world! \end{document} ~~~ 导言区复杂了很多,但和之前的文档主要的区别只有两处(新方法只有一处,此处第 2 条)。 1. 深入定义了中文字体以及断行逻辑; * 调用`xeCJK`宏包的时候,添加了一些可选参数; * 使用`\newcommand`命令,将系统字体名映射为相应的命令,方便维护; * 在定义主字体的时候,用`[]`添加了一些可选参数,增强功能。 2. 定义了 标题、作者、日期。 在`document`环境中,除了原本的`你好,world!`,还多了一个控制序列`maketitle`。这个控制序列能将在导言区中定义的 标题、作者、日期 按照预定的格式展现出来。 > 使用`titling`宏包可以修改上述默认格式。参考[TeXdoc](http://texdoc.net/texmf-dist/doc/latex/titling/titling.pdf). ## 章节和段落 保存并用 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} ~~~ 旧方法: ~~~ \documentclass{article} % % 设置中文字体 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \usepackage[SlantFont,BoldFont,CJKchecksingle,CJKnumber]{xeCJK} \newcommand\fontnamehei{SimHei} \newcommand\fontnamesong{SimSun} \newcommand\fontnamekai{KaiTi_GB2312}%KaiTi \newcommand\fontnameyahei{Yahei Mono} \defaultfontfeatures{Mapping=tex-text} \setCJKmainfont[BoldFont=\fontnamehei,ItalicFont=\fontnamekai]{\fontnamesong} \setCJKmonofont{\fontnameyahei} \setCJKsansfont[BoldFont=\fontnamehei]{\fontnameyahei} % % 设置标题、作者、日期 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \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 编译两次,观察效果: 新方法: ~~~ \documentclass[UTF8]{ctexart} \title{你好,world!} \author{Liam} \date{\today} \begin{document} \maketitle \tableofcontents \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} ~~~ 旧方法: ~~~ \documentclass{article} % % 设置中文字体 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \usepackage[SlantFont,BoldFont,CJKchecksingle,CJKnumber]{xeCJK} \newcommand\fontnamehei{SimHei} \newcommand\fontnamesong{SimSun} \newcommand\fontnamekai{KaiTi_GB2312}%KaiTi \newcommand\fontnameyahei{Yahei Mono} \defaultfontfeatures{Mapping=tex-text} \setCJKmainfont[BoldFont=\fontnamehei,ItalicFont=\fontnamekai]{\fontnamesong} \setCJKmonofont{\fontnameyahei} \setCJKsansfont[BoldFont=\fontnamehei]{\fontnameyahei} % % 设置标题、作者、日期 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \title{你好,world!} \author{Liam} \date{\today} \begin{document} \maketitle \tableofcontents \section{你好中国} 中国在East Asia. 中国在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} ~~~ > 试试交换`\maketitle`和`\tableofcontents`的顺序,看看会发生什么。 请注意,在“你好中国”这一节中,两次“中国在 East Asia.”中夹有一个空行,但输出却只有一个换行并没有空行。这是因为 LaTeX 将一个换行当做是一个简单的空格来处理,如果需要换行另起一段,则需要用两个换行(一个空行)来实现。
';

实现中英文混排

最后更新于:2022-04-01 01:07:02

除掉成功生成第一个文档,实现中文输出(或者说是中英文混排)恐怕是困扰中国的 TeX 使用者的第二个普遍问题。众所周知,TeX 系统是高教授开发的,当初并没有考虑到亚洲文字的问题。因此早期的 TeX 系统并不能直接支持中文,必须要用其他工具先处理一下(或者是一些宏包之类的)。 但是现在,XeTeX 原生支持 Unicode,并且可以方便地调用系统字体。可以说解决了困扰中国 TeX 使用者多年的大问题。 此外,除去中文支持,中文的版式处理和标点禁则也是不小的挑战。好在由吴凌云和江疆牵头,现在主要由刘海洋和李清(还有我打个酱油)维护的 `ctex` 宏包 / 文档类一次性解决了这些问题。`ctex` 宏包和文档类的优势在于,它适用于多种编译方式;在内部处理好了中文和中文版式的支持,隐藏了这些细节;并且,提供了不少中文用户需要的功能接口。 为了和原有的日志对接,这里分别用两种方法来介绍中英文混排。当然,老方法只是为了「兼容性」存在的,推荐使用新方法。 ## 新方法——使用 `ctex` 文档类 在 TeXworks 编辑框中输入以下内容,保存,使用 XeLaTeX 编译: ~~~ \documentclass[UTF8]{ctexart} \begin{document} 你好,world! \end{document} ~~~ 如果没有意外,你将会看到类似下图的输出结果。 [![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-07-07_559b4726960a9.jpg)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-07-07_559b472676c29.jpg) 相较于之前的例子,这份代码只有细微的差异: 1. 文档类从 `article` 变为 `ctexart`; 2. 增加了文档类选项 `UTF8`。 新版 `ctex` 宏包和文档类的默认能够自动检测用户的操作系统,并为之配置合适的字库。对于 Windows 用户、Mac OS X 用户和 Linux 用户,都无需做任何配置,就能使用 `ctex` 宏包和文档类来排版中文。[2015-05-20 更新] ## 老方法——直接调用 xeCJK 宏包 在 TeXworks 编辑框中输入以下内容,保存,使用 XeLaTeX 编译: ~~~ \documentclass{article} \usepackage{xeCJK}% 调用 xeCJK 宏包 \setCJKmainfont{SimSun}% 设置 CJK 主字体为 SimSun (宋体) \begin{document} 你好,world! \end{document} ~~~ 如果一切顺利,你将会在屏幕右边的窗口,看见类似下图的输出结果。 [![](http://ww2.sinaimg.cn/large/818901c1jw1e44g5azwaej20j00kimy3.jpg)](http://ww2.sinaimg.cn/large/818901c1jw1e44g5azwaej20j00kimy3.jpg) 如果你的 TeX 系统提示找不到字体,请换用你的操作系统中可用的中文字体。关于如何寻找你的操作系统中可用的中文字体,请参考本章最后一小节。 除了 “document” 环境中同时出现了中文和英文,和最原始的 Hello, world! 不同点在于,导言区中多出了两条控制序列。他们的作用我已经用注释标出了。 所谓的宏包,就是一系列控制序列的合集。这些控制序列太常用,以至于人们会觉得每次将他们写在导言区太过繁琐,于是将他们打包放在同一个文件中,成为所谓的宏包(台湾方面称之为“巨集套件”)。`\usepackage{·}`可以用来调用宏包。 `\setCJKmainfont{·}`是定义在 “xeCJK” 宏包中的控制序列,它可以用来设置 CJK 主字体。 _请注意,TeX 系统对宏包名称和控制序列的大小写是敏感的_ ## 查看当前操作系统中的字体 ### Mac OS X 用户 请参照 [这篇博客](http://liam0205.me/2014/11/02/latex-mactex-chinese-support/) 中的方法,使用系统自带的字体册程序来查看系统字体。 ### 非 Mac OS X 用户 按照如下步骤打开系统命令行(*nix 系统请打开终端): * 按下` + R`; * 键入`cmd`, 回车。 在系统命令行中输入如下命令: ~~~ fc-list :lang=zh-cn > C:\font_zh-cn.txt ~~~ (相信使用 *nix 的你,一定知道如何修改上述命令达到你想要的效果) 打开 C 盘根目录下的 `C:\font_zh-cn.txt` 纯文本文档,里面的内容就是你当前系统可用的全部中文字体,形如: [![](http://ww1.sinaimg.cn/large/818901c1jw1e44gmvz7yuj20i40actcb.jpg)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-07-07_559b4726ea247.jpg) 每一个小黑框之间的内容,就对应着一个可用的字体。这些小黑框实际上是换行符,但是由于 Windows 系统的原因,他们没有被正常显示。如果看着不爽,你可以尝试用 TeXworks 打开这个文件查看(放心,能够打开的)。以下是我用 gVim 打开的效果: [![](http://ww2.sinaimg.cn/large/818901c1jw1e44gpsi9fpj20km0f478v.jpg)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-07-07_559b472739ae4.jpg) 其中的每一行,都代表着一个可用的字体。其形式如下: ~~~ <字体文件路径>: <字体标示名 1>, <字体表示名 2>:Style=<字体类型> ~~~ 我们可以看到图中的倒数第四行 ~~~ C:/WINDOWS/fonts/simsun.ttc: 宋体,SimSun:style=Regular ~~~ 出现了之前文档里调用的字体`SimSun`,此处表明该字体有两个表示名:`宋体`和`SimSun`,我们在`\setCJKmainfont{·}`中填入任意一个都有同样的效果。 因此,如果之前的文档无法编译通过,请在你的操作系统字体中,选取一个自己喜欢的,将它的字体表示名填入到`\setCJKmainfont{·}`中去。
';

关于编辑器的简单介绍

最后更新于:2022-04-01 01:06:59

流行的 _TeX 发行_,比如 CTeX 和 TeX Live, 都自带有一些用于编辑文档的编辑器。这些编辑器差异还是很大的,从简单的 TeXworks 到复杂的 WinEdt, 各种各样。但是不管是什么样的编辑器,他们都是用来编辑纯文本的而已(.tex 就是纯文本),换言之他们只是 Windows 自带的记事本程序的加强版而已,_他们本身并不是 TeX 系统的一部分_。 > 所谓 TeX 发行,指的是包括 TeX 系统的各种可执行程序,以及他们执行时需要的一些辅助程序和宏包文档的集合。 国内的同学安装 CTeX 的比较多,CTeX 自带的编辑器,除了大家熟知的 WinEdt,还有 TeXworks。而 TeX Live 则只是自带了 TeXworks 而已。 本文只介绍 TeXworks 编辑器的使用。原因有二: * WinEdt 过于繁琐,很多功能用不上,反而给新手增加学习成本; * TeXworks 是 TeX Live 自带的编辑器,而 TeX Live 是跨平台的,各个操作系统都可以使用。 ## 启动 TeXworks 启动 TeXworks 很简单,不论你安装的是 CTeX 还是 TeX Live, 你都可以在 Windows 启动对话框中输入 texworks 按回车。具体步骤是: * 按下键盘上的 Windows 徽标键,同时按下 R 键 —— ` + R`; * 键入 `texworks`; * 回车。 如果安装的是 CTeX,也可以进入开始菜单,从 CTeX - MiKTeX - TeXworks 打开。 启动之后,TeXworks 的界面,会默认占据你屏幕的左半边,右半边留空。效果如下图: [![](http://ww4.sinaimg.cn/large/818901c1jw1e44dgufrnpj20iy0kimxz.jpg)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-07-07_559b4726254a6.jpg) 图中空白的部分,就是输入编辑文本的编辑框;在编辑框的右下角,显示有三个按钮,最左边的是换行符模式,中间是_编码模式_,右边标示当前光标所在位置;编辑框的上方是工具栏,工具栏的右半部分使大家熟悉的功能(新建、打开、保存、撤消、恢复、剪切、复制、黏贴、查找、替换),工具栏的左边则是_编译按钮_ (TeXworks 也称其为“排版工具”);工具栏在往上,则是菜单栏,此处按下不表。 > Windows,Unix 等操作系统对待“换行符”是有不同的。索性 TeXworks 为我们做了足够的提示,方面我们的选择(点击一下那个按钮就知道了)。一般而言,保持默认即可。 > > 字符(包括英文字符和中文字符)在计算机中,经过编码以二进制的形式存储在计算机中。如果编辑器编码和计算机内部编码不一致,则会导致所谓“乱码”的现象。TeXworks 默认使用 UTF8 编码,在我们的文档中不需要进行任何更改,而对于一些其他的文档可能需要按照要求更改编码。 ## 排版工具 TeXworks 为我们预设了若干排版工具(pdfTeX, pdfLaTeX, XeTeX, XeLaTeX 等),他们分别代表什么实在太过复杂并且也不是当前需要讲明白的。本文中需要用到的排版工具主要是_XeLaTeX_,关于这些工具的介绍,可以参看后文。当你对 TeX 系统相当熟悉之后,也可以不适用 TeXworks 预设的工具,自己配置排版工具。 TeXworks 默认的排版工具是 pdfLaTeX,如果你希望更改这个默认值,可以在_编辑 - 首选项 - 排版 - 处理工具 - 默认_ 中修改。 ## Hello, world! 在编辑框中,输入如下内容: ~~~ \documentclass{article} % 这里是导言区 \begin{document} Hello, world! \end{document} ~~~ 将文档保存在你希望的位置,然后在排版工具的下拉选框中选中 XeLaTeX 后,按下绿色的编译按钮。一会儿,如果没有意外,屏幕的右边就会出现编译之后结果。如下图: [![](http://ww4.sinaimg.cn/large/818901c1jw1e44e55rnkkj211y0kmwgi.jpg)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-07-07_559b47264405a.jpg) 很容易发现,输入进编辑框的五行文字,在最终输出的 pdf 档中只显示了 1 行。事实上,交付 TeX 处理的文档内容,并不会全部输出。 此处的第一行`\documentclass{article}`中包含了一个控制序列(或称命令 / 标记)。所谓控制序列,是以反斜杠`\`开头,以第一个_空格或非字母_ 的字符结束的一串文字,他们并不被输出,但是他们会影响输出文档的效果。这里的控制序列是`documentclass`,它后面紧跟着的`{article}`代表这个控制序列有一个必要的参数,该参数的值为`article`. 这个控制序列的作用,是调用名为 “article” 的文档类。 > 部分控制序列还有被方括号`[]`包括的可选参数。 > > 所谓文档类,即是 TeX 系统预设的(或是用户自定的)一些格式的集合。不同的文档类在输出效果上会有差别。 此处的第二行以`%`开头。在 TeX 风格的文档中,从 “%” 开始,到该行末尾的所有字符,都会被 TeX 系统无视,只作为供人类阅读的注释。除非在 “%” 前加上反斜杠来取消这一特性,例如 ~~~ 今年的净利润为 20\%, 比去年高。 ~~~ 此处 “%” 被当做正常的百分号处理,其后的文字也将被正常输出。 其后出现了控制序列`begin`,这个控制序列总是与`end`成对出现。这两个控制序列以及他们中间的内容被称为“环境”;他们之后的第一个必要参数总是一致的,被称为环境名。 只有在 “document” 环境中的内容,才会被正常输出到文档中去或是作为控制序列对文档产生影响。因此,在`\end{document}`之后插入任何内容都是无效的。 `\begin{document}`与`\documentclass{article}`之间的部分被称为导言区。导言区中的控制序列,通常会影响到整个输出文档。
';

关于

最后更新于:2022-04-01 01:06:57

> 文章来源 [http://liam0205.me/2014/09/08/latex-introduction/](http://liam0205.me/2014/09/08/latex-introduction/) ## 优雅的 LaTeX 有很多 Geeks 或者 LaTeX’s Fanatical Fans 过分地强调了 LaTeX 的一些并非重点的特性,以至于很多初学者会觉得 LaTeX 很神秘很复杂,从而引发了初学者的畏难情绪甚至是负面情绪。尽管这些 Fans 说得并没有错,我是说在事实上,但是他们的表达方式和内心态度却间接阻碍了 LaTeX 的发展,我想这也是和他们的初衷相悖的。 我曾经也受到过这些言论的影响,但幸运的事,至今为止我已经越过了这些障碍,并更加坚信了他们所言(LaTeX 的优点)的正确性。因此我想以我自己的方式,向更多的人介绍 LaTeX —— 这个优雅,但有着自己高傲,却绝不复杂甚至神秘的东西。 > 欢迎从校内转移过来的同学们,因为校内的技术原因,文章无法在校内继续更新。尽管非我之故,但还是给各位同学说声抱歉。同时,欢迎各位来到我的博客。`: )` ps, 来自 楠哥 的吐槽:“这篇小文的例子因为要兼容中文,变得太复杂了,可以先看[这篇文章](http://blog.renren.com/blog/bp/Q7LjRQLBcl),再回来看这篇小文”。 ## 你将从这里看到 1. (几乎是)最简洁的 (La)TeX 编辑器——TeXworks——的基本使用方法; 2. 如何使用 (Xe)LaTeX 进行简单的中英混排; 3. 简单的文章组织结构; 4. 如何用 (Xe)LaTeX 进行数学公式的排版; 5. 如何在 (Xe)LaTeX 的文档中插入图片 / 表格; 6. 如何进行简单的版面设置; 7. 几个最常见的带有 TeX 的单词的含义; 8. 出现问题应当如何处理 / 怎样聪明地提出你的问题——怎样从这里毕业。 ## 你不会从这里看到 1. 如何安装 TeX 发行; 2. 特殊需求(特殊宏包)的解决方法; 3. 关于若干 TeX 发行的好坏比较; 4. 关于各种 TeX 编辑器的好坏比较; 5. 过多的废话。 ## 你应当如何阅读本文 事实上本文在行文过程中,会有相当多的提示帮助你以正确的方式阅读。因此有必要在此先介绍一下最常用的一些标记。 1. 斜体:使用_斜体_ 意味着如果忽略掉这些文字,你可能在_逻辑_ 上很难理解后面某处的知识; 2. 粗体:使用粗体意味如果忽略掉这些文字,你可能在TeX 的概念上很难理解后面某处的知识; 3. 粗斜体:使用_粗斜体_ 基本是最重要的部分,是上述两种情况的合并; 4. 引用:使用引用, > 表明这些文字在你第一次阅读本文的时候_不需要_ 了解,其中的内容可能过于深奥,或者过于琐碎。对于第一次接触 TeX 的你(如果你是 TeX 资深使用者当然不在此列),如果了解到这些内容可能会使你困惑,并且不会从实际上增加你对 TeX 的领悟以及对 TeX 的好感。
';