2.2 源文件结构
重新来看一下我们最开始写的文档
\documentclass{article}
\begin{document}
This is my \emph{first} document prepared in \LaTeX.
\end{document}
在这个文档中可以体现出源文件的结构, 所有的LaTeX文档都是以\documentclass{文类}
作为开始, 从\documentclass{}
到\begin{document}
之前的所有命令语句统称为导言, 在\begin{document}
到\end{document}
之间的命令语句和文本统称为正文. 命令\end{document}
之后的所有字符LaTeX均将其忽略.
2.2.1 文类
标准文类
导言的第一句话, 通常也是LaTeX元文件的第一条命令, 就是文类命令:
\documentclass[参数1, 参数2,……]{文类}[日期]
每个LaTeX源文件都必须从这条命令开始, 它通知LaTeX将该论文源文件按照指定文类规定的文档格式进行排版, 这个文类命令必须用在导言的首句, 其中的必要参数用于指定所用文类的名称, 最后一个可选参数日期
是选择宏包对应日期的版本, 一般情况下省略. 在英文文档中, 常用的文类有4种
文类名 | 用途 | 特点 |
---|---|---|
article |
短文, 评论, 学术论文 | 无左右页区分处理, 无chapter结构 |
book |
专业著作, 学位论文 | 默认有左右页区分处理, 章起右页 |
report |
科技,实验报告 | 默认无左右页区分处理, 章起新页 |
beamer |
论文陈述幻灯片 | 提供多种主题样式, 可方便地更换幻灯片整体风格 |
在表格中前三种由于广泛应用于论文写作, 因此被称为标准文类.
可以试一下, 在第一个示例的文类下是无法正常编译中文的, 如果要编译中文, 有两种方式可以选择,
- 选择是更换对应文类为
ctexart
,ctexbook
,ctexrep
, 但是这种方式会根据中文论文的排版习惯改变文档内的显示形式, 在正文结构里会提到, 而且在使用这四种文类的时候, 如果使用的是XeLaTeX或者是LuaLaTeX编译方式, 可以直接使用\documentclass{ctex……}
, 这两种编译方式可以自动将文档中的中文识别为UTF8的编码进行编译, 如果使用的是(Pdf)LaTeX, 因为由于历史原因, 这两种编译方式默认编码是GBK, 而CTeX宏集是以默认的编码格式是UTF8, 所以要使用可选参数[UTF8]来将(PDF)LaTeX的编码格式设置为UTF8, 则需要使用\documentclass[UTF8]{ctex……}
来设置文类. 因为LaTeX并不会自动识别用户文档所用的编码格式, 所以建议使用者总是加上可选参数[UTF8], 即总是使用\documentclass[UTF8]{ctex……}
; - 另一种是添加中文支持宏包
\usepackage[UTF8]{ctex}
, 因为这种方式没有改变文类, 只是增添了适应文字类型, 所以文档内的显示形式不会改变, 而对于可选参数[UTF8]我们同样遵循第一点里说的, 建议总是使用[UTF8]
关于LaTeX中中文的输出更多内容, 可以在C:\CTEX\MiKTeX\doc\latex\ctex\ctex.pdf
(使用MiKTeX)或C:\texlive\2018\texmf-dist\doc\latex\ctex\ctex.pdf
(使用TeX Live)查看ctex.pdf文件
标准文类的选项
选项 | 是否默认 | 说明 |
---|---|---|
10pt | 是 | 常规字体尺寸10pt |
11pt | 否 | 常规字体尺寸10.95pt |
12pt | 否 | 常规字体尺寸12pt |
a4paper | 是(取决于安装TeX系统时设置) | 纸张幅面,宽210mm×高297mm |
letterpaper | 是(取决于安装TeX系统时设置) | 纸张幅面, 宽216mm×高279mm |
a5paper | 否 | 纸张幅面, 宽148mm×高210mm |
b5paper | 否 | 纸张幅面, 宽176mm×高250mm |
以上是在设置文类时的可选参数, 上表中提及的选项均可以在所有标准文类中使用.即我们可以使用文类\documentclass[b5paper,11pt]{article}
来设置一个用b5纸, 文档正文字体大小为11pt的论文文类.
2.2.2 宏包
每个功能强大的命令或环境都是由多个TeX基本命令和LaTeX命令组合而成的, 这种组合命令称为宏, 存储这些宏的命令文件称为宏包, 其扩展名为.sty
.
宏包的作用是扩展或新增某些排版功能, 相当与C++中的#include<>
, 在导言区使用命令
\usepackage[参数1,参数2,……]{宏包名称}[日期]
来调用宏包, 调用宏包命令只能在导言区使用, 宏包名称不区分大小写, 通常均为小写, 最后一项可选参数日期
与文类命令中的日期作用相同, 通常情况下省略. 虽然LaTeX中的宏包数量上千个, 但是撰写论文常用的只有20多个, 下表列出了他们的名称和用途, 具体如何使用可以在帮助->宏包帮助中输入宏包名称来查看其对应的帮助文档.
宏包名 | 用途 | 宏包名 | 用途 |
---|---|---|---|
amsmath |
多种公式环境和数学命令 | graphicx |
插图处理 |
amssymb |
数学符号生成命令 | hyperref |
创建超文本链接和PDF书签 |
array |
数组和表格制作 | ifthen |
条件判断 |
caption |
插图和表格标题格式设置 | ctex |
中文字体 |
ctexcap |
中文字体和标题 | fancyhdr |
页眉页脚设置 |
titlesec |
章节标题格式设置 | titletoc |
目录格式设置 |
fontspec |
字体选择 | geometry |
版面尺寸设置 |
fancyvrb |
抄录环境设置 |
2.2.3 正文结构
层次
对于一篇论文或一本书, 它的结构层次是很重要的, LaTeX为不同的文类提供了不同的章节划分标准.
\documentclass{book}
\begin{document}
\chapter{chapter 1}
\section{section 1}
\subsection{subsection 1}
\subsubsection{subsubsection 1}
\paragraph{paragraph 1}
\subparagraph{subparagraph 1}
This is the full structure of a book.
\section{section 2}
\end{document}
这是
book
文类的结构层次, 其章节的编号不需要我们自己去添加, LaTeX会自动按顺序将编号生成好, 如果没有前一层则会把前一层的编号自动判断为0, report
文类也是如此.而对于article
文类, 它没有chapter
结构, 其余的完全相同, 而对ctexbook
, ctexrep
和ctexart
文类, chapter和section结构会居中, 如图段落与行
试着在正文中编译以下文字
This is the first line
This is also the first line
!
.
又发现问题了, 这里和Word里有着明显区别, 编译出来的文件并没有按着想象中的换行, 而是排到了一行, 并且会发现在第一个line后面有一个空格, 即可以理解为一个换行相当于一个空格, 英语中单词和单词之间会有空格, 所以在这个地方用换行当成空格也无可厚非; 但在中文中, 我们汉字和汉字之间并不需要空格, 那换行产生的空格怎么消除呢?别担心, 在为中文准备的ctex系列文类和ctex.sty
宏包中, 将这个问题已经处理过了, 看下面的例子
\documentclass[UTF8]{ctexart}
\begin{document}
这个
好
very
好
!
.
good
\end{document}
可以看出来,
ctex……
文类在处理换行的时候, 执行以下判定:如果是汉字+汉字
, 汉字+标点
则取消空格, 如果是英文+英文
, 英文+汉字
, 英文+标点
, 标点+标点
则依旧保留空格. 将使用文类改成使用\usepackage[UTF8]{ctex}
是一样的效果. 但是如果想取消换行产生的英文空格怎么办呢, 很简单, 在前一行的结尾加一个注释符%
, 就像这样
Hello%
world
因为注释符%
的作用是忽略该注释符和其后的所有文字, 即换行产生的空格也被忽略了, 同时可以知道换行产生的空格是在前一行
但是问题又出现了, 我们发现在上述条件下, 换行产生的空格是没有了, 同一行中汉字和汉字之间的空格也没有了, 要解决这个问题的话, 调用的宏包或文类中有一个可选参数space
中含有三个选项可以让用户选择:
可选参数 | 作用 |
---|---|
true |
总不省略汉字换行后的空格, 此时用户需要% 来取消掉不需要的空格 |
false |
总省略汉字后的换行空格(使用(PDF)LaTeX编译时); 等同于auto (使用XeLaTeX编译时), 不建议使用此选项 |
auto |
默认值, 如果汉字后是汉字, 则省略空格, 否则保留 |
即如果想让汉字后面的空格一直保留的话, 使用\usepackage[space=true]{ctex}
或\documentclass[space=true]{ctexart}
或者在正文部分使用命令\ctexset{space=true}
来使命令后的正文使用对应格式,
注:在正文中使用\ctexset{space=true}
时, 这条命令后紧接的汉字与这条命令前的汉字间的空格依旧由这条命令之前的格式来控制, 可以用以下代码实验:
\documentclass{article}
\usepackage{ctex}
\begin{document}
自动
控制
\ctexset{space=true}
强制
空格
\end{document}
LaTeX对空格的控制说完了, 可是要是想换行怎么办呢?LaTeX给我们提供了一些方法, 先看下面的例子:
\documentclass{article}
\begin{document}
This is the first line.\\
This is the second line without indent.
\end{document}
上面的代码输出了:
可以看出来,
\\
这个符号会输出一个不带缩进的换行, 如果使用\newline
也可以实现这个效果. 如果想输出带缩进的换行, 即新起一段, 可以怎么做呢?当然可以在新的一行前面加上缩进命令\indent
, 或者也可以通过一些新的方式, 看下面的例子
\documentclass{article}
\begin{document}
This is the first line.
This is the second line with indent.
\end{document}
上面代码会输出:同样可以使用段落命令, 例
\documentclass{article}
\begin{document}
This is the first line.\par
This is the second line with indent.
\end{document}
上述代码输出效果和两个换行符产生的效果相同.
注:还可以使用\\
来生成自定义行距的一行, 命令为\\[<长度>]
, 例\\[4mm]
综上所述, 在LaTeX中的一个换行相当于一个空格, 两个反斜杠\\
表示新起一行, 与\newline
作用相同, 两个换行则新起一段, 与\par
产生的效果相同.