Ich möchte zwei Versionen eines Dokuments mit unterschiedlichem Inhalt erstellen. Die Idee ist, bestimmte Abschnitte zu kommentieren, wenn eine logische Variable falsch ist. Diese logische Variable wird schließlich über ein Argument in ein Paket eingegeben. Mein Problem besteht darin, dass mein Code entweder nicht funktioniert oder boolesche Variablen ignoriert. Hier ist ein Beispielcode, der nicht funktioniert. Der Fehler lautet „fehlende Zahl wird als Null behandelt“
\usepackage{ifthen,comment}
\newboolean{iflecturer}
\newenvironment{myitemize}
{\ifthenelse{iflecturer}
{\begin{itemize}}{\begin{comment}}
}
{\ifthenelse{iflecturer}
{\end{itemize}}{\end{comment}}
}
\begin{document}
\setboolean{iflecturer}{true}% \setboolean{iflecturer}{false}
\begin{myitemize}
\item Monday
\item Tuesday
\item Wednesday
\end{myitemize}
\end{document}
Antwort1
Ich denke, es ist besser, das Makro zu verwenden, \excludecomment
das vonKommentarpaketAuf diese Weise müssen Sie Kommentarumgebungen nicht innerhalb von Makros oder Ihren eigenen Umgebungen starten und beenden.
\documentclass{article}
\usepackage{ifthen}
\usepackage{comment}
\specialcomment{solution}{\textbf{Solution}\quad}{}
\newboolean{iflecturer}
\setboolean{iflecturer}{false}
\ifthenelse{\boolean{iflecturer}}{}{\excludecomment{solution}}
\begin{document}
This is a question.
\begin{solution}
And this is the solution.
\end{solution}
\end{document}
Antwort2
Sie können das environ
Paket stattdessen verwenden comment
, um den Inhalt einer Umgebung zu verwerfen.
\documentclass{article}
\usepackage{etoolbox}
\usepackage{environ}
\newtoggle{lecture}
\NewEnviron{myitemize}{%
\iftoggle{lecture}
{\begin{itemize}\BODY\end{itemize}}
{}%
}
\begin{document}
\toggletrue{lecture}
The environment is visible
\begin{myitemize}
\item test
\item test
\end{myitemize}
\togglefalse{lecture}
after this the environment is hidden.
\begin{myitemize}
\item test
\item test
\end{myitemize}
Test
\end{document}
Das ist was du bekommst: