有些语言,例如葡萄牙语,其序数词(阳性和阴性)总是应该加下划线。大约一半的字体不提供带下划线的序数词,因此 LaTeX 必须自行解决该问题。
我知道有几种输入序数的方法:
- 使用纯 UTF-8 文本:ª 和 º
- 命令
\textordmasculine
和\textordfeminine
包textcomp
\ordinalnum{}
使用包中的命令fmtcount
以及一些类似的基本内容$10^{\underline{\,\,\text o}}$
,不可能被认为是——适当的。
\documentclass{article}
\usepackage{polyglossia}
\setmainlanguage{portuges}
\usepackage{textcomp}
\usepackage{fmtcount}
\RequirePackage{fontspec}
%\setmainfont[Ligatures=TeX]{TeX Gyre Termes}
\setmainfont{Times New Roman}
\begin{document}
1º = 1\textordmasculine{} = \ordinalnum{1}
2ª = 2\textordfeminine{} = \ordinalnum{2}[f]
\end{document}
在上述所有选项中,选择始终取决于手头的字体,即使您使用Babel
或Polyglossia
设置语言,也不会对其进行下划线。而且很可能在 LaTeX 中无法做到这一点,因为每种字体的字符粗细和长度都不同。
使用不带下划线的字体相当容易,例如Times New Roman
,只复制序数字符并构建一个伴侣具有适当大小和距离的下划线的字体。
假设我将这种新的双字符字体称为“TNR 下划线数字伴侣”。有没有办法让上述三种输入类型使用伴侣字体中的替代字符?
答案1
我相信这是留给字体设计师的功能,他们可以自由选择是否为字形添加下划线。
如果您的字体没有下划线,您可以用带下划线的上标字形代替。在下面的代码中,我测试了 U+0331 COMBINING MACRON BELOW 是否存在,以便产生更好的输出;如果当前字体中不存在,则使用下划线。
\documentclass{article}
%\usepackage{fontspec} % already loaded by polyglossia
\usepackage{polyglossia}
\usepackage{newunicodechar}
\setmainlanguage{portuges}
%\setmainfont[Ligatures=TeX]{TeX Gyre Termes}
\setmainfont{Times New Roman}
\newunicodechar{º}{\textsuperscript{\ordinalwithunderline{o}}}
\newunicodechar{ª}{\textsuperscript{\ordinalwithunderline{a}}}
\newcommand{\ordinalwithunderline}[1]{%
\iffontchar\font"0331 #1^^^^0331\else\underline{#1}\fi
}
\begin{document}
1º
2ª
\end{document}
如果您的主字体恰好在字形下划线,只需注释掉这两\newunicodechar
行。
答案2
已经有很好的答案不需要您制作新的字体,但是您提出的问题也值得回答。
一种方法是创建一个 Nimbus Roman 或 TeX Gyre Termes 的新分支,并添加下划线序号。这可以作为样式集、样式替代、字符变体或 OpenType 语言替代提供。
在您的解决方案中,如果您想创建一个新的配套字体,您可以执行以下操作:
\usepackage{fontspec, newunicodechar}
\setmainfont{Times New Roman}
\newfontfamily\numerofont{TNR Underlined-Numeral Companion}[Scale=MatchLowercase]
\renewcommand\textordfeminine{{\numerofont ª}}
\renewcommand\textordmasculine{{\numerofont º}}
\newunicodechar{ª}{\textordfeminine}
\newunicodechar{º}{\textordmasculine}
答案3
这不是对主要问题的回答,只是对上述哈维尔·贝佐斯问题的回答。
如果巴西人有法律要求人们在序数词下划线,我一点也不惊讶。他们臭名昭著文书工作者并且对一切事物都制定法律。至于葡萄牙人,情况也差不多,我们从他们那里抄袭了很多东西。
在美国,当有人提到一些不寻常的事情时,通常会发生这样一种闲聊:
There is a web-page for that ....
在巴西人们说:
There is a law for that ...
网上有几篇文章提到,在巴西这是法律规定,而在葡萄牙则是可选的。例如:维基百科和Adobe。
最有趣的是格式手册来自巴西参议院关于此事的裁决——它不符合所谓的法律——很可能是因为该网站的程序员不知道如何去做。
尽管如此,事实是,无论是否存在法律——它都是事实上在该国,人们已经习惯了这种用法,以至于没有下划线会让他们感到很奇怪。
以下三个例子来自该国三大报纸的头版,均来自今天(2020 年 10 月 31 日):环球报,叶页报和国家体育场。
这是 VOLP - Vocaulário Ortográfico da Língua Portuguesa 版权页的摘录。
带下划线数字的字体数量非常少,例如,在 Microsoft 基本字体集中,只有 Cambria 和 Courier 才有。这迫使巴西人为几乎所有内容寻找替代字体——就像上述两家报纸的情况一样。它还催生了一个盗版市场,用于修改 MS Word、InDesign、网页等字体和解决方案……
我只能强烈支持一个解决方案的提议,该方案将以干净的方式解决这个问题。理想情况下,我们应该为 Unicode 添加 4 个新点,特别是带下划线和不带下划线的“o”和“a”,但他们似乎对添加新表情符号更感兴趣……这样,字体设计师就可以自由地将其添加到他们的设计中,并且可以轻松地为字体添加补丁等……