所以我正在显示字体,并且我想创建一个拆分单元格(或子表),使第二个两个单元格中的文本垂直适合前面的文本的高度。
就像这样
\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}
答案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}