¿Estoy usando etoolbox correctamente para comparar cadenas?
Tengo un pequeño entorno para enumerar las 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 concerniente 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 he intentado \ifdefstrequal{\value{#1}}{\value{QuestionCounter}}porque pensé que los \ifdefstrequaldos primeros argumentos deben ser macros.
¡Gracias!
Respuestas
No, es un uso incorrecto. Y necesitaría hacer una prueba con expansión completa.
Lo haría de una manera diferente: si falta el argumento opcional (o está vacío), el contador se escalona y se usa 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}