为什么 textbf 在宏中不起作用

为什么 textbf 在宏中不起作用

这是我的代码:

\newcommand{\testtest}[1]{%%
  \stepcounter{aebir@prob@cnt}%%
  \edef\aebir@tmp{#1}}
 
\testtest{$\frac{1}{2}$}
\aebir@tmp{}

这会打印出 1/2,这没问题。但如果我尝试写类似

\newcommand{\testtest}[1]{%%
  \stepcounter{aebir@prob@cnt}%%
  \edef\aebir@tmp{#1}}
 
\testtest{\textbf{A}}
\aebir@tmp{}

这不会打印粗体字母 A。这根本无法运行。这是我的较长代码的一部分,但我需要先解决这个问题。

问题可能出在那个 {#1} 上。因为

\def\aeiki@tmp{\textbf{A}}
\aeiki@tmp{}

这工作得很好。

谢谢!


抱歉,解释得不好。这是我的完整代码,我需要用它来创建答案。

\documentclass{article}

\begin{document}

\makeatletter

\newcounter{aebir@prob@cnt}
\let\aebir@answer@key\relax

\newcommand\dogrucevapbir[1]{%%
  \stepcounter{aebir@prob@cnt}%%
  \edef\aebir@tmp{\theaebir@prob@cnt/#1}%%
  \ifx\relax\aebir@answer@key
    \edef\aebir@answer@key{\aebir@tmp}%%
  \else
    \edef\aebir@answer@key{\aebir@answer@key,\aebir@tmp}%%
  \fi
  }

Question 1: Correct answer is A.
\dogrucevapbir{A}

Question 2: Correct answer is B.
\dogrucevapbir{B}

Question 3: Correct answer is C.
\dogrucevapbir{C}

Here is the answer key:

\aebir@answer@key{}

\end{document}

结果:

这是我得到的结果:

但是如果我尝试 \dogrucevapbir{\textbf{A}} 或 \dogrucevapbir{\dfrac{1}{2}} 之类的操作,就会出现错误。

答案1

您不能\edef在任意 latex 输入上使用。您没有给出希望命令执行什么操作的指示,但看起来这里不需要扩展,因此您可以使用\def

在此处输入图片描述

\documentclass{article}

\begin{document}

\makeatletter
\newcounter{aebir@prob@cnt}
\newcommand{\testtest}[1]{%%
  \stepcounter{aebir@prob@cnt}%%
  \def\aebir@tmp{#1}}
 
\testtest{$\frac{1}{2}$}
\aebir@tmp{}

\testtest{\textbf{A}}
\aebir@tmp{}

\end{document}

答案2

我建议使用旧式命令。你可以使用\edef,但你必须知道你想扩展什么,不想扩展什么。

\newcount\probcnt
\def\answerkey{}

\def\dogrucevapbir#1{%
  \global\advance\probcnt by1
  \xdef\answerkey{\ifnum\probcnt=1 1\else
     \unexpanded\expandafter{\answerkey}, \the\probcnt\fi
     /\unexpanded{#1}}%
}

Question 1: Correct answer is A.
\dogrucevapbir{A}

Question 2: Correct answer is B.
\dogrucevapbir{B}

Question 3: Correct answer is C.
\dogrucevapbir{C}

Here is the answer key:

\answerkey

答案3

我建议使用新样式的命令。

\documentclass{article}

\ExplSyntaxOn

\int_new:N \g_ertan_answer_count_int
\clist_new:N \g_ertan_answer_keys_clist

\NewDocumentCommand{\dogrucevapbir}{m}
 {
  \int_gincr:N \g_ertan_answer_count_int
  \clist_gput_right:Nx \g_ertan_answer_keys_clist
   {
    \int_to_arabic:n { \g_ertan_answer_count_int } / \exp_not:n {#1} 
   }
 }
\NewDocumentCommand{\printanswerkeys}{}
 {
  \clist_use:Nn \g_ertan_answer_keys_clist { ,~ }
 }

\ExplSyntaxOff

\begin{document}

Question 1: Correct answer is A.
\dogrucevapbir{A}

Question 2: Correct answer is B.
\dogrucevapbir{$\frac{1}{2}$}

Question 3: Correct answer is C.
\dogrucevapbir{\textbf{C}}

Here is the answer key:

\printanswerkeys

\end{document}

在此处输入图片描述

相关内容