So verbergen Sie eine Listings- oder Verbatim-Umgebung mit einem \newif enable-Befehl

So verbergen Sie eine Listings- oder Verbatim-Umgebung mit einem \newif enable-Befehl

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 \newifbenötigte . Der folgende Code ist das Minimalbeispiel für den Fehler, es funktioniert auch mit.lstlistingverbatimverbatim

\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 solutionauf 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.

verwandte Informationen