LaTeX 文件内容
\(\)

$\LaTeX$文件结构 #

在此前的代码结构一节中,我们初步介绍了$\LaTeX$文件的结构。以下是文件内容的示意图。

flowchart LR A(文件) --> B(导言) A --> C(正文) A --> D(忽略) B --> E(文档类型) B --> F(宏包, 全局设定, 注释) C --> G(开始) C --> H(文字, 命令, 环境, 注释) C --> I(结束)

正文部分的内容由文字,命令,环境,注释组成。一般来说,文字会被按照原样处理为文档的内容,其余部分会按照$\LaTeX$的语法规则进行处理。我们将分别介绍这些部分的内容。

文字 #

空格 #

  1. \n([ \t]*\n)+ -> 段落终止: 两个文段间的空行定义段落的终止,多个空行被视为一个空行。
  2. (?<=\n)[ \t]+ -> 忽略, (?<!\n)([ \t]+|[ \t]*\n) -> 空格: 空白符,如空格键、tab键输入的字符皆视为空格,连续的多个空格视为一个空格。行头空格忽略不计,而单个换行符亦视为空格。

以下是一个例子:

源代码 #

It does not matter whether you
enter one or several     spaces
after a word.

An empty line starts a new
paragraph.

编译结果 #

It does not matter whether you enter one or several spaces after a word.

An empty line starts a new paragraph.

单词间距与断行 #

在进行西文排版时,为了使文字达到右边界,$\LaTeX$会适度调整单词间距。为提高可读性,其也会在句尾稍加间距。$\LaTeX$会自动选择断行位置。若在空格处断行,会舍去空格生成的间距;若在词中断行,会生成连接符。

$\LaTeX$的默认句终止符为句号.,问号?与感叹号!。若句号紧随大写字母,则其不会处理为语句终止,这是因为句号常出现于单词缩写中,如Q.E.D.

你可以以特殊命令改变当前空格和句号的规则。 如~会生成不调整间距,亦不断行的空格。 而命令\@则会指定其紧随的句号为语句终止,即使其前为大写字母。

例子见下

源代码 #

Mr.~Smith was happy to see her\\
cf.~Fig.~5\\
I like BASIC\@. What about you?

编译结果 #

Mr. Smith was happy to see her

cf. Fig. 5

I like BASIC. What about you?

以下命令禁止句尾的额外间距:

\frenchspacing

这在非英文语言中是常见的,若你使用该命令,命令\@非必要。

特殊字符 #

保留字符 #

多数字符在$\LaTeX$中为其本义,但以下字符有特殊用途:

# $ % ^ & _ { } ~ \

其中$^_用于数学公式排版,&用于表格排版,~用途见上,%用于注释。 若想在文档中使用其本义,须在其前面加上\,如\$\为例外,需要使用命令\textbackslash(在数学环境为\backslash)。细表见下:

# $ % ^ & _ { } ~ \
\# \$ \% \^{} \& \_ \{ \} \~{} \textbackslash (\backslash)

引号 #

在$\LaTeX$不能直接使用引号,单引号分别用`'输入;双引号则用``''输入。在使用ctex宏包或文档类时,中文引号可以直接输入。

源代码 #

``Please press the `x' key.''

##international-language-support/#使用本地字体 编译结果

“Please press the ‘x’ key.”

连字与破折号 (-) #

$\LaTeX$按连续-的个数提供3种“横线”: 单个-用来组成复合词, 连续两个-用来连接数字表示范围, 连续三个-用来连接单词,语义上类似破折号。

源代码 #

daughter-in-law, X-rated\\
pages 13--67\\
yes---or no? \\
$0$, $1$ and $-1$

编译结果 #

daughter-in-law, X-rated

pages 13–67

yes—or no?

$0$, $1$ and $-1$

斜杠 (/) #

在两个单词间加入斜杠/会使编译器将其视为一个单词,如read/write。 但在排版时也会禁止在行尾生成连字符,因此可能出现错误‘overfull’。 解决方案是改用\slash。尽管如此,普通的/仍然会在表示比例时使用,如5 MB/s.

度数符号 ($^\circ$) #

在纯净\LaTeX中,使用$^\circ$表示度数。

It's $-30\,^{\circ}\mathrm{C}$. I will soon start to super-conduct.

It’s ${-30,}^{\circ}$C. I will soon start to super-conduct.

而宏包textcomp提供了\textdegree\textcelsius等用于方便地表示度数。

源代码 #

30 \textcelsius{} is 86 \textdegree{F}.

编译结果 #

30 $\text{\textdegree}$C is 86 $\text{\textdegree}$F.

命令 #

$\LaTeX$ 命令以反斜杠\开头,大小写敏感,有以下两种形式:

  • \\[a-zA-Z]+\*?([...]|{...})*: 在反斜杠后紧随若干字母,然后终止于非字母。 部分命令可以带星号,与不带星号的命令有差异。 部分命令提供以[]{}包围的若干参数。 一般来说,[]为可选参数,{}为必须参数,不可以随意调换参数的顺序。 此外,一般来说可选参数会在必须参数的前面。
  • \\[^a-zA-Z]:由反斜杠及紧随的一个非字母组成。

