更改序数词 (\the…) 和相关字符串的格式

更改序数词 (\the…) 和相关字符串的格式

我开发了一个软件包,用于改进 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类似宏的线索:

  • fmtcount相当复杂,包括多种语言选项
  • nth简单得多
  • engord比更复杂,nth但没有语言支持fmtcount

实际上没有那么多\the...命令需要重新定义,而且像titlesec可以帮助自动化一些重新定义......

相关内容