可能包含数字的宏名称

可能包含数字的宏名称

我想定义名称包含数字而不仅仅是字母的宏:

\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}

相关内容