注意事项

  1. 命令后的空格会被忽略。若想在命令后间隔,可以使用空参数{}加上空白符,或是用使用~,或\ (反斜杠加空格)。

  2. 如果未使用{}包围必须参数,可能出现不可预料的结果。大体来说有两种情况:

    1. 以下一条命令/非空白字符作为参数。对于数学环境中的分式\frac{}{},如不使用{}包围,例如\frac \alpha \beta,编译器会将其认为\frac{\alpha}{\beta}

    2. 对其后的所有内容产生作用。如\bfseries{},其会加粗命令后的所有内容,截至\bfseries所在环境结束。如\text{\bfseries bold} normal会加粗bold。

    请不要省去必须参数,除非你知道如此做的后果。

源代码 #

New \TeX users may miss whitespaces after a command. % renders wrong 
Experienced \TeX\ users are \TeX perts, and know how to use whitespaces. % renders correct

编译结果 #

New $\TeX$users may miss whitespaces after a command. Experienced $\TeX$ users are $\TeX$perts, and know how to use whitespaces.

第2类命令分为以下几种类型:

  1. \#, \$, \%, \^{}, \&, \_, \{, \}, \~{}:转义为反斜杠后的特殊字符;

  2. \!, \,, \:, \;, \ :转义为空格;具体宽度如下:

    \! \, \: \; \ \quad
    -3 3 4 5 6 18(与M的宽度相同)
  3. \(, \), \[, \]:分别为行内公式的开始与结束,以及行间公式的开始与结束;

  4. \|:数学公式中为$\|$;

  5. \`, \', \^, \~, \=, \., \":重音符,效果如下:

    \`o \'o \^o \~o \=o \.o \"o
    $\`o$ $\'o$ $\^o$ $\~o$ $\=o$ $\.o$ $\"o$
  6. \\:结束当前行

  7. \@:见单词间距与断行

  8. \-:指定断词位置;

手动断行与断页 #

我们可以使用\\, \newline来手动断行(在tabular等环境中为\\\cr)。其中\\有可选参数[length],代表额外的垂直间距。

断页的命令有两个:\newpage, \clearpage。区别在于:在双栏排版中\newpage另起一栏,而\clearpage另起一页。

环境 #

\begin{([a-zA-Z]+\*?)}([...]|{...})* ... \end{\1} -> 环境:环境是一种特殊的命令,以\begin{envname}开头,以\end{envname}结尾,其中envname为环境名称,由字母组成,前后须相同。部分环境名支持在字母后面带星号,与不带星号的环境有差异。

环境用于令一些效果在局部生效,或是生成特殊的文档元素,常见环境会之后详细介绍。

注释 #

%.*\n[ \t]* -> 注释: 注释以%开头,截至行尾。所有字符皆被忽略,也包括下一行开头的空格。

源代码 #

This is an % stupid
% Better: instructive <----
example: Supercal%
				ifragilist%
icexpialidocious

编译结果 #

This is an example: Supercalifragilisticexpialidocious.

%可用于分隔不可以换行的环境。

多行注释 #

除了连续多行开头使用%,还有两种方案来更优雅地实现多行注释。

  1. \iffalse\fi:编译器会忽略\iffalse\fi之间的所有内容。该命令允许嵌套使用。 如

    源代码 #

    前面
    \iffalse
    	看不到
    	\iffalse
    		看不到
    	\fi
    	也看不到
    \fi
    后面
    

    编译结果 #

    前面后面

  2. \begin{comment}\end{comment}:编译器会忽略\begin{comment}\end{comment}之间的所有内容。但是,该命令不允许嵌套,其会寻找\begin{comment}后的第一个\end{comment}作为命令的终止。

    注意事项:该命令需要使用宏包commentverbatim

    源代码 #

    前面
    \begin{comment}
    	看不到
    	\begin{comment}
    		看不到
    	\end{comment}
    	也看不到
    % \end{comment} 若不注释,编译器会在该行报错
    后面
    

    编译结果 #

    前面 也看不到后面1


    1. 此处“也看不到”与“后面”间没有空格,是由于ctex的空格处理机制,若使用英文,可以看到单词间有空格,来源于注释前的换行符。 ↩︎

逐字输出(verbatim) #

环境verbatim用于逐字输出,将环境中的所有字符输出为原始字符,不会根据$\LaTeX$的规则进行转义;而verbatim*会将空格显示为“⎵”。

\verb\*?([^a-zA-Z\* \s])(.*?)\1:需要简短地使用逐字输出,可使用\verb命令,其将紧邻的字符视为起始符与终止符,其间的字符将被输出为原始字符。带星号的会将空格显示为“⎵”。

起始符与终止符为字母、空格、星号以外的字符,一般使用|符号。

源代码 #

The \verb|\ldots| command \ldots
\begin{verbatim}
10 PRINT "HELLO WORLD ";
20 GOTO 10
\end{verbatim}

编译结果 #

The \ldots command $\ldots$

10 PRINT "HELLO WORLD ";

20 GOTO 10

源代码 #

\begin{verbatim*}
the starred version of
the      verbatim
environment emphasizes
the spaces   in the text
\end{verbatim*}
\verb*|like   this :-) |

编译结果 #

the⎵starred⎵version⎵of

the⎵⎵⎵⎵⎵⎵verbatim

environment⎵emphasizes

the⎵spaces⎵⎵⎵in⎵the⎵text

like⎵⎵⎵this⎵:-)⎵