我有一份使用该软件包的文档exercise
。我想生成一个包含练习和问题大纲的辅助文件。该文件稍后将由外部工具处理。
我希望我的辅助文件每行包含一个练习和问题。练习行应包含选项的内容title
,问题行应包含可选标签。像这样。
Exercise 1: \textit{(Bonus)} Solving sudokus
Q1: solve
Q2: prog
这是一个最小且基本可以工作的示例。
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{exercise}
\AtBeginDocument{
\newwrite\exerciseoutline
\immediate\openout\exerciseoutline=\jobname.exo
}
\AtEndDocument{
\immediate\closeout\exerciseoutline
}
\let\Questionorig=\Question
\renewcommand\Question[2][]{
\Questionorig{#2}\immediate\write\exerciseoutline{Q\theQuestion : #1}
}
\renewcommand\AtBeginExercise{
\immediate\write\exerciseoutline{\ExerciseName \ExerciseHeaderNB : \ExerciseTitle}
}
\begin{document}
\begin{Exercise}[title=\textit{(Bonus)} Solving sudokus]
\Question[solve]{Solve a sudoku}
\Question[prog]{Write a program that solves a sudoku}
\end{Exercise}
\end{document}
我的例子有两个问题。
首先,我没有找到在文件的内容\ExerciseName
和之间放置空格的方法。\ExerciseHeaderNB
其次,当练习标题包含某些格式时(例如在包含的示例中)\textit{(Bonus)}
,它会失败并出现以下错误:
! Argument of \@no@pgbk has an extra }.
<inserted text>
\par
l.24 ...e}[title=\textit{(Bonus)} Solving sudokus]
我认为处理此问题最常用的方法是将未解释的 LaTeX 格式命令放入文件中。但如果更简单,我也会接受一个答案,即简单地删除所有 LaTeX 命令并仅写入文本部分(Bonus) Solving sudokus
。
答案1
也许您可以使用 LaTeX 2ε-kernel-macros\@starttoc
和\addtocontents
:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{exercise}
% \AfterLastShipout from atveryend is needed with older
% LaTeX-distributions.
% With up-to-date LaTeX-distributions atveryend is just a
% compatibility-wrapper for using new LaTeX 2e-kernel-
% "infrastructure", doing \AddToHook{enddocument/afterlastpage}.
\usepackage{atveryend}
\makeatletter
\AfterLastShipout{%
\begingroup
\let\@input\@gobble
\@starttoc{exo}%
\endgroup
}%
\@ifdefinable\Questionorig{\let\Questionorig=\Question}%
\makeatother
\renewcommand\Question[2][]{%
\Questionorig{#2}%
\addtocontents{exo}{Q\theQuestion : #1}%
}%
\renewcommand\AtBeginExercise{%
\addtocontents{exo}{\ExerciseName\space\ExerciseHeaderNB : \ExerciseTitle}%
}%
\begin{document}
\begin{Exercise}[title=\textit{(Bonus)} Solving sudokus]
\Question[solve]{Solve a sudoku}
\Question[prog]{Write a program that solves a sudoku}
\end{Exercise}
\end{document}
您将获得以下 .pdf 输出:
您将获得以下.exo 文件:
Exercise 1: \textit {(Bonus)} Solving sudokus
Q1: solve
Q2: prog