¿Estoy usando etoolbox correctamente para comparar cadenas?

¿Estoy usando etoolbox correctamente para comparar cadenas?

Tengo un pequeño ambiente para enumerar declaraciones de preguntas. A veces, quiero que la etiqueta no sea un número sino una cadena. En ese caso, no quiero que se incremente el contador.

% 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}}
  {}}{}

Lo preocupante if-statementaquí es,

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

¿Cómo puedo comparar el valor (expansión?) del argumento #1y el valor del contador \value{QuestionCounter}? Lo intenté \ifdefstrequal{\value{#1}}{\value{QuestionCounter}}porque pensé que \ifdefstrequallos dos primeros argumentos debían ser macros.

¡Gracias!

Respuesta1

No, es un uso incorrecto. Y necesitarías hacer una prueba con expansión completa.

Yo lo haría de otra manera:sifalta el argumento opcional (o está vacío), el contador se escalona y se utiliza para numerar la pregunta.

\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}

ingrese la descripción de la imagen aquí

información relacionada