衬线和旧式数字的上下文混合

衬线和旧式数字的上下文混合

我正在开发一门适合学术人士和非学术人士需求的课程;后者通常需要书写清晰易读的非数学数字(它们可能是价格、参考编号、日期等)。

为此,字体的选择非常有限——我们需要一种免费的老式字体,尽可能多地包含字母,至少包括所有拉丁扩展字母和希腊字母(一些中世纪字母是不错的选择)。它还需要相当 XeLaTeX 和复制粘贴友好。我选择了 Junicode(尽管我愿意接受建议)。

问题是 Junicode 的旧式1看起来就像小写的I,因此它适用于学术和一般的页面设计,但不适用于非学术文档的内容。开发人员最近似乎不太活跃——我们要求提供替代的旧式1。我当前的解决方案是创建一个选项(学术与其他),影响整个文档的旧式数字功能。

还有哪些解决方案可以让我以干净、微妙(上下文)的方式切换数字?

  • 通过在整个文档中使用不同的数字集(我尝试了几种改变的解决方案catcodes,但脚注却无法上标)。请参阅下面的代码。
  • 通过在非学术文档上切换到内衬数字,但仅限于用户之后直接输入的文本\begin{document}(除非另有说明,否则不是类定义的宏)。
  • 通过使用改变字体的特定命令(这个很容易实现,所以问题是:什么是明智、符合人体工程学和用户友好的方式来做到这一点,否则对于最终用户来说额外的麻烦是不值得的)。
  • 我并不想调整字体本身,因为我们的想法是发布类别(但另一种兼容的字体也可以)。
  • 或者您能想到的任何其他事情。

我的第一次尝试如下。它工作得很好,除了\textsuperscript数字在基线上设置为正常大小(例如 \footnotemark) — 我怀疑这种技巧在包含参考书目、索引等的长文档或复杂文档中使用时会导致其他问题。

\RequirePackage{fontspec}
\setmainfont[Numbers=OldStyle]{Junicode}

\newfontfamily\numbersfont[Scale=MatchLowercase]{Georgia}

\XeTeXinterchartokenstate = 1
\newXeTeXintercharclass\charnumbers
\XeTeXcharclass`0=\charnumbers
\XeTeXcharclass`1=\charnumbers
\XeTeXcharclass`2=\charnumbers
\XeTeXcharclass`3=\charnumbers
\XeTeXcharclass`4=\charnumbers
\XeTeXcharclass`5=\charnumbers
\XeTeXcharclass`6=\charnumbers
\XeTeXcharclass`7=\charnumbers
\XeTeXcharclass`8=\charnumbers
\XeTeXcharclass`9=\charnumbers

\XeTeXinterchartoks 0 \charnumbers = {\begingroup\numbersfont}
\XeTeXinterchartoks 255 \charnumbers = {\begingroup\numbersfont}
\XeTeXinterchartoks \charnumbers 0 = {\endgroup}
\XeTeXinterchartoks \charnumbers 255 = {\endgroup}

有谁有办法解决这个问题,或者提供一个不需要最终用户做太多工作的替代解决方案?(如上所述。)

相关内容