我正在写一本教科书,并选择在正文中输入练习。解决方案以 [解决方案] 模式输入。我想设置一些东西,以便我可以编译文本+练习或所有练习+解决方案。有没有办法只处理 a 之间的文本\startmode[solution]...\stopmode
并忽略其余部分?
我希望能够编写练习列表(单独),或整本教科书(不带解决方案),或练习 + 解决方案列表。有没有办法做到这一点而不用\startnotmode[exercise, solution]...\stopnotmode
到处添加?
我尝试定义一个before={\stopnotmode\startmode[exercise]}, after={\stopmode\startnotmode[exercise]}
,但没有成功(似乎在exercise
模式下“after”被忽略了。这是一个 MWE
\defineenumeration[exercise][alternative=serried, ]
\enablemode[solution, exercise]
\starttext
\startchapter[title={Title not displayed in solutions}]
\dorecurse{3}{
\startmode[solution] \subject{Solutions} \stopmode
Text that is not displayed when 'solution' mode is enabled.
\startexercise my exercise is always processed \stopexercise
\startmode[solution] my solution \stopmode
}
\stopchapter
\stoptext
感谢 Wolfgang,我得到了类似下面的内容。
\defineenumeration [exercise] [alternative=serried]
\defineblock [solution]
\defineblock [exercise]
\defineblock [text]
\enablemode [exercises]
\startmode [solution]
\hideblocks [text]
\keepblocks [solution]
\keepblocks [exercise]
\stopmode
\startmode [text]
\keepblocks [text]
\keepblocks [exercise]
\hideblocks [solution]
\stopmode
\startmode [exercises]
\hideblocks [text]
\keepblocks [exercise]
\hideblocks [solution]
\stopmode
\starttext
\begintext
\startchapter [title={Title not displayed in solutions}]
\endtext
\beginsolution \chapter{Solutions} \endsolution
\startbuffer
\begintext my supertext between exercises \endtext
\beginexercise\startexercise my exercise \stopexercise\endexercise
\beginsolution my solution \endsolution
\stopbuffer
\dorecurse{3}{\getbuffer}
\begintext
\stopchapter
\endtext
\stoptext
这可行,但我需要更简单的语法,可以集成到我的定义中,因为最终产品将长约 300 到 400 页。感谢您的帮助。
答案1
您可以使用该block
机制隐藏或显示文档中的某些文本块。为避免与其他环境块命令的名称冲突,其形式为\begin...
和\end...
,默认配置是隐藏其内容。
在下面的例子中,我使用了您的solution
模式来隐藏或显示我在文档开始处创建的两个块。
\defineenumeration [exercise] [alternative=serried]
\defineblock [solution]
\defineblock [exercise]
\enablemode [solution]
\startmode [solution]
\keepblocks [solution]
\hideblocks [exercise]
\stopmode
\startnotmode [solution]
\keepblocks [exercise]
\hideblocks [solution]
\stopnotmode
\starttext
\startchapter [title={Title not displayed in solutions}]
\startbuffer
\beginsolution \subject{Solutions} \endsolution
\beginexercise Text that is not displayed when 'solution' mode is enabled. \endexercise
\startexercise my exercise is always processed \stopexercise
\beginsolution my solution \endsolution
\stopbuffer
\dorecurse{3}{\getbuffer}
\stopchapter
\stoptext
启用该模式后,solution
您可以从上面的示例中获得以下结果。
当您禁用该solution
模式(可以通过注释该\enablemode
行来完成)时,您将获得以下输出。
编辑
某些环境enumerations
可以通过创建一个具有相同名称的命令来隐藏buffer
,该命令会重新定义命令。然后环境的内容将被存储,但永远不会放回到文档中。
\defineenumeration [exercise] [alternative=serried]
\startnotmode [solution]
\definebuffer [exercise]
\stopnotmode
\starttext
\subject{Solutions}
\startexercise my exercise is always processed \stopexercise
\stoptext