动态调用缩写

动态调用缩写

当我用自己的命令静态地调用首字母缩略词“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}

b

在更正(缺少括号)\@namedef的定义后,您的代码将起作用\defGLS

\makeatletter
\newcommand{\defGLS}[1]{%
   \@namedef{#1}{\gls{#1}}%
}% <<<<<<<<<<<<<<<<<<<<
\makeatother

\defGLS{cad}

相关内容