将字符串转换为命令

将字符串转换为命令

如何在 LaTeX 中构造一个字符串(可能带有变量)来调用具有相应名称的 LaTeX 宏?

例如,假设我已将注释定义为\def\Comment1{Example text.}和,\def\CommentText[#1]{\comment#1}并且我想\CommentText[1]生成“示例文本”。

我非常确定上述方法不起作用。

有什么方法可以让它工作吗?有没有好的方法可以用另一种方法实现相同的结果(假设我有大约 50 条评论,我想用其他人容易理解的名字来命名它们)。

答案1

\documentclass[a4paper]{article}


\begin{document}
\expandafter\def\csname Comment1\endcsname{Example}
\newcommand\CommentText[1]{\csname Comment#1\endcsname}

Test:
\CommentText{1}
\end{document}

答案2

如果你真的想制作一个由整数索引的评论列表,为什么不使用数组作业包裹?

\documentclass{article}
\usepackage{arrayjobx}
\newarray\Comment
\Comment(1)={Example}
\Comment(42)={Another Example}

\begin{document}
\Comment(1)
\Comment(42)
\end{document}

答案3

Ulrike 的出色回答也许可以从更多的宏观角度受益:

\documentclass[a4paper]{article}

\newcommand\defComment[2]{\expandafter\def\csname Comment#1\endcsname{#2}}
\newcommand\CommentText[1]{\csname Comment#1\endcsname}
\begin{document}

\defComment{1}{Example}
\defComment{42}{Another example}

Test:
\CommentText{1} \CommentText{42}
\end{document}

相关内容