我想写一个文档,其中包含一些问题,这些问题包含代码片段(在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
环境中包含代码。在我看来,这个解决方案有两个很大的局限性:
它使用
listing
包(我知道争论仍在继续minted 与 listings:优点与缺点,但我还是想坚持minted
)包含由一些文本分隔的两段代码是一场噩梦。的
pre
和post
选项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
。