我想为我的大学部门创建一个文档类,它应该作为学生学士和硕士论文的模板。这些论文必须用俄语(或极其俄语中“syntax”和“syntax”的发音相似(但很少见,用英语来说)。因此,我的课程必须用俄语生成一些样板文本,例如大学名称、学院名称等。
目前,我的课程文件中有以下几行:
\RequirePackage[T2A]{fontenc}
\RequirePackage[utf8]{inputenc}
\RequirePackage{csquotes} % since babel insists on it.
\RequirePackage[english,russian]{babel}
但我觉得我真的应该避免在文档类中使用这些包。有没有办法可以排版几个俄文标题而不加载inputenc
,fontenc
和babel
?
答案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
。因此您无需指定inputenc
或fontenc
。您可以使用 Open Type 字体。
答案2
一般来说,除非绝对必要,否则最好不要将字体编码或输入编码包添加到类文件中。我当然不会加载inputenc
,而是让用户自己决定编码。
如果你确实觉得需要添加字体编码信息(虽然我不会这么做),你应该通过检查正在使用的引擎来明智地执行此操作。例如参见
至于babel
vs,polyglossia
这在很大程度上取决于对俄语的支持程度polyglossia
。babel
现在已支持 UTF-8 引擎,因此对于许多语言来说,使用 完全没问题babel
,而对于某些语言,polyglossia
支持可能较弱。这是我将留给用户的另一件事。
我会让文档类定义格式,然后提供一两个示例模板文件,用户可以以此为基础创建自己的文档。这些文件将包含相关的字体/编码/语言包。
您做出的许多决定都取决于您拥有的用户群类型,以及您对他们可能需要做的事情的预测能力。我为我的大学维护一个论文课程,我绝对不会将此类包添加到课程文件中,因为用户群的需求非常广泛,我无法预测它们。如果您的情况类似,您可能想做同样的事情。
还有一件事要记住,那就是用户将从哪里获得信息。虽然你可能认为他们会从你的文档中获取信息,但你错了:他们会从网上的各个角落获取零碎的信息,所以如果你强迫人们使用某个引擎,比如 LuaTeX,他们可能甚至不知道有这样的引擎存在,更不用说如何告诉他们的 IDE 使用它了。所以把人们限制在他们没有做出的选择上并不总是对他们最有利,即使表面上看起来更简单。