我对 TeX 及其变体的世界不太熟悉,在深入研究之前,我无法评估它是否符合我的需求。TeX 及其同类可以绘制水平线条,但它们中的任何一个都可以将线条对齐到连续文本(悬挂、字母、表意文字)的各种印刷基线处吗?——从WHATWG HTML5 画布基线规范?
答案1
某些值可以在 TeX 中访问,例如:
\documentclass[12pt]{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{color}
\setlength{\fboxsep}{0pt}
\setlength{\fboxrule}{.3pt}
\setcounter{secnumdepth}{0}
\begin{document}
\subsection{Bounding box}
\begin{quote}
\color{red}
\Huge
\def\test#1{\fbox{\color{blue}#1}}
\test{\`A} \test{\sffamily C} \test{\itshape f}
\test{$\cdot$} \test{\_}%
\end{quote}
\subsection{Baseline}
\begin{quote}
\Huge
\sbox0{\color{blue}\,abcfgjpq=-\_x\,}
\noindent
\rlap{\color{red}\vrule width\wd0 height.15pt depth.15pt}%
\usebox0
\end{quote}
\subsection{Math axis}
\begin{tabular}{@{}lll@{}}
\textbullet & \verb|\sbox0{$\vcenter{}$}\the\ht0| & 6.22pt\\
\textbullet & \verb|\the\fontdimen22\textfont2\relax| & 6.22pt\\
\end{tabular}
\begin{quote}
% Math axis via an empty `\vcenter`, which vertically
% centers around the math axis.
\sbox0{\Huge$\vcenter{}$}% \vcenter centers around the math axis
\sbox2{\Huge\color{blue}\,${=}{+}{\cdot}{-}{\equiv}{\times}$\,}
\noindent
\rlap{\color{red}%
\vrule width\wd2 height\dimexpr\ht0+.15pt\relax
depth-\dimexpr\ht0-.15pt\relax
}%
\usebox2
\end{quote}
\subsection{Corpus size, x-height}
Font dependent unit: \verb|1ex|
\begin{quote}
\sbox0{\Huge\color{blue}\,abcdefghijklmnopqrstuvwxyz\,}
\noindent
\rlap{\color{red}\Huge
\vrule width\wd0 height\dimexpr1ex+.15pt\relax
depth-\dimexpr1ex-.15pt\relax
}%
\usebox0
\end{quote}
\subsection{Em}
Font dependent unit: \verb|1em|
\begin{quote}
$\vcenter{\color{red}\hbox{\Huge\rule{1em}{1em}}}$\quad
1\,em $\times$ 1\,em
\end{quote}
\end{document}
边界框
TeX 不是光栅化器,因此它不知道确切的边界框。相反,它依赖于字体报告的字形边界框:
包含侧边距(左右白边距)。
包括基线(参见上例中的下划线或中间点)。
在某些情况下,字体的字形边界框可能比实际边界框大或小。这通常是字体设计的一部分,有时是字体错误。