我是否应该避免在文档类中使用“inputenc”、“fontenc”和“babel”?

我是否应该避免在文档类中使用“inputenc”、“fontenc”和“babel”?

我想为我的大学部门创建一个文档类,它应该作为学生学士和硕士论文的模板。这些论文必须用俄语(或极其俄语中“syntax”和“syntax”的发音相似(但很少见,用英语来说)。因此,我的课程必须用俄语生成一些样板文本,例如大学名称、学院名称等。

目前,我的课程文件中有以下几行:

\RequirePackage[T2A]{fontenc}
\RequirePackage[utf8]{inputenc}
\RequirePackage{csquotes} % since babel insists on it.
\RequirePackage[english,russian]{babel}

但我觉得我真的应该避免在文档类中使用这些包。有没有办法可以排版几个俄文标题而不加载inputenc,fontencbabel

答案1

考虑到这种情况,您可以尝试以下方法:

创建一个文档类选项usermode(或者选择一些可以理解的内容)。

在类文件的早期阶段使用\newif \if@usermode。然后,如果用户选择[usermode]文档类选项,则设置\@usermodetrue

然后类文件会决定做什么:

\if@usermode
  \typeout{Reminder: You selected usermode document class option. %
  This requires you to specify encodings, and other packages. %
  Did you read the instructions?}
\else
  \RequirePackage[T2A]{fontenc} % and the others
\fi

提醒消息只会输入到日志文件中。如果学生没有阅读说明并向您抱怨,则可能有用。

现在,有一个潜在的问题。如果文档类加载了其他包,您可能需要先加载所需的包。然后,您不能等学生在序言中写好包。他们需要先去\documentclass

您还可以尝试使用\@ifpackageloaded来测试学生是否已加载inputenc其他内容。然后,提供任何缺少的包。

后记:您是否考虑过使用 LuaLaTeX 或 XeTeX?这些编译器始终使用 utf-8 编码,并附带软件包fontspec。因此您无需指定inputencfontenc。您可以使用 Open Type 字体。

答案2

一般来说,除非绝对必要,否则最好不要将字体编码或输入编码包添加到类文件中。我当然不会加载inputenc,而是让用户自己决定编码。

如果你确实觉得需要添加字体编码信息(虽然我不会这么做),你应该通过检查正在使用的引擎来明智地执行此操作。例如参见

至于babelvs,polyglossia这在很大程度上取决于对俄语的支持程度polyglossiababel现在已支持 UTF-8 引擎,因此对于许多语言来说,使用 完全没问题babel,而对于某些语言,polyglossia支持可能较弱。这是我将留给用户的另一件事。

我会让文档类定义格式,然后提供一两个示例模板文件,用户可以以此为基础创建自己的文档。这些文件将包含相关的字体/编码/语言包。

您做出的许多决定都取决于您拥有的用户群类型,以及您对他们可能需要做的事情的预测能力。我为我的大学维护一个论文课程,我绝对不会将此类包添加到课程文件中,因为用户群的需求非常广泛,我无法预测它们。如果您的情况类似,您可能想做同样的事情。

还有一件事要记住,那就是用户将从哪里获得信息。虽然你可能认为他们会从你的文档中获取信息,但你错了:他们会从网上的各个角落获取零碎的信息,所以如果你强迫人们使用某个引擎,比如 LuaTeX,他们可能甚至不知道有这样的引擎存在,更不用说如何告诉他们的 IDE 使用它了。所以把人们限制在他们没有做出的选择上并不总是对他们最有利,即使表面上看起来更简单。

相关内容