如何 \emph \csname?

如何 \emph \csname?

如何\emph\csname\command\endcsname我尝试使用\csgdef,它有效,但不适用于\csname,我需要使用\csxdef

\documentclass[a4paper,12pt,hidelinks]{article}

\usepackage[utf8]{inputenc} 
\usepackage[brazil]{babel}
\usepackage[T1]{fontenc}

\usepackage{filecontents}
\usepackage{csvsimple}
\usepackage{xstring}
\usepackage{alphalph}
\usepackage{etoolbox}
\usepackage{tikz}

\newcommand \garotab {garota}
\newcommand \nveics {2}

\foreach \x [count=\xi from 2] in {b,...,\alphalph{\nveics}}{
% \csxdef{teste\x}{\emph{\csname garota\x\endcsname}}

\csxdef{rato\x}{\em ah garota}
\csgdef{gato\x}{\emph{ah garota}}
}

\begin{document}

{\testeb}\\

{\gatob}\\

{\ratob}\\

\end{document}

答案1

您需要避免扩展,因此在其前面\emph使用。\noexpand

\documentclass{article}

\usepackage{alphalph}
\usepackage{etoolbox}
\usepackage{tikz}

\newcommand \garotab {garota}
\newcommand \nveics {2}

\foreach \x [count=\xi from 2] in {b,...,\alphalph{\nveics}}{
  \csxdef{teste\x}{\noexpand\emph{\expandonce{\csname garota\x\endcsname}}}
  \csxdef{rato\x}{\noexpand\em ah garota}
  \csgdef{gato\x}{\emph{ah garota}}
}

\begin{document}

{\testeb}  

{\gatob}  

{\ratob}  

\end{document}

请注意,通过这种方式,您执行的操作与

\def\testeb{\emph{\garotab}}

如果你想完全展开\garotab(我不确定你是否这样做),请将这一行改为

  \csxdef{teste\x}{\noexpand\emph{\csname garota\x\endcsname}}

相关内容