有条件地显示列表

有条件地显示列表

我正在编写一个用于在学校创建练习表和考试的文档类。为此,我创建了一个布尔变量\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}

相关内容