Verwende ich etoolbox richtig für den Zeichenfolgenvergleich?

Verwende ich etoolbox richtig für den Zeichenfolgenvergleich?

Ich habe eine kleine Umgebung, um Fragestellungen aufzuzählen. Manchmal möchte ich, dass die Bezeichnung keine Zahl, sondern eine Zeichenfolge ist. In diesem Fall möchte ich nicht, dass der Zähler hochgezählt wird.

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

Das Betreffende if-statementhier ist,

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

Wie kann ich den Wert (die Erweiterung?) des Arguments #1und den Wert des Zählers vergleichen \value{QuestionCounter}? Ich habe es versucht, \ifdefstrequal{\value{#1}}{\value{QuestionCounter}}weil ich dachte, \ifdefstrequaldie ersten beiden Argumente müssten Makros sein.

Danke!

Antwort1

Nein, das ist eine falsche Verwendung. Und Sie müssten einen Test mit voller Erweiterung durchführen.

Ich würde es anders machen:WennFehlt das optionale Argument (oder ist leer), wird der Zähler hochgezählt und zur Nummerierung der Frage verwendet.

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

Bildbeschreibung hier eingeben

verwandte Informationen