我想要文本的高度为 0.5 厘米,也就是说,下降部和上升部之间的垂直距离应该正好是 0.5 厘米。我该如何实现?
编辑:上升部、中线、基线和下降部的位置应该与文本是否包含任何延伸到中线以上或基线以下的字母无关。例如,如果三段文本“crane”、“aardvark”和“ape”分开写但在同一行上,中间没有空格,则应该产生与文本“craneaardvarkape”相同的结果。
答案1
如果只有一小段,最简单的方法是测量字符并进行适当缩放。只需要一些数学运算。
\documentclass{article}
\usepackage[margin=1cm]{geometry}
\usepackage{graphicx,calc}
\newcommand{\getscale}[1]{%
{#1*\ratio{\fontcharht\font`l}{\fontcharht\font`l+\fontchardp\font`p}}%
}
\newcommand{\bigfont}[2]{% #1 is the global size, #2 is the text
\resizebox{!}{\getscale{#1}}{\rule{0pt}{\fontcharht\font`l}#2}%
}
% For testing
\newcommand{\testwithframe}[2]{%
\sbox{0}{\bigfont{#1}{#2}}%
\makebox[0pt][l]{\raisebox{-\dp0}{%
\rule{0.4pt}{#1}\kern-0.4pt
\rlap{\raisebox{#1}{\rule{\wd0}{0.4pt}}}%
\rule{\wd0}{0.4pt}%
\rule{0.4pt}{#1}%
}}\usebox{0}%
}
\begin{document}
\bigfont{5cm}{Aylip}
\testwithframe{5cm}{Aylip}
\end{document}
不应考虑“A”和“y”的小超调。框架的总高度正好是 5 厘米,因为它是由\rule{0.4pt}{5cm}
测试宏生成的。
由于\resizebox
只考虑盒子高度,我们只需要计算最大高度与字符最大高度加深度之间的比率,然后将其乘以所需的尺寸。
如果您想用该字体设置段落,我们需要进行稍微不同的计算,这可以通过宏完成\fontbydim
:
前两行与之前的示例相同。第三行使用新命令设置字体;第一个“Aylip”是使用上面的框生成的,仅供比较;第二个“Aylip”以所选字体排版。
您需要一种可以自由缩放的字体,为此,我使用了 Latin Modern。
\documentclass{article}
\usepackage[margin=1cm]{geometry}
\usepackage{graphicx,calc}
\usepackage{lmodern}
\usepackage{lipsum}
\newcommand{\getscale}[1]{%
{#1*\ratio{\fontcharht\font`l}{\fontcharht\font`l+\fontchardp\font`p}}%
}
\newcommand{\bigfont}[2]{% #1 is the global size, #2 is the text
\resizebox{!}{\getscale{#1}}{#2}%
}
\newcommand{\fontbydim}[1]{%
\setlength{\dimen0}{10pt*\ratio{#1}{\fontcharht\font`l+\fontchardp\font`p}}%
\fontsize{\dimen0}{1.2\dimen0}\selectfont
}
% For testing
\newcommand{\testwithframe}[2]{%
\sbox{0}{\bigfont{#1}{#2}}%
\makebox[0pt][l]{\raisebox{-\dp0}{%
\rule{0.4pt}{#1}\kern-0.4pt
\rlap{\raisebox{#1}{\rule{\wd0}{0.4pt}}}%
\rule{\wd0}{0.4pt}%
\rule{0.4pt}{#1}%
}}\usebox{0}%
}
\begin{document}
\bigfont{0.5cm}{Aylip}
\testwithframe{0.5cm}{Aylip}
\bigskip
\fontbydim{0.5cm}\usebox{0}Aylip
\lipsum[2]
\end{document}
答案2
由于您没有提到文本的长度,最简单的方法是使用graphicx
:
\documentclass{article}
\usepackage{graphicx}% http://ctan.org/pkg/graphicx
\begin{document}
The quick brown fox jumps over the lazy dog
\bigskip
\resizebox{!}{0.5cm}{The quick brown fox jumps over the lazy dog}
\end{document}
请注意,以这种方式缩放字体是基于每个字母的边界框的。也就是说,从边界框方向的最低下降部到最高上升部的测量值为 0.5 厘米。