我想定义名称包含数字而不仅仅是字母的宏:
\def\var1{A}
\def\var2{B}
它们将用于打印其值,如以下示例所示:
\documentclass{article}
\begin{document}
\var1
\var2
\end{document}
但是,LaTeX 不允许多字符宏名称包含数字。
按照@jan-hlavacek 的回答定义包含数字的命令/缩写我想过创建一个\newcommand
有条件地定义变量:
\newcommand\definevar[1]{
\ifnum #1 = 1
\def\var{A}
\fi
\ifnum #1 = 2
\def\var{B}
\fi
}
\var
但是,应该有某种方法来访问嵌套\definevar
在外部代码中的变量。有什么想法吗?
答案1
如果您有一个变量数组,则使用“带参数的命令”语法可以更容易地访问它们。
\newcommand\definevar[2]{%
\expandafter\newcommand\csname var#1var\endcsname{#2}%
}
\newcommand{\var}[1]{\csname var#1var\endcsname}
\definevar{1}{A}
\definevar{2}{B}
然后\var{1}
会打印“A”。
这是一个不太有效的变体,但如果提供有关您的实际需求的更多信息,则可以对其进行改进。
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\definevars}{mm}
{ % #1 = common name, #2 = list of values
\NewDocumentCommand{#1}{m}
{
\clist_item:nn { #2 } { ##1 }
}
}
\ExplSyntaxOff
\definevars{\var}{A,B,C,x}
\begin{document}
\var{1} and \var{3}
\var{2} and \var{4}
\end{document}
答案2
(评论太长,因此作为答案发布)
您知道 LuaLaTeX 的存在吗?与 pdfLaTeX 的主要区别之一是 LuaLaTeX 提供了方便的 Lua 脚本“钩子”。Lua 作为一种现代编程语言,可以毫无问题地设置和处理名为var1
和 的变量var2
。一个最小示例(输出字符串“AB”):
\documentclass{article}
\begin{document}
\directlua{var1 = "A"
var2 = "B"
tex.sprint(var1..var2) }
\end{document}