按组打印带代码的问题

按组打印带代码的问题

我想写一个文档,其中包含一些问题,这些问题包含代码片段(在minted环境中),分为两组(比如A, 与A≠ ∅),以及它们的解决方案。我希望能够输出(例如,通过更改开关的值):

  • 包含问题的文件A
  • 包含问题的文件
  • 包含问题的文件A以及解决方案。

我尝试了exam类和exsheets包,但找不到简单的解决方案。

是否存在我不知道的其他替代方案,或者是否可以解决下面提到的某个问题?

随着exam班级

本课程不提供“按组打印”功能。有一个解决方法,参见。https://tex.stackexchange.com/a/345651/34551,但与环境不一致minted! FancyVerb Error):

% !TeX TXS-program:compile = txs:///pdflatex/[--shell-escape]

\documentclass{exam}
\usepackage{minted}
\usepackage{xstring}% overkill


\newcommand{\SKey}{,,}% default

\newcommand{\selectkey}[1]% #1 = key to be used to select questions
{\xdef\SKey{,#1,}}

\newcommand{\selectquestion}[2]% #1 = comma delimited list of keys, #2 is the question (in braces)
{\IfStrEq{\SKey}{,,}{\question #2}{\IfSubStr{,#1,}{\SKey}{\question #2}{}}}

\begin{document}
\selectkey{2002}% only print questions with 2002 in list
\begin{questions}
\selectquestion{2002,1996}{
    \begin{minted}{csharp}
    int myAge;
    Console.WriteLine("Please enter your age:");
    \end{minted}
}
\selectquestion{1996}{This is question 2.}
\end{questions}

\end{document}

我想有一个解决方法,就是回到“原始”语法,就像在https://tex.stackexchange.com/a/78688/34551,但对每个问题都进行这样的构造似乎很麻烦。

随附exsheets包装

exsheet提供了一种模块化打印问题的好方法,但在处理代码方面不太好。自从exsheets-listings开发以来,就有一种方法可以在question环境中包含代码。在我看来,这个解决方案有两个很大的局限性:

  1. 它使用listing包(我知道争论仍在继续minted 与 listings:优点与缺点,但我还是想坚持minted

  2. 包含由一些文本分隔的两段代码是一场噩梦。的prepost选项lstquestions提供了一定的灵活性,但据我所知,在问题中使用“文本/代码/文本/代码”模式是不可能的。

答案1

事实证明,这个xsim包裹正是我想要的。

% !TeX TXS-program:compile = txs:///pdflatex/[--shell-escape]

\documentclass{article}
\usepackage{minted}
\usepackage{xsim}
\xsimsetup{
solution/print = true,
% tags = A,
tags = {A, B}
% tags = B
}

\begin{document}

\begin{exercise}[tags={A, B}]
\begin{minted}{csharp}
int a, b;
\end{minted}
\end{exercise}

\begin{solution}
    Yop
\end{solution}


\begin{exercise}[tags={B}]
\begin{minted}{csharp}
int b;
\end{minted}
\end{exercise}

\begin{solution}
    Yop
\end{solution}


\begin{exercise}[tags={A}]
\begin{minted}{csharp}
int a;
\end{minted}
\end{exercise}

\begin{solution}
    Yop
\end{solution}

\end{document}

通过注释掉/取消注释

\xsimsetup{
solution/print = true,
% tags = A,
tags = {A, B}
% tags = B
}

我可以实现我想要的所有变化,并继续使用minted

相关内容