是否可以在 Context 中制作具有相同源的 2 个(或更多)PDF?
例如,我想编写一本包含一些算法练习的小册子,以及一本用 Python(以及 Java、C#……)编写的解决方案的小册子。
例如
\section{First Exercise} %common title to all booklets
\startQuestion %only for "exercise" booklet
Write a program to get the software version you are using
\stopQuestion
\startPython %only for Python booklet
print (sys.version)
\stopPython
\startJava %only for Java booklet
…
\stopJava
\stoptext
我尝试过使用模式,但是没有用 :( Context Garden wiki 对此不是很清楚。
谢谢你的帮助:)
答案1
我不知道如何编译一个 tex 文件并从中获取多个 pdf 文件。如果您同意为每个设置编译一次,则以下方法有效:
\starttext
\section{First Exercise}
\startmode[Question,all]
Write a program to get the software version you are using.
\stopmode
\startmode[Python,all]
print (sys.version)
\stopmode
\startmode[Java,all]
...
\stopmode
\stoptext
尝试使用以下不同的选项进行编译:
- 没有任何选项(您应该只会获得章节标题)。
--mode=all
(你应该得到一切)--mode=Python
(您应该获得章节标题和 Python 部分)
当然,您可以编写一个小脚本,在启用不同模式的情况下进行多次编译。
答案2
您还可以使用doifmode
\def\Answers#1#2#3{
\doifmode{python}{#1}
\doifmode{java}{#2}
\doifmode{csharp}{#3}
}
\enablemode[java]
\Answers
{Python code}
{Java code}
{C# code}
我有时会使用doifnotmode
,这也非常有用。例如这里
\def\Answers#1#2#3#4{
\doifmode{python}{#1}
\doifmode{java}{#2}
\doifmode{csharp}{#3}
\doifnotmode{python, java, csharp}{\thinrules[color=darkgray, interlinespace=big, n=#4]}
}
\enablemode[test]
\Answers
{Python code}
{Java code}
{C# code}
{5} % displays 4 lines after the problem
答案3
我测试了您的示例。它有效,但是,当我像这样定义自己的命令时
\definestartstop[question][before={\startmode[question]}, after={\stopmode}]
\definetyping[python][before={\startmode[python]}, after={\stopmode}]
当我编译上述文档时,它们会打印整个文本,之前选择的任何模式!(--mode = python,--mode = question)!
我可能有什么地方犯了错误?