
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-statement
hier ist,
\ifdefstrequal{#1}{\value{QuestionCounter}}
{\stepcounter{QuestionCounter}}
{}
Wie kann ich den Wert (die Erweiterung?) des Arguments #1
und den Wert des Zählers vergleichen \value{QuestionCounter}
? Ich habe es versucht, \ifdefstrequal{\value{#1}}{\value{QuestionCounter}}
weil ich dachte, \ifdefstrequal
die 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}