
Diese Frage führte zu einem neuen Paket:
comment_io
Ich möchte ein Dokument mit aufgezählten Umgebungen erstellen, die ich dann vor dem Kompilieren ein- und ausschalten könnte.
Nehmen wir zum Beispiel an, ich habe einen Abschnitt, der so aussieht:
\begin{enumerate}
\item This is a test.
\item This is another test.
\item This is yet another test.
\end{enumerate}
Unter normalen Umständen würde sich daraus eine Aufzählungsliste mit drei Elementen ergeben, etwa so:
1. This is a test.
2. This is another test.
3. This is yet another test.
Ich hätte gern eine Möglichkeit, diese spezielle Enumerate-Umgebung zu entfernen, sodass die kompilierte Ausgabe etwa so aussieht:
This is a test. This is another test. This is yet another test.
Darüber hinaus möchte ich dies global für verschiedene Umgebungen tun können (das heißt, nicht jede Instanz der betreffenden Umgebung auf lokaler Ebene bearbeiten müssen).
Ich möchte jedoch weiterhin die Möglichkeit haben, andere Aufzählungsumgebungen in meinen Dokumenten zu haben, die an Ort und Stelle bleiben (auch wenn sie in der verschwindenden Umgebung verschachtelt sind).
Kontext: Ich möchte meine Texte im Tractatus-Stil schreiben, bei dem jeder Abschnitt in einer Aufzählungshierarchie angeordnet ist. Allerdings möchte ich diese Aufzählung auch entfernen und den Text einfach als normalen Artikel anzeigen können. Schließlich möchte ich in diesem normalen Artikel die Möglichkeit haben, Aufzählungslisten anzuzeigen (die dann nicht Teil der Tractatus-Aufzählung wären).
Antwort1
Damit verschachtelte enumerate
(oder andere Listen-)Umgebungen weiterhin funktionieren, müssen Sie erfassen, \item
ob Sie es in diesem neuen on-off zu einem No-Op machen wollen . Dazu speichern wir seine Definition in der Präambel und stellen es für die Verwendung zu Beginn jeder Verwendung enumerate
wieder her.enuemrate
etoolbox
's \AtBeginEnvironment
. Wenn Sie auch andere Listen verschachteln möchten, müssen Sie diese \item
auf ähnliche Weise wiederherstellen.
Unten habe ich definiert, enumerate*
was während der Kompilierung deaktiviert wird, während verschachtelte enumerate
s weiterhin unterstützt werden:
\documentclass{article}
\usepackage{etoolbox}
\AtBeginEnvironment{enumerate}{\let\item\olditem}
\let\olditem\item
\newenvironment{enumerate*}
{\par\let\item\relax}
{\par}
\begin{document}
\begin{enumerate*}
\item Something
\begin{enumerate}
\item Something else
\item Another thing
\begin{enumerate*}
\item This is it
\item This is another it
\end{enumerate*}
\end{enumerate}
\item Last thing
\end{enumerate*}
\end{document}
enumerate*
neu definiert \item
, um nichts zu tun (zu sein \relax
). Daher wird es alle optionalen Argumente, falls vorhanden, vollständig ignorieren. Das heißt, es \item[<stuff>]
wird standardmäßig verwendet [<stuff>]
. Dies kann angepasst werden, um das optionale Argument bei Bedarf zu verschlingen.
Man kann auch die vertikale Ausrichtung anpassen, indem man einfügt enumerate*
.
Antwort2
Vielen Dank für alle Ihre Antworten. Nachdem ich mir jedoch am Ende die Haare gerauft hatte, weil ich versucht hatte, alle verschiedenen Methoden zum Laufen zu bringen, beschloss ich einfach, mein eigenes Skript in Python zu schreiben, das Zeilen abhängig von bestimmten in der Datei enthaltenen Befehlen auskommentiert (und auskommentiert).
Wenn meine Originaldatei beispielsweise so aussieht:
\begin{document}
\begin{enumerate}
\item
This is a test.
\item
This is another test.
\item
This is yet another test.
\end{enumerate}
\end{document}
und ich möchte die Möglichkeit haben, all diesen Aufzählungskram abzuschalten. Dazu füge ich einfach am Ende jeder Zeile, die ich auskommentieren können möchte, einen kleinen Befehl hinzu, etwa so:
\begin{document}
\begin{enumerate} %@
\item %@
This is a test.
\item %@
This is another test.
\item %@
This is yet another test.
\end{enumerate} %@
\end{document}
und überlasse meinem Skript seine Arbeit, wodurch die Datei etwa so aussieht:
\begin{document}
%@ \begin{enumerate}
%@ \item
This is a test.
%@ \item
This is another test.
%@ \item
This is yet another test.
%@ \end{enumerate}
\end{document}
Das mag umständlich erscheinen, ist für mich aber die absolut beste Lösung, da ich über alles Bescheid weiß, was passiert.
Wenn jemand das in Python geschriebene Programm verwenden oder sich ansehen möchte, findet er es unterCTAN.
Antwort3
Definieren Sie eine neue Umgebung entsprechend enumitem
Ihren Anforderungen:
\documentclass{article}
\usepackage{enumitem}
\newlist{myenum}{enumerate*}{3}
\setlist[myenum]{leftmargin=!,label=\arabic*.}
\begin{document}
\begin{myenum}
\item This is a test.
\item This is another test.
\item This is yet another test.
\begin{myenum}[label=]
\item Second level This is a test.
\item This is another test.
\item This is yet another test.
\begin{myenum}[label=\roman*.]
\item Third level This is a test.
\item This is another test.
\item This is yet another test.
\end{myenum}
\end{myenum}
\end{myenum}
\end{document}
Antwort4
Dies erledigt die Aufgabe in Ihrem Anwendungsfall fast. Es ist möglicherweise nicht robust bei ausgefalleneren Aufzählungsumgebungen oder Optionen – es behandelt die Verschachtelung nicht wie gewünscht.
\documentclass{article}
\usepackage{etoolbox}
\newtoggle{killenumerate}
\toggletrue{killenumerate}
\newenvironment{myenumerate}
{\iftoggle{killenumerate}
{\renewcommand{\item}{}}
{\begin{enumerate}}
}
{\iftoggle{killenumerate}
{}
{\end{enumerate}}
}
\begin{document}
Enumeration switched off selectively in preamble.
\begin{myenumerate}
\item One item in myenumerate environment
\item Two
\item Three
\end{myenumerate}
\begin{enumerate}
\item One item in ordinary enumerate
\item Two
\item Three
\end{enumerate}
Enumeration switched on for the rest of the document.
\togglefalse{killenumerate}
\begin{myenumerate}
\item One item in myenumerate environment
\item
\item Two
\item Three
\end{myenumerate}
\end{document}