为了解决自动化报告之类的问题,测试了几种不同的方案之后,我选了 LaTex。利用 LaTex 生成 PDF 文档可定制性强,排版精美,虽然不像 HTML 可以互动,但是 LaTex 做起来更简单明了,另外如果要自动化出纸质版报告 LaTex 就是最好的选择。
这篇文章是看《一份不太简短的 LATEX 2ε 介绍》做的笔记,其实 LaTex 一点都不难学。另外,如果你也喜欢用 Markdown ,那么就更简单了,你也会喜欢上 LaTex 的。
LaTex 的命令有点多,有的命令有点长,一下子肯定记不住这么多,随用随查即可。
LaTex 文档布局
Markdown 其实就是极简版的 LaTex。LaTex中开始一个文档之前需要先指定文档的布局方式,不同的文档布局其排版特点不同。例如:
\documentclass{article}
\begin{document}
Small is beautiful.
\end{document}
上面是一个简单的文档示例。下面是文档类型命令参数示例,指定文档为论文版式,11磅字体,双面格式排版,适合打印在 A4 纸上面。
\documentclass[11pt,twoside,a4paper]{article}
加载 LaTex 宏包
LaTex 的基础功能有时可能达不到我们的排版需求,但是有很多可用的宏包来增强排版功能,加载宏包指令:
\usepackage[options]{packagename}
LaTex 中强制换行和分页
在 LaTex 中强制换行:
\\ #换行
\newline #换行
\* #换行并强制不分页
\newpage #强制分页
LaTex 中的标点符号
引号: LaTex 中的左引号和右引号是分别用不同的字符表示的
- 左单引号为 ` ,就是 Tab 键上面 Esc 键下面那个反引号
- 左双引号为 `` ,就是两个左单引号
- 右单引号为 ' ,就是一个普通的单引号,分号键右边那个键
- 右双引号为 '' ,就是两个普通的单引号
破折号,连字符和减号: LaTex 中横线符号
- ‘-’ 一个短横线,连字符
- ‘--’ 两个短横线,短破折号
- ‘---’ 三个短横线,长破折号
- '$-$' 两个美元符号夹着一个短横线,数学负号
波浪号: LaTex 中有两种波浪号
- ‘~’ 小波浪号
- ‘$\sim$’ 大波浪号
省略号:虽然可以用英文句点,但是跟真正的省略号占字符长度是有差异的
- ‘\ldots’ 省略号
LaTex 中的标题和章节
LaTex 中把文章分为章、节和子节的命令。例如 论文版式 文档分章节指令如下:
\section{...}
\subsection{...}
\subsubsection{...}
\paragraph{...}
\subparagraph{...}
\tableofcontents #在其出现的地方插入目录
\appendix #标志着文档附录材料的开始,之后页码改用字母标记
LaTex 中的字体和强调
LaTex 中一般用斜体字表示强调
\emph{text} #普通环境下是将 text 斜体表示,但是在已经指定字体为斜体的情况下,则是将 text 用正体显示
\textit{text 为斜体}
LaTex 文档环境
LaTex 文档不同环境排版形式不同,只要保持调用顺序,不同的环境可以嵌套。
\begin{environment}
text
\end{environment}
LaTex 中的环境参数:
- itemize,是一种简单列表
- enumerate,是带序号的列表
- description,是带描述的列表
- flushleft,左对齐的段落
- flushright,右对齐的段落
- center,文本居中的段落
- quote,引用段落
- verbatim,逐字打印,不执行任何 LaTex 命令
- \verb#text#,将井号(其他符号也行)包裹的 text 逐字打印,效果同上一条
- tabular,表格,表格环境有比较多的控制参数可以自定义表格的样式
字体、行距以及段落格式
LaTex 会自动根据文档的逻辑结构选择合适的字体,但也可以自己指定字体类型和尺寸。
行距和段落格式也可以自己指定。
\linespread{factor} # 指定行距,factor=1.3 时是 1.5 倍行距...
\setlength{\parindent}{0pt} # 段落开头 0 缩进
LaTex 中可以自定义很多版面格式,但是默认的版式自有默认的道理,详细参考《一份不太简短的 LATEX 2ε 介绍》文中第 5.4 章节。
LaTex 自动化布局之浮动体
当排版到图片和表格时,可能在这个页面放不下,但是又不可能把图片和表格分开放到不同的页面里,浮动体可以解决这个问题,把这个页面放不下的图片和表格浮动到下一页,本页面的余空白用后面的文本来填充。
表格和图片就是可以被浮动的对象,浮动命令:
\begin{figure}[htbp!] # 浮动图片,[ ]中是放置说明符
\begin{table}[htbp!] # 浮动表格,[ ]中是放置说明符
放置说明符制定了浮动体放置的位置:
- h,浮动体就放在当前页面上,适合小浮动体
- t,浮动体放在页面顶部
- b,放在页面底部
- p,放在一个专门的页面,页面仅含一个浮动体
- !,忽略阻止浮动体放置的大部分内部参数,例如一页中允许的浮动体的最大个数
浮动体还可以自定义标题,自动添加图和表的序号或字母编号:
\caption{caption text} # 为图和表添加标题
\listoffigures # 为图添加序号
\listoftables # 为表添加序号
保护脆弱命令
某些命令当出现在其他命令的参数中时可能会失效,这些命令被称为脆弱命令,需要使用 \protect 对其进行保护,强制其作为 LaTex 命令生效。
\footnote 或 \phantom 出现在 \section 命令的参数中时就需要使用 \protect 进行保护,但 \protect 只保护紧邻其右侧的一个命令。
LaTex 数学公式
数学符号和公式的排版是 LaTex 的一大利器,Markdown 中排版数学公式就是用的 LaTex 的功能。
LaTex 中数学公式使用 \(和 \)或者 $ 和 $ 或者 \begin{math} 和 \end{math}
包裹起来。不同符号包裹显示效果不同。
常用数学符号可以在《一份不太简短的 LATEX 2ε 介绍》文中第 3.10 数学符号表章节查询。
插入图片
简单的说 LaTex 支持插入的图片格式为 EPS,而要在文档中看见图片,还需要安装一个 PostScript 打印机驱动输出图片。要在文档中添加图片,需要先生成 EPS 格式的图片,然后利用 graphicx 宏包来插入图片
\usepackage[driver]{graphicx}
\includegraphics[key=values,...]{file}
第一个命令中的 driver 参数是‘从 dvi 到 PostScript’用的程序,最常用的是 dvis,由于 LaTex 中没有插入图形的标准,需要这个参数才能使 graphicx 选择合适的方法将图形插入到 .dvi 文件中。
第二个命令中 file 就是图形文件,key 有多个参数可用:
- width 指定图形的宽度
- heigth 指定图形的高度
- angle 逆时针旋转图形度数
- scale 缩放图形
举例说明:
\usepackage[dvis]{grahpicx}
\begin{figure}
\begin{center}
\includegraphics[angle=90, width=0.5\textwidth]{test}
\end{center}
\end{figure}
这段命令把 test.eps 中的图片逆时针旋转 90 度,然后缩放使得图形宽度为文本页面宽度的 0.5 倍,居中放置于文档中。
参考文献
可以通过 thebibliography 环境来产生参考文献。在文章中引用文献 \cite{marker} ,参考文献条目中列出参考文献详情 \bibitem{marker}, marker 是联系引用和参考文献详情的字符串标识。
对于一些大型的项目,有很多参考文献的,可以用 BibTeX 程序,BibTeX 通常被包含在 TeX 的发行版中,可以建立一个参考文献的数据库,方便在文档中使用。
索引
在排版工具书,参考书中应该会用到。生成关键词索引需要用 LaTex 和辅助软件 makeindex,而且需要编译 LaTex 源文件两次以生成索引。
LaTex 中需要用到宏包 makeidx :
\usepackage{makeidx}
\makeindex # 激活索引命令
\index{key} # 在文档的这个位置添加一个关键词为 key 的索引
\printindex # 列出所有的索引(关键词)
# 编译 LaTex 文档,之后使用 makeindex 程序处理后缀为 .idx 的文件
# 会产生一个 .ind 的索引文件
# 第二次编译 LaTex 文档,索引就会出现在 \printindex 指定的位置
定制页眉和页脚
定制文档的页眉和页脚需要用到宏包 fancyhdr,用到的时候再看宏包说明吧。
Verbatim 宏包
Verbatim 宏包重新实现了 Verbatim 环境,并且提供一个命令可以导入一个 ASCII 文件到文档中。
\verbatiminput{filename}
下载并安装 LaTex 宏包
当然可以手动从 CTAN 上下载宏包源文件,然后手动编译安装,不推荐这种方法,有点麻烦。类似 python 的 pip ,LaTex 也有自己的包管理工具,windows 下面可以用 MiKTeX 套件自带的包管理工具,Linux 下面可以:
tlmgr install 宏包名
这里还有一个王垠写的 Tex 学习资料:
http://www.ctex.org/documents/shredder/tex_frame.html
以及这里有个专门解决 LaTex 的中文支持问题的论坛:
http://www.ctex.org/HomePage
在这个世界上我只确定一件事。那就是人确定的事情越少越好。 -- 毛姆