将练习大纲写入文本文件

将练习大纲写入文本文件

我有一份使用该软件包的文档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

相关内容