字符框的深度和高度

字符框的深度和高度

据我了解,当 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}

以下是输出结果

在此处输入图片描述

相关内容