Скрытие части описания элемента в среде описания

Скрытие части описания элемента в среде описания

Как можно скрыть/отобразитьвсеописания в 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}

введите описание изображения здесь

Связанный контент