背景:我是一名大学讲师,因此每当我准备新学期时,我都会面临同样的任务。其中一项任务是使用 LaTeX 创建课程材料,其中包括教学大纲、每次会议的幻灯片、参考书目以及我在教学时使用的笔记(包含每节课的时间表、教学目标等)。现在我总是将这些文档创建为单个文件;我可以使用上一学期的文档作为模板,但我必须至少替换一次每种文档类型的所有信息。这就是我想出启发我的问题的想法的原因:
是否有可能拥有某种包含相关元数据的主文档,我可以从其他文档中访问这些数据(例如,使用带有标题的模板为每个课程创建一个 beamer 文档,将课程大纲文档中的简短书目参考扩展为基于主文档中文本列表的完整条目)?我不是在谈论整个文件的导入/导出,而是选择特定的行/段落并根据例程/模板复制它们/从中创建新文档。我考虑过使用 Python 的解决方法,但首先想看看是否可以完全使用 LaTeX 来完成。
编辑/附录:举个例子:我用纸笔规划课程。当我准备创建文档时,我总是从课程大纲开始。它包含标题、日期、简要说明、参考书目、课程本身的信息等。然后我为每个课程创建笔记和幻灯片。在那里,我至少两次复制课程大纲中的一些信息(例如标题、日期、书目数据)。我正在寻找一种方法,让我可以创建一个主文档,我将这些信息存储一次,以便我可以生成笔记、幻灯片等。
答案1
这是宏是最有帮助的。
一种方法是创建一个主文件,其中包含保存在宏定义中的样板文本,然后从特定应用程序的文件中调用这些宏。因此,您有一个文件,它定义了诸如\NewDocumentCommand{\myname}{}{Prof. Jane Doe, PhD}
和 之类的命令,在您的课程大纲文件中,您可以\input
在主文件的序言中写入\myname
。当我使用这种方法时重复需要相同的文本,例如大学要求在每个课程大纲中都包含的学分政策的股票报表。只需添加\creditHourPolicy
即可。
另一种方法是创建一个包含虚拟命令的主文件,然后在特定应用程序中重新定义这些命令。因此,主文件具有整个文档结构,但包含占位符命令,例如,
\NewDocumentCommand{\courseInfo}{}{%
\begin{tabular}{@{}l}
\courseName \\
\courseSemester \\
\courseCredits \\
\end{tabular}
}
然后在本课程大纲的文件中,你只需定义这些命令,或者重新定义它们:\NewDocumentCommand{\courseName}{}{\LaTeX{} 101}
当我反复需要格式相同,但内容不同(与\maketitle
设置方式类似)。
比选项 #2 更好的是创建带有变量文本参数的命令并将它们放在类或包文件中.然后你有这个:
% Table of course info. Arguments:
% #1 course name
% #2 course semester
% #3 course credit hours (optional: default 4.0)
\NewDocumentCommand{\courseInfo}{m m O{4.0}}{%
\begin{tabular}{@{}l}
#1\\
#2\\
#3\\
\end{tabular}
}
然后在教学大纲中写下
\courseInfo{\LaTeX{} 101}{Fall 2022}[3.0]
您也可以组合使用这些方法。只需确保在使用命令之前输入包含定义的文件即可。
答案2
或许https://texfaq.org/FAQ-conditional有帮助吗?除了 Python 脚本之外,还可以使用 Makefile,它提供了另一种方法来指定生成输出时的依赖项,如果您还需要生成书目参考资料,这可能会有所帮助。