如何使用相同的 Context tex 源创建两个不同的 PDF

如何使用相同的 Context tex 源创建两个不同的 PDF

是否可以在 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)!

我可能有什么地方犯了错误?

相关内容