我正在尝试做一些[似乎应该]非常简单的事情,但似乎不起作用,感谢指导!简而言之,我想定义一些标签列表,以便\usetag
从标记包传递给命令(https://ctan.math.illinois.edu/macros/latex/contrib/tagging/tagging.pdf)基本上取代:
\usepackage{tagging}
\usetag{topic 1, topic 2, topic 3, etc.}
和
\usepackage{tagging}
\newcommand{\alltaggedtopics}{topic 1, topic 2, topic 3, etc.}
\usetag{\alltaggedtopics}
然后设置更多标签组,并有类似
\usepackage{tagging}
\newcommand{\alltaggedtopics}{topic 1, topic 2, topic 3, etc.}
\newcommand{\alltaggedauthors}{author 1, author 2, author 3, etc.}
\usetag{\alltaggedtopics, \alltaggedauthors}
但是,通过 newcommmands 执行此操作会导致 usetag 被设置为空。我确信我犯了一个非常根本的错误,非常感谢帮助我确定它是什么。
克里斯
答案1
\usetag
想要查看标签列表,而不是标签容器。
由于标签应该是简单的字母数字字符串,因此使用\edef
它们是安全的。解决该问题的最简单代码是expl3
:
\usepackage{expl3}
\ExplSyntaxOn
% get an internal version of \usetag
\cs_new_eq:NN \chris_usetag:n \usetag
% we can define a variant with x-expansion
\cs_generate_variant:Nn \chris_usetag:n { x }
% define a user level command
\cs_new_eq:NN \xusetag \chris_usetag:x
\ExplSyntaxOff
在这之后,
\xusetag{\alltaggedtopics, \alltaggedauthors}
\usetag
其工作方式与传递两个宏中包含的列表一样。
等效版本可能是
\ExplSyntaxOff
\cs_new_protected:Npn \xusetag #1 { \exp_args:Nx \usetag { #1 } }
\ExplSyntaxOff
但从概念上来说,定义一个变体更好。
经典的实现可能是
\newcommand{\xusetag}[1]{%
\begingroup\edef\x{\endgroup\noexpand\usetag{#1}}\x
}