有啥办法可以在 LaTeX 中定义变量吗?

Posted

技术标签:

【中文标题】有啥办法可以在 LaTeX 中定义变量吗?【英文标题】:Is there any way I can define a variable in LaTeX?有什么办法可以在 LaTeX 中定义变量吗? 【发布时间】:2010-11-15 18:17:17 【问题描述】:

在 LaTeX 中,如何定义一个字符串变量,而不是编译后的 PDF 中的变量?

假设我正在编写一个关于软件的技术文档,并且我想在序言或某处定义包名称,这样如果它的名称发生变化,我不必在很多地方替换它,而只是在一个地方。

【问题讨论】:

内容大,值得一提的是\savebox (en.wikibooks.org/wiki/LaTeX/Boxes#savebox)。 【参考方案1】:

在序言中添加以下内容:

\newcommand\newCommandNametext to insert

那么你可以在文本中使用\newCommandName

有关\newcommand 的更多信息,请参阅例如wikibooks

例子:

\documentclassarticle
\newcommand\x30
\begindocument
\x
\enddocument

输出:

30

【讨论】:

@DiAlex 在省略花括号时要小心,因为它会干扰插入文本后的空白。见this question。 我无法让它与非 ascii 字符一起正常工作。有什么想法吗? 这不是一个好的答案。该命令将在调用时进行评估,而不是在定义时进行评估。所以这不是传统语言意义上的变量。如果命令从不被调用,则命令的“主体”将永远不会计算,如果命令被调用两次,“主体”将被计算两次。 非常赞成,它当然符合 OP 的目的。但它并不是真正的变量。【参考方案2】:

使用\def 命令:

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

请注意,\def 会在没有任何警告的情况下覆盖预先存在的宏,因此可能会导致各种细微错误。要克服这个问题,可以使用 my_var 之类的命名空间变量,或者改用 \newcommand\renewcommand 命令。

【讨论】:

使用\def 可能会出现问题,因为它不会检查预先存在的宏。请参阅second circle of LaTeX hell - 因此,最好使用\newcommand 感谢@RyanAtallah 对此添加了注释。不过,variable 的含义不是意味着它可能会改变吗? :) @plaes 你是对的,但这并不意味着你想使用\def。相反,我认为最好的做法是首先“初始化”您想与\newcommand 一起使用的所有变量(即使它只是与\@empty 一起使用),然后创建您的命令来使用\renewcommand 修改变量。这会让你知道你的变量是否已经退出,因为\newcommand 会抛出一个错误(或者至少是一个警告)。 请注意,\def 适用于数学模式,而 \newCommandName 不适用。 (例如,\def\mathExpression\pi^2 + \sin x 使用下划线搞乱了我必须做的绘图myVar【参考方案3】:

对于描述距离的变量,您可以使用\newlength(并使用\setlength\addlength\settoheight\settolength\settodepth 操作这些值。

类似地,您可以访问\newcounter 以获取应在整个文档中递增的部分和图形编号等内容。我过去曾使用这个来提供与其他数字分开编号的代码示例...

另外值得注意的是\makebox,它允许您存储一些布局文件以供以后重复使用(以及与\settolength 一起使用...)。

【讨论】:

\newlength\hcolw\setlength\hcolw0.47\textwidth 这样的简单用法示例会很有用。【参考方案4】:

如果要使用\newcommand,还可以包含\usepackagexspace,并通过\newcommand\newCommandNametext to insert\xspace定义命令。 这可以让您只使用\newCommandName 而不是\newCommandName

更多详情,http://www.math.tamu.edu/~harold.boas/courses/math696/why-macros.html

【讨论】:

另见tex.stackexchange.com/questions/31091/…【参考方案5】:

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

【讨论】:

【参考方案6】:

这对我有用: \newcommand\variablename文本

例如:\newcommand\m100

所以当你在源代码中输入“\m\ is my mark”时,

pdf 输出显示为:

100 是我的标记

【讨论】:

以上是关于有啥办法可以在 LaTeX 中定义变量吗?的主要内容,如果未能解决你的问题,请参考以下文章

c语言中字符串能否转为代码执行?或者有啥替代办法?

JAVA中定义为static变量的时候,该变量有啥意义吗?

通过尽可能多地定义常量而不是变量,Swift 有啥好处吗?

LaTeX怎么实现的嵌套关系

有啥办法可以加快 Greenplum 的速度吗?

“Latex Error:未定义字体大小命令/ normalsize”的原因是什么