Um mir das Leben zu erleichtern, möchte ich ein Übungsblatt für eine Vorlesung mit den dazugehörigen Lösungen erstellen. Dazu habe ich ein definiert, um zu steuern, ob die Lösung enthalten sein soll oder nicht. Das hat gut funktioniert, bis ich ein oder eine Umgebung darin \newif
benötigte . Der folgende Code ist das Minimalbeispiel für den Fehler, es funktioniert auch mit.lstlisting
verbatim
verbatim
\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{listings}
\newif\ifsolution
\solutionfalse
\ifsolution
\newcommand{\solution}[1]{#1}
\else
\newcommand{\solution}[1]{}
\fi
\begin{document}
This is always shown.
\solution{The listing is only shown if ifsolution is true.
\begin{lstlisting}
Test
\end{lstlisting}
}
\end{document}
Das Setzen solution
auf true erzeugt den Fehler. Wie kann ich mit dieser Funktion einen Befehl oder eine Umgebung definieren?
Antwort1
Meine erste Einschätzung war falsch, aber wie Gonzalo freundlicherweise bemerkte
wörtliches Material kann nicht im Argument von Standardbefehlen erscheinen
Eine Lösung, die funktioniert, besteht darin, keine Argumente zu verwenden:
\ifsolution
\def\solution{\relax}
\else
\newcommand{\solution}[1]{}
\fi
Sie können aber auch das Paket verwenden comment
. Es bietet die Möglichkeit, eine bestimmte Umgebung einfach als zu definieren comment
.
\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{listings}
\usepackage{comment}
\excludecomment{solution}
%\includecomment{solution}
\begin{document}
This is always shown.
\begin{solution}
The listing is only shown if ifsolution is true.
\begin{lstlisting}
Test
\end{lstlisting}
\end{solution}
\end{document}
Bei \excludecomment{solution}
werden die Lösungen nicht angezeigt und wenn Sie \includecomment{solution}
stattdessen schreiben, werden sie angezeigt.