如何在 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}