【发布时间】:2010-11-15 18:17:17
【问题描述】:
在 LaTeX 中,如何定义一个字符串变量,而不是编译后的 PDF 中的变量?
假设我正在编写一个关于软件的技术文档,并且我想在序言或某处定义包名称,这样如果它的名称发生变化,我不必在很多地方替换它,而只是在一个地方。
【问题讨论】:
-
内容大,值得一提的是\savebox (en.wikibooks.org/wiki/LaTeX/Boxes#savebox)。
在 LaTeX 中,如何定义一个字符串变量,而不是编译后的 PDF 中的变量?
假设我正在编写一个关于软件的技术文档,并且我想在序言或某处定义包名称,这样如果它的名称发生变化,我不必在很多地方替换它,而只是在一个地方。
【问题讨论】:
在序言中添加以下内容:
\newcommand{\newCommandName}{text to insert}
那么你可以在文本中使用\newCommandName{}
有关\newcommand 的更多信息,请参阅例如wikibooks
例子:
\documentclass{article}
\newcommand\x{30}
\begin{document}
\x
\end{document}
输出:
30
【讨论】:
使用\def 命令:
\def \variable {Something that's better to use as a variable}
请注意,\def 会在没有任何警告的情况下覆盖预先存在的宏,因此可能会导致各种细微错误。要克服这个问题,可以使用 my_var 之类的命名空间变量,或者改用 \newcommand、\renewcommand 命令。
【讨论】:
\def 可能会出现问题,因为它不会检查预先存在的宏。请参阅second circle of LaTeX hell - 因此,最好使用\newcommand
variable 的含义不是意味着它可能会改变吗? :)
\def。相反,我认为最好的做法是首先“初始化”您想与\newcommand 一起使用的所有变量(即使它只是与\@empty 一起使用),然后创建您的命令来使用\renewcommand 修改变量。这会让你知道你的变量是否已经退出,因为\newcommand 会抛出一个错误(或者至少是一个警告)。
\def 适用于数学模式,而 \newCommandName 不适用。 (例如,\def\mathExpression{\pi^2 + \sin x})
myVar
对于描述距离的变量,您可以使用\newlength(并使用\setlength、\addlength、\settoheight、\settolength 和\settodepth 操作这些值。
类似地,您可以访问\newcounter 以获取应在整个文档中递增的部分和图形编号等内容。我过去曾使用这个来提供与其他数字分开编号的代码示例...
另外值得注意的是\makebox,它允许您存储一些布局文件以供以后重复使用(以及与\settolength 一起使用...)。
【讨论】:
\newlength{\hcolw} 和 \setlength{\hcolw}{0.47\textwidth} 这样的简单用法示例会很有用。
如果要使用\newcommand,还可以包含\usepackage{xspace},并通过\newcommand{\newCommandName}{text to insert\xspace}定义命令。
这可以让您只使用\newCommandName 而不是\newCommandName{}。
更多详情,http://www.math.tamu.edu/~harold.boas/courses/math696/why-macros.html
我认为您可能希望为此目的使用令牌列表:
设置令牌列表
\newtoks\packagename
分配名称:
\packagename={New Name for the package}
将名称放入您的输出中:
\the\packagename.
【讨论】:
这对我有用: \newcommand{\variablename}{文本}
例如:\newcommand\m{100}
所以当你在源代码中输入“\m\ is my mark”时,
pdf 输出显示为:
100 是我的标记
【讨论】: