![一些背景信息](https://linux22.com/image/355687/%E4%B8%80%E4%BA%9B%E8%83%8C%E6%99%AF%E4%BF%A1%E6%81%AF.png)
让我直接说吧:在编写新的文档类时,我应该加载fontspec
其他需要 LuaLaTeX 和 XeLaTeX 的包吗?
一些背景信息
大约 10 年前,当我学习使用 LaTeX 时,我被告知要使用转义码(例如\^{a}
-like 命令)来书写变音符号。很快我就发现这已经过时了,而且这已经\usepackage[utf8]{inputenc}
解决了这个问题。
大多数 LaTeX 介绍都不会告诉你有关 LuaLaTeX 或 XeLaTeX 的信息,即使有,他们也会将其视为非标准解决方案。在我看来,情况不应该如此。在我的母语葡萄牙语中,我们有一些不属于 ASCII 的字符,但经常使用。因此,在教新手学习 LaTeX 时,我总是告诉他们使用 Lua 或 XeLaTeX。
但是,我从未教过如何编写 LaTeX 文档类。我想教我的学生最佳实践,所以我想知道社区对这个话题的看法。
答案1
类和包通常应该与引擎/字体/编码无关
我认为这里忽略了一些东西。总的来说,除非绝对需要,否则类和包都不应该对字体、输入编码或引擎做出任何假设;这几乎总是应该留给文档级别。类通常用于设置某些特定的文档类型:页面布局、章节标题等。包通常会向任何类别的文档添加特定功能。当然,这个一般规则也有例外(请参阅下面的一些示例)。两者都不需要假设字体或引擎的属性。
类似地,类和包不应该假设正在使用某种特定的语言,因此也应该将加载留给babel
用户polyglossia
。
教学生使用 XeLaTeX 或 LuaLaTeX 作为日常文档的主要引擎(这确实使字体处理更容易)是一回事,但教他们编写的类或包应该包含引擎相关代码则完全是另一回事。这是在教他们坏习惯。
什么时候类或包可能需要引擎特异性
显然,在某些时候,类或包假设引擎或字体设置是有意义的。
- 需要 Lua 代码且只能使用 LuaTeX 运行的软件包
- 需要 XeTeX 特定功能的软件包(例如
XeTeXinterchartoks
) - 使用指定字体重现特定形式的类
这些都是非常专业的用途,并且不太可能是初学者会做的事情。