Как скрыть среду Listings или Verbatim с помощью команды \newif enable

Как скрыть среду Listings или Verbatim с помощью команды \newif enable

Чтобы облегчить себе жизнь, я хочу создать лист упражнений для лекции, включающий соответствующие решения. Поэтому я определил \newifдля управления тем, должно ли решение быть включено или нет. Это работало нормально, пока мне не понадобился lstlistingили verbatimсреда в нем. Следующий код — минимальный пример для ошибки, он работает verbatimи с.

\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{listings}

\newif\ifsolution 
\solutionfalse

\ifsolution
\newcommand{\solution}[1]{#1}
\else
\newcommand{\solution}[1]{}
\fi

\begin{document}
This is always shown. 
\solution{The listing is only shown if ifsolution is true.
\begin{lstlisting}
 Test
\end{lstlisting}
}
\end{document}

Установка solutionв true приводит к ошибке. Как определить команду или среду с помощью этой функции?

решение1

Моя первая оценка была неверной, но как любезно заметил Гонсало

Дословный материал не может появляться в аргументе стандартных команд.

Решение, которое действительно работает, не требует использования каких-либо аргументов:

\ifsolution
\def\solution{\relax}
\else
\newcommand{\solution}[1]{}
\fi

Но вы также можете использовать commentпакет. Он предоставляет возможность легко определить определенную среду как comment.

\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{listings}

\usepackage{comment}
\excludecomment{solution}
%\includecomment{solution}

\begin{document}
This is always shown. 
\begin{solution}
    The listing is only shown if ifsolution is true.
\begin{lstlisting}
 Test
\end{lstlisting}
\end{solution}

\end{document}

Решения \excludecomment{solution}не будут показаны, а когда вы напишете \includecomment{solution}, они будут показаны.

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