Чтобы облегчить себе жизнь, я хочу создать лист упражнений для лекции, включающий соответствующие решения. Поэтому я определил \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}
, они будут показаны.