Latex 中的命令到底是什么?

Latex 中的命令到底是什么?

在其他编程语言中,我遇到过命令是动词;它是计算机要做的事情。命令所作用的对象称为变量,变量有多种类型。我们可以有一个字符串变量、一个数字变量或一个日期变量等等,代码通常会指示命令对变量执行某些操作:例如 @ Row(24) Col(65) Print(date)。

在 Latex 中,任何以反斜杠开头的都称为命令,因此\author{text}尽管它什么都不做,但仍被称为命令。它实际上只是一个变量的声明。不仅如此,它还是一个我无法直接使用的变量。如果我输入\authorLatex,它会告诉我我犯了一个错误,如果我输入\author{}Latex,它会假设作者没有名字。因此,从真正的计算机编程术语来看,“命令”\author{text}既不是命令也不是变量。

“命令”\title{text}是相同的。如果我真的想在文档中显示标题,我可以直接手写,也可以定义一个新命令,\newcommand{\mytitle}{title text}然后在文档正文中键入\mytitle。因此,据我所知,该命令\title{text}对我的文档没有任何作用。它不是“做一些有用的事情”意义上的命令,也不是“存储一些数据”意义上的变量。那么 Latex 中“命令”的正确定义到底是什么?

答案1

乳胶命令某事。例如,在 的情况下\author,该命令执行以下操作:

\gdef\@author{#1}

那是\author 全球定义一个宏\@author来存储姓名以供作者以后使用。

\@author然后,当您放置时会调用\maketitle(取决于特定类如何定义\maketitle)。因此,\author是一个接受 1 个参数并将该参数存储在另一个内部命令中的命令,\@author该命令稍后可调用。

命令\author\title通常设置在前言到您的文档:

\documentclass{article}
\author{Martin}
\title{My document title}
\begin{document}
\maketitle

 Content of my document.

\end{document}

在此处输入图片描述

获取 的内容有点困难\@author。例如,在article类中,一旦调用\maketitle,宏的内容\@author就会被清除。您可以通过以下方式解决这个问题:

\documentclass{article}
\author{Martin}
\title{My document title}
\makeatletter
\let\my@author\@author
\newcommand\getauthor{\my@author}
\makeatother
\begin{document}
\maketitle

 Content of my document.

 The author's name is \getauthor.

\end{document}

在此处输入图片描述

我在这里所做的是将 的内容保存\@author在我自己的宏中\my@author。然后我定义一个命令来检索我的宏的内容。

如果你想访问你的文档那么你应该做一些与我访问作者时类似的事情:

\makeatletter
\let\my@title\@title
\newcommand\getmytitle{\my@title}
\makeatother

这里重要的是,letting在调用\author和之后完成\title。否则,您很可能会收到错误消息。也就是说,如果您尝试使用它们并且它们尚未通过从和调用进行定义,则和被定义为发出\@author错误。\@title\author{...}\title{...}

关于命令的更深层次的问题

LaTeX 中的一些命令会立即产生效果,比如\textbf{...}将参数的内容设置为大胆的字体,\section{...}这将开始一个新部分,其标题将是传递的参数的标题。有些命令需要多次运行 LaTeX 才能事物安定下来:例如 \tableofcontents。一些命令协同工作: \label{...}\ref{...}。一些命令似乎直到其他东西发生:例如\author{...}和 的情况\title{...},其效果直到您调用 才会显现出来\maketitle

根据您的背景,思考 LaTeX 宏/命令可能会有点棘手。有各种复杂因素:如果您不了解 LaTeX 做出各种格式决策的方式的异步性质,可能会导致很多麻烦。一些命令扩张当你调用它们时(在 LaTeX 中)。其他命令等待直到它们进入食道。一般来说,这是一个非常广泛的话题,最好根据具体情况来处理。

问题评论中建议阅读的TeX by Topic内容非常好。如果您只是想编写文档,而命令没有按照您的预期执行,那么有很多不错的资源。您可能想查看以下建议的一些标题开始学习 LaTeX 的最佳书籍是什么?当然,如果您真的想了解其基本内容,可以阅读The TeXbookDonald Knuth 的著作(但如果您才刚刚开始,我不会首先推荐您阅读这本书)。

如果您想了解各个命令是如何定义的,有几种方法。如果您可以访问命令行,并且正在使用 Linux 机器或 Mac,那么您可以尝试给locate定的类并查看实际代码。或者,您可以从命令行调用texdef(或latexdef--虽然我在 Mac 上没有成功latexdef),以查看命令的源代码:

 $ texdef -t latex -c article maketitle -s

它将向您的终端吐出该类article使用的定义\maketitle

您还可以使用它texdoc source2来查看 LaTeX 内核的文档。或者texdoc article获取标准文档类的文档。

相关内容