据我了解,当 TeX 读取字形时,TeX 会将字形放入字符框中。它关注左侧边栏和右侧边栏,因此负侧边栏得到正确处理(正侧边栏也是如此)。字符框还有一个基线,它是从字体中获取的,还有一个深度和高度,它是从单个字形中获取的。
如何明确设置特定字形的深度和高度?这是一个示例程序,它显示两个相似的字形及其周围的框。我想为特定字符设置框的深度和高度,或者等效地,将它们封闭在具有指定宽度、深度和高度的框中,以允许墨水溢出。
\documentclass[10pt]{article}
\usepackage{unicode-math}
\setmainfont{STIX Two Text}[NFSSFamily=mainfont]
\setmathfont{STIX Two Math}[NFSSFamily=mathfont]
\usepackage{logix}
\usepackage[svgnames]{xcolor}
\setlength{\fboxsep}{0pt}
\setlength{\fboxrule}{0.05pt}
\begin{document}
\fbox{\color{green}\KntTSLABSLA} \fbox{\color{green}\KntLSUARSUA}
\end{document}
以下是输出结果(为了清晰起见,放大了 16 倍)。
左侧符号的包含框应与右侧符号一样沿箭头中间向下。右侧符号的包含框底部太低,顶部太高,它应与左侧符号一样位于箭头末端。
这个问题并不特定于某种字体。我使用了便于说明的字形。下面是一个不使用该字体的示例。
\documentclass[10pt]{article}
\usepackage{unicode-math}
\setmainfont{STIX Two Text}
\setmathfont{STIX Two Math}
\usepackage[svgnames]{xcolor}
\setlength{\fboxsep}{0pt}
\setlength{\fboxrule}{0.05pt}
\begin{document}
\fbox{\color{green}A} \fbox{\color{green}J}
\end{document}
其输出为
对于此示例,应将高度设置为“A”中横杆的中间,将深度设置为“J”中钩子的顶部。这是完全相同的问题,只是字形不同。
答案1
字符节点与盒子共享一些属性,但它们不是 TeX 模型中的盒子并且它们的尺寸不可分配。
您没有提供有关所用系统的信息,但根据您的示例判断,它大概是 xetex 或 luatex。
在经典 tex 或 xtex 中,您必须在 tex 外部创建一个具有不同度量的新字体。使用 luatex,您原则上可以使用其虚拟字体功能以编程方式构建虚拟字体,但是即使使用 luatex,系统也没有关于其边界框内字形形状的信息,因此如果您想修剪到 J 尾部的顶部,您需要“用眼睛”裁剪它或在字体编辑器中打开字体并确定其组成路径。
答案2
我找到了一个使用 collectbox 包的解决方案。这是一个相当小的包,它被更复杂的 adjustbox 包使用(并且由同一作者编写)。这是解决方案。
\documentclass[10pt]{article}
\usepackage{unicode-math}
\setmainfont{STIX Two Text}
\setmathfont{STIX Two Math}
\usepackage{logix}
\usepackage{collectbox}
\usepackage[svgnames]{xcolor}
\setlength{\fboxsep}{0pt}
\setlength{\fboxrule}{0.01pt}
\newcommand \fixdim[1] {\collectbox*{\setlength{\depth}{0.238em}\setlength{\height}{0.762em}}{#1}}
\begin{document}
\fbox{\color{green}\fixdim{\KntTSLABSLA}} \fbox{\color{green}\fixdim{\KntLSUARSUA}}
\end{document}
以下是输出结果