有什么办法可以在LaTeX中定义变量?


349

在LaTeX中,如何定义一个字符串变量,而不是已编译的PDF中的变量使用其内容?

假设我正在用软件编写技术文档,并且想在序言中或某处定义软件包名称,这样,如果名称更改,则不必在很多地方替换它,而只需在一个地方替换。


2
对于大量内容,值得一提\ saveboxen.wikibooks.org/wiki/LaTeX/Boxes#savebox)。
Immanuel Weihnachten

Answers:


370

在您的序言中添加以下内容:

\newcommand{\newCommandName}{text to insert}

然后,您可以\newCommandName{}在文本中使用

有关更多信息\newcommand,请参见例如Wikibooks。

例:

\documentclass{article}
\newcommand\x{30}
\begin{document}
\x
\end{document}

输出:

30

31
@DiAlex省略花括号时要小心,因为它会干扰插入文本后的空白。看到这个问题
jtpereyda 2012年

我无法使用非ASCII字符正常工作。有任何想法吗?
lindhe

164

使用\def命令:

\def \variable {Something that's better to use as a variable}

请注意,它\def会在没有任何警告的情况下覆盖现有宏,因此可能导致各种细微的错误。为了克服这个问题或者使用命名空间的变量,如my_var或退回到\newcommand\renewcommand命令代替。


10
使用\def可能会出现问题,因为它不会检查预先存在的宏。看到LaTeX地狱第二个圈子 –这样,最好使用\newcommand
Ryan Atallah 2012年

2
谢谢@RyanAtallah添加了关于此的注释。但是,“含义”是否variable意味着有可能更改?:)
plaes 2012年

4
@plaes您是正确的,但这并不意味着您想使用\def。相反,我认为最好的做法是先“初始化”要与之一起使用的所有变量\newcommand(即使只是与一起使用\@empty),然后创建使用修改变量的命令\renewcommand。这将让您知道变量是否已经退出,因为这\newcommand将引发错误(或至少是警告)。
Nick2253

4
请注意,这\def适用于数学模式下的事物,而不适用于数学模式\newCommandName。(例如\def\mathExpression{\pi^2 + \sin x}
Jollywatt '17

35

对于变量描述的距离,你可以使用\newlength(和操纵值有\setlength\addlength\settoheight\settolength\settodepth)。

同样,您可以访问\newcounter章节和图号之类的内容,这些内容应在整个文档中递增。我过去曾使用过此代码来提供与其他图形分开编号的代码示例...

还要注意的是\makebox,它允许您存储一些布局好的文档以供以后重用(并与\settolength... 一起使用)。


25
\newlength{\hcolw}\setlength{\hcolw}{0.47\textwidth}这样的简单用法示例将非常有用。
trybik 2011年


1

我想您可能要为此目的使用令牌列表:设置令牌列表 \newtoks\packagename 以分配名称: \packagename={New Name for the package} 将名称放入输出中: \the\packagename

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.