-
Notifications
You must be signed in to change notification settings - Fork 407
LaTeX 模板开发最佳实践
模板的主要目的,是为常见文档组件提供一套定制的样式。不要期待模板面面俱到,不常见的文档组件(例如伪代码排版)应由用户通过调用宏包自行实现。可参考 IEEEtran
的做法。
-
尽量使用 latex2e 风格的命令,如 counter 相关的、length 相关的、h/vspace 相关的。若非必要,不使用 tex 风格的命令和赋值方式。若非必要,不混用两种风格的命令,如一会儿
\hspace
一会儿\hskip
-
了解空格的各种产生方式,注释源码中的多余空格
-
不滥用
\nobreakspace
,即~
-
区分带参数与不带参数的命令,区分改变状态与制造输出的命令。
-
改变状态的命令,其作用范围为插入位置到当前分组结束之前。要防止作用域「溢出」
-
不要在模板内重复加载同一个宏包。不要在模板和示例文档中分别加载同一个宏包。
-
调整样式尽量通过宏包功能来实现。
- 尽可能避免手动重定义基础命令,例如
\chapter
、\section
。 - 如果觉得需要定义新命令来「抽象」基础命令,例如
\newcommand\myChapter[1]{\chapter{附录:#1}}
,保持谨慎,寻求帮助。通常都有更好的实现方式。
- 尽可能避免手动重定义基础命令,例如
-
如果有大段复制粘贴的代码,建议在这段代码附近附上来源,方便后续维护。
-
除非必要,不使用 LaTeX 2.09 风格的字体切换命令,例如
\rm
,\bf
等 -
在切换字体之前,推荐使用
\normalfont
把字体恢复到\rmfamily
。类似的命令还有\normalsize
-
谨慎使用
\songti
、\heiti
等只作用于 CJK 文字的命令,它们不会修改西文字体。推荐使用\rmfamily
,\sffamily
等命令,使西文与中文字体的风格保持一致。 -
在了解它们的初始定义之前,不要直接修改
\large
,\small
等命令的定义 -
修改行距:推荐使用
setspace/zhlineskip
宏包和\linespread
,可以接受修改\baselinestretch
,一定不要直接修改\baselineskip
-
\linespread{...}
和\fontsize{...}{...}
后面一定要跟\selectfont
-
控制示例文档中字体和字号切换命令的使用频次。它们应该隐藏在模板内部,不应该被模板用户(频繁)直接使用。
模板应提供用户文档。用户文档的形式自由,推荐包含以下内容
-
问题的反馈方式,包括但不限于维护者的联系方式、模板的在线托管地址等。
建议推荐几个问答社区,方便用户寻求解答。 -
模板适用的操作系统和编译方式。
- 如果编译时需要使用选项
-shell-escape
,应特别说明 - 如果提供了操作系统相关的辅助编译工具,如
Makefile
,应特别说明 - 对写在
tex
文件开头的 magic comment,不同编辑器的支持情况不同,不建议仅通过 magic comment 指定编译方式和选项。建议在用户文档中明确说明。
- 如果编译时需要使用选项
-
模板定义的新命令的用法,模板修改过的既有命令的新用法或新效果
-
使用模板应遵循的文件结构,通常包括子文件的默认路径、图片和其他文件的默认路径等
文件结构可以在用户文档里通过文字说明,也可以在(随模板一起分发的)示例文档里通过实践体现 -
如果使用了 CTAN 未收录的功能性宏包,建议提供获取方式,并在文档中特别说明。可选将这类依赖随模板一起分发
-
如果使用了操作系统不预装的字体,建议单独说明。如果该字体是免费可获取的,建议列出获取方式,并提示授权使用范围。