在其他编程语言中,我遇到过命令是动词;它是计算机要做的事情。命令所作用的对象称为变量,变量有多种类型。我们可以有一个字符串变量、一个数字变量或一个日期变量等等,代码通常会指示命令对变量执行某些操作:例如 @ Row(24) Col(65) Print(date)。
在 Latex 中,任何以反斜杠开头的都称为命令,因此\author{text}
尽管它什么都不做,但仍被称为命令。它实际上只是一个变量的声明。不仅如此,它还是一个我无法直接使用的变量。如果我输入\author
Latex,它会告诉我我犯了一个错误,如果我输入\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 TeXbook
Donald Knuth 的著作(但如果您才刚刚开始,我不会首先推荐您阅读这本书)。
如果您想了解各个命令是如何定义的,有几种方法。如果您可以访问命令行,并且正在使用 Linux 机器或 Mac,那么您可以尝试给locate
定的类并查看实际代码。或者,您可以从命令行调用texdef
(或latexdef
--虽然我在 Mac 上没有成功latexdef
),以查看命令的源代码:
$ texdef -t latex -c article maketitle -s
它将向您的终端吐出该类article
使用的定义\maketitle
。
您还可以使用它texdoc source2
来查看 LaTeX 内核的文档。或者texdoc article
获取标准文档类的文档。