我正在编写一个用于在学校创建练习表和考试的文档类。为此,我创建了一个布尔变量\g_test_showresults_bool
,可用于有条件地显示练习的解决方案/结果,因此我可以为学生创建一个没有结果的文档,为我自己创建一个有结果的文档。
我已经为“普通”内容(文本、数学)创建了这样的环境,但我无法为列表创建这样的环境。我尝试了解释的解决方案这里但没有成功。我还发现了\lstnewenvironment
,但我不知道如何\g_test_showresults_bool
在这里包含我的布尔值。
这是我当前的模板。我还希望有一个宏而不是环境。
\documentclass{article}
\usepackage{xparse}
\usepackage{listings}
\ExplSyntaxOn
\bool_new:N \g_test_showresults_bool
\bool_set_eq:NN \g_test_showresult_bool \c_true_bool
\NewDocumentEnvironment { reslstlisting } { } {
}{
}
\ExplSyntaxOff
\begin{document}
% Display this listing only if \g_test_showresults_bool is true
\begin{reslstlisting}
float i;
i = i + 6;
\end{reslstlisting}
\end{document}
答案1
这是该手册的改编版本xsimverb
,可以为您完成这项工作。
\documentclass{article}
\usepackage{xsimverb,listings}
\makeatletter
\ExplSyntaxOn
\bool_new:N \g_test_showresults_bool
\bool_set_eq:NN \g_test_showresult_bool \c_true_bool
\NewDocumentEnvironment{reslstlisting}{}{%
\XSIMsetfilebegin{\@percentchar\space file `\jobname.tmp'}
\XSIMsetfileend{\@percentchar\space bye bye}
\XSIMfilewritestart{\jobname.tmp}
}{
\XSIMfilewritestop
\bool_if:NT \g_test_showresult_bool
{
\lstinputlisting[language={[LaTeX]TeX}]{\jobname.tmp}
}
}
\ExplSyntaxOff
\makeatother
\begin{document}
Listing:
\begin{reslstlisting}
bla bla \LaTeX
\end{reslstlisting}
\end{document}