当我用自己的命令静态地调用首字母缩略词“CAD”时,accad
我可以毫无问题地间接调用相应的首字母缩略词。
但是如果我尝试使用(在 MWE 中)注释掉的部分动态调用它,编译显然会在 的定义处停止defGLS
。
梅威瑟:
\documentclass{scrartcl}
\usepackage[acronym]{glossaries-extra}
\makeglossaries
\setabbreviationstyle[acronym]{long-short}
\newacronym{ac:cad}{CAD}{Computer Aided Design}
\newcommand{\accad}{\gls{ac:cad}}
%\makeatletter
%\newcommand{\defGLS}[1]{
% \@namedef{#1}{\gls{ac:#1}}
%\makeatother
%\defGLS{cad}
\begin{document}
\accad
%\cad
\printglossaries
\end{document}
\expandafter
我尝试在 的行中的不同位置使用\@namedef
(之前和/或之后以及 之前\gls...
),但无济于事。
答案1
尝试一下这个代码。
首先定义一些\creator
新命令。
\create{<command name>}
然后调用它来创建具有所需结果的新命令。在此示例中,它执行了 3 次,每个定义的首字母缩略词执行一次。
\documentclass{scrartcl}
\usepackage[acronym]{glossaries-extra}
\makeglossaries
\setabbreviationstyle[acronym]{long-short}
\newacronym{cad}{CAD}{Computer Aided Design}
\newacronym{AC}{AC}{Alternating Current}
\newacronym{saas}{SaaS}{Software as a Service}
%********************************************* added
\newcommand{\create}[1]{% \create{<command name>}
\expandafter\newcommand\csname #1\endcsname{\gls{#1}\par}
}
\create{cad}
\create{AC}
\create{saas}
%************************************************
\begin{document}
\textbf{First time}
\verb|\cad|: \cad
\verb|\AC|: \AC
\verb|\saas|: \saas
\bigskip
\textbf{Second time}
\verb|\cad|: \cad
\verb|\AC|: \AC
\verb|\saas|: \saas
\printglossaries
\end{document}
在更正(缺少括号)\@namedef
的定义后,您的代码将起作用\defGLS
\makeatletter
\newcommand{\defGLS}[1]{%
\@namedef{#1}{\gls{#1}}%
}% <<<<<<<<<<<<<<<<<<<<
\makeatother
\defGLS{cad}