我是否正确使用 etoolbox 进行字符串比较?

我是否正确使用 etoolbox 进行字符串比较?

我有一个小环境来枚举问题陈述。有时,我希望标签不是数字,而是一些字符串。在这种情况下,我不希望计数器增加。

% question environment
\newcounter{QuestionCounter}
\stepcounter{QuestionCounter}
\newenvironment{question}[1][\arabic{QuestionCounter}] {
  \vspace*{0.5\baselineskip}
  \noindent\textbf{Question #1. }\ignorespaces
  \ifdefstrequal{#1}{\value{QuestionCounter}}
  {\stepcounter{QuestionCounter}}
  {}}{}

这里涉及if-statement的是,

\ifdefstrequal{#1}{\value{QuestionCounter}}
{\stepcounter{QuestionCounter}}
{}

我如何比较参数的值 (扩展?)#1和计数器的值\value{QuestionCounter}?我尝试过,\ifdefstrequal{\value{#1}}{\value{QuestionCounter}}因为我认为\ifdefstrequal前两个参数需要是宏。

谢谢!

答案1

不,这是不正确的用法。您需要在完全展开的情况下进行测试。

我会用不同的方式来做:如果可选参数缺失(或为空),计数器将步进并用于对问题进行编号。

\documentclass{article}

\newcounter{QuestionCounter}
\newenvironment{question}[1][]
 {%
  \par\addvspace{0.5\baselineskip}%
  \if\relax\detokenize{#1}\relax
    \stepcounter{QuestionCounter}%
    \thisquestion{\arabic{QuestionCounter}}%
  \else
    \thisquestion{#1}%
  \fi
 }{%
  \par\addvspace{0.5\baselineskip}%
 }
\newcommand{\thisquestion}[1]{%
  \noindent\textbf{Question #1. }\ignorespaces
}

\begin{document}

\begin{question}
Is this a numbered question?
\end{question}

\begin{question}[foo]
Is this a numbered question?
\end{question}

\begin{question}
Is this a numbered question?
\end{question}

\end{document}

在此处输入图片描述

相关内容