如何放大/缩小字体大小,以便它与同一行上的其他字体混合时看起来一致?
作为一个具体的例子,如何将以下代码片段中的第一个“a”缩小到第二个和第三个的大小?
\documentclass[12pt]{article}
\pagestyle{empty}
\newcommand\pagmsl{\usefont{\encodingdefault}{pag}{m}{sl}}
\newcommand\pbklit{\usefont{\encodingdefault}{pbk}{l}{it}}
\newcommand\bchmit{\usefont{\encodingdefault}{bch}{m}{it}}
\begin{document}
\pagmsl a
\pbklit a
\bchmit a
\end{document}
答案1
强制字体选择方案,您可以定义一个命令\definesamplefont
,该命令根据主字体 x 高度定义一个全新的字体系列。您可以使用新定义的字体开关排版段落。
\documentclass[12pt]{article}
\pagestyle{empty}
\usepackage{expl3}
\ExplSyntaxOn
\cs_set_eq:NN \compute \fp_eval:n
\ExplSyntaxOff
\makeatletter
\newcommand{\definesamplefont}[4]{%
\sbox0{\normalfont a}%
\sbox2{\normalfont\usefont{\encodingdefault}{#2}{#3}{#4}a%
\xdef\@temp{\fontname\font\space}}%
\begingroup\edef\x{\endgroup
\noexpand\DeclareFontFamily{\encodingdefault}{#1}{}
\noexpand\DeclareFontShape{\encodingdefault}{#1}{X}{X}
{ <-> [\compute{\strip@pt\ht0/\strip@pt\ht2}] \expandafter\xget@name\@temp\@nil }{}
}\x
\@namedef{#1}{\usefont{\encodingdefault}{#1}{X}{X}}
}
\def\xget@name#1 #2\@nil{#1}
\makeatother
\definesamplefont{pagmsl}{pag}{m}{sl}
\definesamplefont{pbklit}{pbk}{l}{it}
\definesamplefont{bchmit}{bch}{m}{it}
\begin{document}
\pagmsl a
\pbklit a
\bchmit a
\end{document}
获取所需比例的另一种方法是使用包fp
。以下是此案例的完整示例:
\documentclass[12pt]{article}
\pagestyle{empty}
\usepackage{fp}
\makeatletter
\newcommand{\definesamplefont}[4]{%
\sbox0{\normalfont a}%
\sbox2{\normalfont\usefont{\encodingdefault}{#2}{#3}{#4}a%
\xdef\@temp{\fontname\font\space}}%
\FPdiv\computed@ratio{\number\ht0}{\number\ht2}%
\begingroup\edef\x{\endgroup
\noexpand\DeclareFontFamily{\encodingdefault}{#1}{}
\noexpand\DeclareFontShape{\encodingdefault}{#1}{X}{X}
{ <-> [\computed@ratio] \expandafter\xget@name\@temp\@nil }{}
}\x
\@namedef{#1}{\usefont{\encodingdefault}{#1}{X}{X}}
}
\def\xget@name#1 #2\@nil{#1}
\makeatother
\definesamplefont{pagmsl}{pag}{m}{sl}
\definesamplefont{pbklit}{pbk}{l}{it}
\definesamplefont{bchmit}{bch}{m}{it}
\begin{document}
a
\pagmsl a
\pbklit a
\bchmit a
\end{document}
同一代码的完整 expl3 实现。
\documentclass[12pt]{article}
\pagestyle{empty}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\definesamplefont}{mmmm}
{
\calaf_define_sample_font:nnnn { #1 } { #2 } { #3 } { #4 }
}
\box_new:N \l__calaf_normal_ht_box
\hbox_set:Nn \l__calaf_normal_ht_box {\normalfont a}
\box_new:N \l__calaf_new_ht_box
\tl_new:N \g__calaf_fontname_tl
\seq_new:N \l__calaf_fontname_seq
\fp_new:N \l__calaf_ratio_fp
\cs_generate_variant:Nn \seq_set_split:Nnn { Nnx }
\cs_new_protected:Npn \calaf_define_sample_font:nnnn #1 #2 #3 #4
{
\hbox_set:Nn \l__calaf_new_ht_box
{
\normalfont\usefont{\encodingdefault}{#2}{#3}{#4} a
\seq_set_split:Nnx \l__calaf_fontname_seq { ~ } { \fontname\font \c_space_tl }
\seq_pop_left:NN \l__calaf_fontname_seq \l_tmpa_tl
\tl_gset_eq:NN \g__calaf_fontname_tl \l_tmpa_tl
}
\fp_set:Nn \l__calaf_ratio_fp
{
\dim_to_fp:n { \box_ht:N \l__calaf_normal_ht_box}
/
\dim_to_fp:n {\box_ht:N \l__calaf_new_ht_box }
}
\use:x
{
\exp_not:N \DeclareFontFamily {\encodingdefault} {#1} {}
\exp_not:N \DeclareFontShape {\encodingdefault} {#1} {X} {X}
{ <-> [ \fp_use:N \l__calaf_ratio_fp ] \g__calaf_fontname_tl } {}
}
\cs_new:cpn { #1 } { \usefont{\encodingdefault}{#1}{X}{X} }
}
\ExplSyntaxOff
\definesamplefont{pagmsl}{pag}{m}{sl}
\definesamplefont{pbklit}{pbk}{l}{it}
\definesamplefont{bchmit}{bch}{m}{it}
\begin{document}
\pagmsl a
\pbklit a
\bchmit a
\end{document}
答案2
就垂直高度而言,您可以在长度中存储一些固定高度,并将元素缩放到文档其他位置的该高度。
下面我习惯于\resizebox{!}{\fixedheight}{<stuff>}
调整<stuff>
高度\fixedheight
(无论它是多少;a
在我下面的例子中是 Computer Modern):
\documentclass[12pt]{article}
\usepackage{graphicx}% http://ctan.org/pkg/graphicx
\pagestyle{empty}
\newcommand\pagmsl{\usefont{\encodingdefault}{pag}{m}{sl}}
\newcommand\pbklit{\usefont{\encodingdefault}{pbk}{l}{it}}
\newcommand\bchmit{\usefont{\encodingdefault}{bch}{m}{it}}
\begin{document}
\newlength{\fixedheight}\settoheight{\fixedheight}{a}
\fbox{%
a
{\pagmsl a}
{\pbklit a}
{\bchmit a}%
}
\fbox{%
a
\resizebox{!}{\fixedheight}{\pagmsl a}
\resizebox{!}{\fixedheight}{\pbklit a}
\resizebox{!}{\fixedheight}{\bchmit a}%
}
\end{document}
当然,这里的警告是,您不会喜欢这种方法的换行。但是,您的示例仅列出了字符。此外,缩放后您会丢失某些尺寸。
scalerel
提供类似的功能。