如何使字体适合单元格高度

如何使字体适合单元格高度

所以我正在显示字体,并且我想创建一个拆分单元格(或子表),使第二个两个单元格中的文本垂直适合前面的文本的高度。

就像这样

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tabularray}
\usepackage{lipsum}
\usepackage{fontawesome}
\begin{document}

\newcommand{\splitdetail}[3]{
    \hbox{
        \setbox1=\hbox{#1}\dimen1=\ht1 \box1 \the\dimen1\ \the\baselineskip \fontsize{.5\baselineskip}{.5\baselineskip}\selectfont\the\baselineskip
        \vbox to\dimen1{
            \halign{
                \hfil##\hfil\cr #2 \the\baselineskip \cr\noalign{\vss} #3 \cr
            }
        }
    }
}
\Huge\splitdetail{\faMapMarker}{City}{State}
\end{document}

但是由于字母低于线,文本会溢出(但我的理解是这不应该发生,因为这个空间包含在内\baselineskip,不是吗?在此处输入图片描述

答案1

像您一样,我首先测量大文本的高度。但是,文本的高度\faMapMarker低于基线,因此我将文本的深度添加到文本中。然后我将文本的高度与深度一起上移,以便文本刚好位于基线上。否则文本的高度\faMapMarker将低于其旁边的文本。

然后,我用固定的字体大小排版小文本(我选择了 25pt,但可以是 LaTeX 知道的任何其他字体大小)。然后,我用两条线测量框的高度。然后,我将字体大小乘以所需高度与测量高度的比率,并使用该比率最终排版小文本。我使用标准 LaTeX 命令进行测量,而不是\box1\dimen1。我发现这样更干净。

请注意,LaTeX 可能会将字体大小四舍五入为它知道的大小之一。为了弥补这一点,我\vss在两行之间添加了一个。也可以在\RequirePackage{fix-cm}前面加上一个\documentclass,这样 LaTeX 就不会对字体大小进行四舍五入。我在下面的代码中注释掉了这个。但这个还是\vss有用的,因为字体大小不一定是精确缩放的。

\hfil您可以通过放置在适当的位置来选择左对齐,居中或右对齐。

%\RequirePackage{fix-cm}
\documentclass{article}
\usepackage{fontawesome}
\usepackage{calc}
\newlength\DimA % height of large text
\newlength\DimB % height of smaller text
\newlength\smallsize % fontsize of smaller text
\newsavebox\tempbox

\begin{document}

\newcommand{\splitdetail}[3]{
    \hbox{%
        \sbox{\tempbox}{#1}
        \setlength{\DimA}{\dimexpr\ht\tempbox+\dp\tempbox}%
        \raisebox{\dp\tempbox}{\usebox{\tempbox}}
        \setlength{\smallsize}{25pt}% initial try
        \settoheight{\DimB}{\vbox{%
            \fontsize\smallsize\smallsize\selectfont
            \halign{##\cr#2\cr#3\cr}}}%
        \setlength\smallsize{\smallsize*\ratio{\DimA}{\DimB}}%
        \fontsize{\smallsize}{\smallsize}\selectfont
        \vbox to\DimA{\halign{##\cr#2\hfil\cr\noalign{\vss}#3\hfil\cr}}%
    }
}

\Huge
\splitdetail{LARGE TEXT}{Small Top}{Small Bottom}

\splitdetail{\faMapMarker}{City}{State}

\end{document}

在此处输入图片描述

相关内容