用latex排版中文书籍
Tag latex, ctex, 排版, on by view 7900

由于最近在翻译《parsing techniques》,所以想着待翻译完毕将其打印成标准书册自己研习,于是学习了如何用latex排版书籍出版物。

之前也曾用过两次latex,第一次是大学期间想着使用latex排版毕业论文,于是想用latex做一个毕业论文模板,奈何,长江大学的论文只能用Word写,还在格式上死扣,时间紧迫也只好作罢,模板残篇在这儿 https://github.com/duguying/report  。第二次使用latex是在自己的简历上,因为毕业了需要找工作,在网上找了一波简历模板,发现Modern CV这套模板很漂亮,于是也就用了,Modern CV是基于latex的模板,简历在这儿欢迎勾搭 https://github.com/duguying/resume 。经历三次使用latex(尤其是最近一次)对latex中文书籍排版也有了一定的了解。

  • latex工具选择

我选用的是texlive套装,里面包含了latex、xelatex等工具,我们编译中文书籍主要用到的是xelatex,因为xelatex原生支持UTF8,不需要任何的额外包。

  • 包选择

中文支持最常用的自然是ctex,我使用的是ctex中的ctexbook类包,他专为长篇书籍排版而生。

  • 编辑器

只要有latex语法高亮支持即可,依个人的爱好选择,我用的是sublime text作为编辑器。

  • 书籍结构

ctexbook中,一般有如下结构:chapter(章), section(节), subsection(子节), subsubsection(三级子节), paragraph(段落), subparagraph(子段落)等,用得最多的是前五种。最基础的文章结构为段落,分段常用空行的方式进行,之前我误以为 \paragraph{内容} 是分段的方式,结果发现段落全部默认粗体字了,后来才明白,\paragraph{} 应当作为“段落标题”或是成为“段落首句加粗”,其起着重作用。上一层结构就是三级子节了,如果书籍中没有那么细的分节,三级子节可以不要,三级子节默认加粗,左对齐,\subsubsection{三级子节} 被\subsubsection命令括起来的部分就是三级子节的标题了,如下图;

subsubsection.png

再上一层的结构就是子节,\subsection{子节} 子节标题默认左对齐,\subsection命令中括起来的就是子节名,带章节号,如下图

subsection.png

再上一层就是节,\section{节} 节标题默认居中对齐,\section命令括起来的就是节名,带章节号,如下图

section.png

再上一层就是章,\chapter{章} 章标题居中对齐,\chapter命令括起来的就是章名,章节号为汉字,如下图

chapter.png

  • 内容结构

内容结构可分为,前序言正文后序言 这三者。\frontmatter 命令表示接下来的内容是前序言部分,\mainmatter 命令表示接下来的内容是正文部分,\backmatter 表示接下来的部分是后序言部分。一般来说,序言部分的页码系统是与正文部分的页码系统区分的,例如前序言部分的内容,页码会以罗马数字标注(i,ii,iii,iv), 而正文部分的页码会以常规的阿拉伯数字标注(1,2,3,4),下面是示例代码展示了如何使用该三个命令定义内容区

\documentclass[hyperref,UTF8]{ctexbook}
% \documentclass{amslatex}
\usepackage{src/pt}

\begin{document}

% \pagestyle{plain}

% 前言开始
\frontmatter

\include{data/preface2}
\include{data/preface1}

% 正文开始
\mainmatter

\tableofcontents

\include{data/chap1}
\include{data/chap2}

% 尾言开始
\backmatter

\end{document}
  • 前言中定义章节

我们有时候会有多个前言,或者书籍请多个名人来作序,于是可能对每个前言/序需要区分为一章节,但是又不希望出现“第x章”这样的字样。其实在序言部分的章节默认是不带章节号的,因此,可以如同正文一般在序言中做章节处理,无须顾忌其他。如下图

preface_chapter.png

不过,如有节(section)应当用如下命令以不产生节号

\section*{关于练习和问题}

如下图

preface_section.png

若没有*号将会产生章名为0的节号。

  • 绘制表格

绘制表格常用的命令对是 \begin{tabular}\end{tabular},详细的使用可以在谷歌上查阅,示例颇多不再赘述,下面只给一段示例代码

\begin{figure}[!htbp]
\centering
\begin{tabular}{llp{5cm}ll}
    & \textbf{S}      &  &    & \textbf{S}      \\
 1b &                 &  & 1b &                 \\
    & \textbf{L\&N}   &  &    & \textbf{L\&N}   \\
 2a &                 &  & 0c &                 \\
    & \textbf{N,L\&N} &  &    & \textbf{L\&h}   \\
 0b &                 &  & 2a &                 \\
    & \textbf{d,L\&N} &  &    & \textbf{N,L\&h} \\
 2b &                 &  & 2b &                 \\
    & \textbf{d,N\&N} &  &    & \textbf{N,N\&h} \\
 0c &                 &  & 0c &                 \\
    & \textbf{d,h\&N} &  &    & \textbf{N,h\&h} \\
 0c &                 &  & 0c &                 \\
    & \textbf{d,h\&h} &  &    & \textbf{d,h\&h} \\
\end{tabular}
\caption{句子形式变为\textbf{d,h\&h}, 与最左边和最右边替换}
\label{fig:method}
\end{figure}
  • 绘制插图

这里只介绍常见的普通线条插图绘制。普通的无规律线条插图我们可以借助Adobe Illustrator绘制矢量图,然后将其另存为eps格式的矢量图。接下来用如下命令转化为pdf图(假设eps文件名fig2_19.eps)

epstopdf fig2_19.eps

如此,同目录下将会生成名为 fig2_19.pdf 的图片。然后在正文中按如下引用

\begin{figure}[!htbp]
\centering
\includegraphics[scale=0.6]{figure/fig2_19.pdf}
\caption{Production tree for a context-free grammar}
\label{fig:method}
\end{figure}

其中\caption为图片介绍,图片会自动编号。

若是规律性比较强的图片可以使用latex代码画图,其中会用到tikz等包,可自行查找研究如何使用。若是插入位图的话,引用graphicx包后可以直接插入,将上述路径中的pdf图改为相应的位图便可以轻松插入。

  • 页面结构

页面结构一般纵向会分为页眉主体页脚三部分,横向会分为左边距主体右边距测注。默认是页面布局会给正面(奇数页)的右侧预留侧注的空间,因此,看起来右边会比左边宽。

许多初接触ctexbook的人会奇怪,这个空白多的一侧应该是装订预留白吧,可是为啥会在右侧呢,其实人家仅仅只是为侧注留的空间而已。侧注是个啥?如下图左侧注

side_note.png

那么如何调整使得看不到为侧注所预留的空间呢,我们可以自定义边距即可

\usepackage[left=2.2cm,right=1.8cm,top=2.0cm,bottom=2.5cm]{geometry}
\geometry{papersize={18.00cm,23.00cm}}

上例调整左边距2.2cm,右边距1.8cm,上边距2.0cm,底边距2.5cm。