课程 六

加载多个宏包

\usepackage命令可以接受一个用逗号分隔的宏包列表,所以你可以一次性加载多个宏包:例如\usepackage{color,graphicx}。如果你要给宏包传递选项,这些选项会应用到列表中的每个宏包。如果宏包是分开加载的,注释掉其中一些会更容易。因此我们会坚持每个宏包单独一行加载。

babel宏包

我们在主课程中展示了babel宏包作为选择不同连字规则的方式。它做的远不止这些,具体取决于使用的语言。例如,在德语中,它提供了一些用于创建”软”连字符的快捷方式,还提供了一种不需要德语键盘就能快速输入变音符号的方法。注意\tableofcontents(目录)命令通常生成的 “Table of Contents” 标题也会被改为德语的 Inhaltsverzeichnis。

% !TEX program=lualatex

\documentclass{ctexart}
\usepackage[ngerman]{babel} % 注意选项名称是'ngerman'

\begin{document}

\tableofcontents

\section{"Uber "Apfel und Birnen}

\subsection{Äpfel}
Äpfel sind rot.

\subsection{Birnen}
Birnen sind gelb.

\end{document}

其他语言设置会做一些设计上的改变:例如,在传统的法语排版中,某些标点符号(如:)前会有空格,如果你使用french选项加载babel,这个空格会被自动添加。

全局选项

有时,你希望一个选项对所有加载的宏包都可用。这可以通过在\documentclass行上给出选项来实现:每个宏包都能”看到”这个选项列表。所以要将文档的语言传递给所有宏包,我们可以使用:

% !TEX program=lualatex

\documentclass{ctexart}
\usepackage{babel}

\begin{document}

\tableofcontents

\section{"Uber "Apfel und Birnen}

\subsection{Äpfel}
Äpfel sind rot.

\subsection{Birnen}
Birnen sind gelb.

\end{document}

更多定义

\newcommand允许命令最多有九个参数,其中第一个可以是可选的。

如果我们以主课程中的示例为例,我们可以让颜色成为可选的,默认为蓝色。

% !TEX program=lualatex

\documentclass{ctexart}
\usepackage{xcolor}

\newcommand\kw[2][blue]{\textcolor{#1}{\itshape #2}}

\begin{document}

关于\kw{苹果}和\kw[red]{橙子}的一些内容。

\end{document}

可选参数用[]括起来,如果省略,则使用定义中指定的默认值。

\NewDocumentCommand

从2020年10月的 LaTeX 发布版本开始,提供了一个扩展的定义系统。在较旧的 LaTeX 发布版本中,这个系统通过xparse宏包提供,为了兼容性,我们在这里使用这个宏包。

我们可以重复上面的示例,但使用\NewDocumentCommand

% !TEX program=lualatex

\documentclass{ctexart}
\usepackage{xparse} % 仅在较旧的LaTeX版本中需要
\usepackage{xcolor}

\NewDocumentCommand\kw{O{blue} m}{\textcolor{#1}{\itshape #2}}

\begin{document}

关于\kw{苹果}和\kw[red]{橙子}的一些内容。

\end{document}

\newcommand的相同点:\NewDocumentCommand接受要定义的命令(\kw)和定义主体,使用#1#9表示参数,但是参数的指定方式不同。

\newcommand的不同点:\newcommand只给出参数的数量,可选地为第一个参数提供默认值,而\NewDocumentCommand中每个参数都用一个字母指定,所以一个两参数的命令会用{mm}而不是[2]来指定。这稍微更冗长一些,但允许定义更多形式的命令。这里我们只给出这个简单的例子,其中第一个参数是可选的,默认为蓝色(O{blue}),第二个参数是强制的(m)。