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 \newif
para controlar si la solución debería incluirse o no. Eso funcionó bien hasta que necesito unlstlisting
entorno o un verbatim
entorno 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 solution
en 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 comment
paquete. 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.