Cómo ocultar un entorno de Listings o Verbatim usando el comando \newif enable

Cómo ocultar un entorno de Listings o Verbatim usando el comando \newif enable

Para hacer la vida más fácil, quiero crear una hoja de ejercicios para una conferencia que incluya las soluciones correspondientes. Por lo tanto, definí a \newifpara controlar si la solución debería incluirse o no. Eso funcionó bien hasta que necesito unlstlisting entorno o un verbatimentorno en él. El siguiente código es el ejemplo mínimo del error y también funciona 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}

Establecer solutionen verdadero produce el error. ¿Cómo puedo definir un comando o un entorno con esta función?

Respuesta1

Mi primera valoración fue errónea, pero como amablemente señaló Gonzalo.

El material textual no puede aparecer en el argumento de los comandos estándar.

Una solución que funciona es no utilizar ningún argumento:

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

Pero también puedes usar el commentpaquete. Proporciona la capacidad de definir fácilmente un determinado entorno como 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}

Con \excludecomment{solution}las soluciones no se mostrarán y cuando escribas.\includecomment{solution} , se mostrarán.

información relacionada