Estou usando o etoolbox corretamente para comparação de strings?

Estou usando o etoolbox corretamente para comparação de strings?

Eu tenho um pequeno ambiente para enumerar declarações de perguntas. Às vezes, quero que o rótulo não seja um número, mas sim uma string. Nesse caso, não quero que o contador seja incrementado.

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

A preocupação if-statementaqui é,

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

Como posso comparar o valor (expansão?) Do argumento #1e o valor do contador \value{QuestionCounter}? Eu tentei \ifdefstrequal{\value{#1}}{\value{QuestionCounter}}porque pensei que \ifdefstrequalos dois primeiros argumentos precisavam ser macros.

Obrigado!

Responder1

Não, é um uso incorreto. E você precisaria fazer um teste com expansão total.

Eu faria isso de uma maneira diferente:seo argumento opcional está faltando (ou está vazio), o contador é escalonado e usado para numerar a pergunta.

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

insira a descrição da imagem aqui

informação relacionada