![我是否可以在不修改字体指标的情况下为“eV”声明一个新的自动字距?](https://linux22.com/image/477346/%E6%88%91%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E5%9C%A8%E4%B8%8D%E4%BF%AE%E6%94%B9%E5%AD%97%E4%BD%93%E6%8C%87%E6%A0%87%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E4%B8%BA%E2%80%9CeV%E2%80%9D%E5%A3%B0%E6%98%8E%E4%B8%80%E4%B8%AA%E6%96%B0%E7%9A%84%E8%87%AA%E5%8A%A8%E5%AD%97%E8%B7%9D%EF%BC%9F.png)
“eV”(电子伏特)单位及其变体(“MeV”、“GeV”、“TeV”等)在核物理学和粒子物理学中被广泛使用。默认情况下,Computer Modern 和其他常见的 TeX 字体不包含预定义的字距来将“e”和“V”拉近,大概是因为这种组合从未出现在“正常”书面语言中。
虽然所需的字距量是字体特定的,当然也可以定义\eV
宏等以在特定字体中使用,但许多物理学家并不这样做,因此最终导致他们的文档中的单位相当丑陋。甚至包也siunitx
没有用负字距定义其“eV”单位(因为字体特定性)。
为了使问题不那么明显,但不能完美地解决所有字体的问题,我想知道是否可以在 LaTeX 样式/类/序言中定义默认的 eV-negative-kern,以便在标准模板中编写的文档将“自动”获得比默认 eV kern 更好的效果,而无需用户修改字体指标?也许在 LuaTeX 中?
答案1
这在文本模式下有效
\XeTeXinterchartokenstate=1
\newXeTeXintercharclass \eclass
\newXeTeXintercharclass \Vclass
\XeTeXcharclass `\e \eclass
\XeTeXcharclass `\V \Vclass
\XeTeXinterchartoks \eclass \Vclass = {\kern-.15em}
这是siunitx
\eV
单位
\DeclareSIUnit\electronvolt{e\kern-.15em V}
MWE(使用 XeLaTeX 编译)
\documentclass{article}
\usepackage{fontspec}
\XeTeXinterchartokenstate=1
\newXeTeXintercharclass \eclass
\newXeTeXintercharclass \Vclass
\XeTeXcharclass `\e \eclass
\XeTeXcharclass `\V \Vclass
\XeTeXinterchartoks \eclass \Vclass = {\kern-.15em}
\usepackage{siunitx}
\DeclareSIUnit\electronvolt{e\kern-.15em V}
\begin{document}
eV
\SI{1}{\eV}
\end{document}
输出