我开发了一个软件包,用于改进 LaTeX 对拉脱维亚语的支持。我在这里做的一件事是使用不同的风格来处理诸如第1章,定理 1.1等等。首先,这个短语的写法是序数. 第二,序数指标以句号的形式。根据这些规则,第1章变成1. 诺达拉,字面意思是第一章。因此,在包中我必须:
\@makechapterhead
在和等地方交换姓名和号码\@part
;- 使句号出现在打印或引用数字的任何地方,例如标题、
\ref
-s 等。
当然,我不仅想支持标准类,还想支持用户可能加载的包。我可以看到三种方法可以做到这一点:
方法 1:重新定义所有相关\the…
命令以包含句点,并\the…
在适当的位置交换和文本。
缺点:
- 这不是一个通用的解决方案——我们
\the…
手动将命令添加到列表中 - 对于每个要支持的新对象类型,可能需要最多两次重新定义 - 一次用于数字,一次用于宏排版标题/标题文本
- 当某些第三方包构建不以数字结尾的数字时,它可能会在中间以句号结尾 (图 1.a),这是错误的。通常,如果
\the…
我们不了解的宏尝试使用\the…
我们重新定义的宏,则输出可能会包含多余的句点。
方法 2:\arabic
通过修改宏来消除第一种方法的缺点 #1 和部分缺点 #2 \the…
。但这会在\arabic
使用 的所有地方产生一个句号,这意味着很有可能破坏其他地方的某些东西。
方法 3:不要直接更改数字格式,而是在排版数字的地方添加句点,例如图形/表格标题\@seccntformat
、、、\ref
。\numberline
优点:
- 输出值的地方数量
\the…
非常有限,并且软件包通常不会引入新方法来执行此操作。这看起来比重新定义所有\the…
命令要好。 - 但是,如果包中有自定义的数字排版位置,那么它很可能是新的标题(例如
amsthm
定义一个宏来输出定理 1)。但我们需要交换数字和文本,因此无论如何我们都必须更改新标题!当我们这样做时,我们不妨添加句点。因此,现在每个包(更准确地说,每个对象类型)只需重新定义一次就足够了。
缺点:
- 从现在开始
\ref
,\numberline
以及类似的东西必须添加句点,它们必须扩展和分析数字以判断它是否以数字结尾(我们不应该在数字后面加句点1a)。 - 语义不太清楚
目前我已经实现了方法 3。但我并不特别喜欢这个实现。另一方面,我也没有看到任何更方便的方法来实现目标。所以,问题是:第一段中指定的任务是否可以比所描述的解决方案做得更好?
答案1
看起来您想要做的是将数字格式从 更改为\arabic
当\latord
给\latord
定计数器作为输入时输出拉脱维亚风格的序数。从语义观点来看,最好的方法是\the...
按照您的建议 1 更改相关命令。
那是你可以用其他方法做(但要记住马丁关于重新定义的警告\arabic
),但如果你直接做你想做的事情,那么对于阅读你的代码的人来说,你在做什么会更清楚......
许多软件包可能会给你提供一些关于如何构建\latord
类似宏的线索:
实际上没有那么多\the...
命令需要重新定义,而且像titlesec
可以帮助自动化一些重新定义......