Как можно скрыть/отобразитьвсеописания в description
среде одновременно.
\documentclass[]{article}
\begin{document}
\begin{description}
\item[Keep This] Discard This
\item[Keep This] Discard This
\end{description}
\end{document}
решение1
Одним из вариантов было бы переопределить способ description
работы, охватив все его\item[<stuff>]
содержание и проигнорироваввсеelse. Этот метод «поймай и отпусти» возможен посредством локального переопределения \item
и помещения всей среды в коробку. Таким образом, вещи не устанавливаются на странице, но вы можете обрабатывать среду.
Приведенное выше краткое обсуждение реализовано ниже:
\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}
Предусмотрены переключатели для удаления description
контента (через \discarddescription
) и восстановления его первоначальной функциональности (через \restoredescription
).
решение2
Если вы хотите полностью скрытьвсе description
среды вы можете просто переопределить description
среду, чтобы игнорировать все в ее теле черезпакетenviron
. Так что с \RenewEnviron{description}{}{}
: вы получаете:
Если вы по-прежнему хотите \item
видеть метки description
окружения, то вы можете скрыть answer
окружение таким же образом с помощью \RenewEnviron{answer}{}
:
Затем, когда вы захотите, ansers
вы можете использовать \NewEnviron{answer}{\BODY}
для получения:
Код: Скрыть description
среду
\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}
Код: Скрыть answer
среду
\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}
решение3
Вы можете легко переключаться между различными определениями команды, добавляя % и удаляя еще одно. Я часто так делаю, чтобы изменить макет. Думайте о вашем tex-документе как о своего рода базе данных, сохраняющей как можно больше информации о форматировании в заголовке.
\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}
решение4
Это использует тот факт, что в description
одномимеетдля указания необязательного аргумента. В любом случае лучше дать персональным средам имя, отличное от общего, поэтому я определил среду answers
; каждый элемент представлен \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}