Wie kann man verbergen/anzeigenalleBeschreibungen in einer description
Umgebung gleichzeitig.
\documentclass[]{article}
\begin{document}
\begin{description}
\item[Keep This] Discard This
\item[Keep This] Discard This
\end{description}
\end{document}
Antwort1
Eine Möglichkeit wäre, die description
Arbeitsweise neu zu definieren, alle \item[<stuff>]
Inhalte zu erfassen undallessonst. Dieses Catch-and-Release ist durch eine lokale Neudefinition \item
und Platzierung der gesamten Umgebung in einer Box möglich. Auf diese Weise werden die Dinge nicht auf die Seite eingestellt, aber Sie können die Umgebung verarbeiten.
Die obige kurze Erläuterung wird im Folgenden umgesetzt:
\documentclass{article}
\let\olddescription\description% Store \description (\begin{description})
\let\endolddescription\enddescription% Store \enddescription (\end{description})
\newsavebox{\descriptionbox}
\makeatletter
\newcommand{\discarddescription}{%
\renewenvironment{description}
{\gdef\descriptionlist{}% Clear description list
\begingroup% Begin local scope
\def\item[####1]{\g@addto@macro\descriptionlist{\item[####1]}}% Redefine \item[.] to capture its argument
% and store it in \descriptionlist
\begin{lrbox}{\descriptionbox}}% Start capturing elements
{\end{lrbox}% End capturing elements
\endgroup% Close local scope
\begin{olddescription}\descriptionlist\end{olddescription}}% Set captured items in regular description
}
\newcommand{\restoredescription}{%
\let\description\olddescription% Restore \description (\begin{description})
\let\enddescription\endolddescription% Restore \enddescription (\end{description})
}
\makeatother
\begin{document}
\begin{description}
\item[Keep this] Definitely keep this
\item[Keep that] Definitely keep that
\end{description}
\discarddescription
\begin{description}
\item[Keep this] Discard this
\item[Keep that] Discard that
\end{description}
\restoredescription
\begin{description}
\item[Keep this] Definitely keep this
\item[Keep that] Definitely keep that
\end{description}
\end{document}
Es stehen Schalter zum Verwerfen description
von Inhalten (über \discarddescription
) und Wiederherstellen ihrer ursprünglichen Funktionalität (über \restoredescription
) zur Verfügung.
Antwort2
Wenn Sie sich komplett verstecken möchtenalle description
Umgebungen können Sie einfach die description
Umgebung neu definieren, um alles in ihrem Körper zu ignorieren überDas environ
Paket. Mit : erhalten Sie also \RenewEnviron{description}{}{}
:
\item
Wenn Sie die Beschriftungen der Umgebungen weiterhin möchten description
, können Sie die answer
Umgebung auf die gleiche Weise ausblenden \RenewEnviron{answer}{}
:
Anschließend ansers
können Sie bei Bedarf Folgendes \NewEnviron{answer}{\BODY}
erhalten:
Code: description
Umgebung ausblenden
\documentclass[]{article}
\usepackage{environ}
\usepackage{comment}
%\excludecomment{answer}
\includecomment{answer}
\RenewEnviron{description}{}{}
\begin{document}
Some text before.
\begin{description}
\item[A]
\begin{answer}
Answer A
\end{answer}
\item[B]
\begin{answer}
Answer B
\end{answer}
\end{description}
Some text after.
\end{document}
Code: answer
Umgebung ausblenden
\documentclass[]{article}
\usepackage{environ}
\NewEnviron{answer}{}% <--- Use this to hide the answer environment
%\NewEnviron{answer}{\BODY}% <--- Use this if you want the answer environment
\begin{document}
Some text before.
\begin{description}
\item[A]
\begin{answer}
Answer A
\end{answer}
\item[B]
\begin{answer}
Answer B
\end{answer}
\end{description}
Some text after.
\end{document}
Antwort3
Sie können problemlos zwischen verschiedenen Definitionen eines Befehls wechseln, ein % hinzufügen und ein anderes löschen. Ich mache das häufig, um das Layout zu ändern. Stellen Sie sich Ihr Tex-Dokument als eine Art Datenbank vor, in der so viele Formatierungsinformationen wie möglich im Header gespeichert sind.
\documentclass[]{article}
%\newcommand*{\thing}[2]{\item[#1] #2}
\newcommand*{\thing}[2]{\item[#1]}
\begin{document}
\begin{description}
\thing{A}{A}
\thing{B}{B}
\end{description}
\end{document}
Antwort4
Dabei wird die Tatsache ausgenutzt, dass in einemdescription
einemhatum das optionale Argument anzugeben. Es ist ohnehin besser, persönlichen Umgebungen einen anderen Namen als der allgemeinen zu geben, also habe ich eine answers
Umgebung definiert; jedes Element wird durch eingeleitet \answer
.
\documentclass{article}
\usepackage{environ}
\newif\ifshowanswers
%\showanswerstrue % uncomment for showing answers
\NewEnviron{answers}{%
\begin{description}
\ifshowanswers
\let\answer\item
\BODY
\else
\expandafter\processitems\BODY\answer\processitems
\fi
\end{description}
}
\makeatletter
\long\def\processitems\answer[#1]#2\answer#3\processitems{%
\item[#1]%
\if\relax\detokenize{#3}\relax
\expandafter\@gobble
\else
\expandafter\@firstofone
\fi
{\processitems\answer#3\processitems}% restart the recursion
}
\begin{document}
\begin{answers}
\answer[A] Discard answer text A
\answer[B] Discard answer text B
\end{answers}
% this is by way of example
\showanswerstrue
\begin{answers}
\answer[A] Discard answer text A
\answer[B] Discard answer text B
\end{answers}
\end{document}