使用 anyfontsize 包时‘\Huge’和‘\tiny’命令出现意外行为

使用 anyfontsize 包时‘\Huge’和‘\tiny’命令出现意外行为

\Huge当我在包中使用和\tiny命令时遇到了意外行为anyfontsize

下面是两段 LaTeX 代码,说明了这个问题。预期是\Huge\tiny在使用 更改字体大小后将其重置为原来的大小\fontsize{<size>}{<line space>}\selectfont,但它们似乎保留了最后设置的大小。当使用 加载类时[12pt]\huge命令也会导致错误的大小。

第一种情况(\Huge):

\documentclass[10pt]{article}
\usepackage{anyfontsize}

\begin{document}
{\Huge This is a Huge text.}

{\fontsize{30}{40}\selectfont This is a very Huge text.}

{\Huge This is a Huge text.} % This should be original Huge size, but it's too HUGE!

{\Large This is a large text.\par}
{\large This is a large text.\par}

{\Huge This is a Huge text again.} % This should be original Huge size, but it's too HUGE!

{\fontsize{40}{50}\selectfont This is a very HUGE text.}

{\Huge This is a Huge text again.} % This should be original Huge size, but it's even more HUGE!
\end{document}

第二种情况(\tiny):

\documentclass[10pt]{article}
\usepackage{anyfontsize}

\begin{document}
{\tiny This is a tiny text.}

{\fontsize{2}{2}\selectfont This is a very tiny text.}

{\tiny This is a tiny text.} % This should be original tiny size, but it's too tiny!
\end{document}

当我查看anyfontsize包内部时,它正在\externalfont使用以下内容进行覆盖:

\def\anyfontsize@set#1 #2\hfuzz{%
  \@tempdimb=\f@user@size\p@%
  \edef\external@font{#1 at\the\@tempdimb}%
}%

但是,我找不到任何原因来解释为什么它会改变\Huge和的行为\tiny。我猜幕后一定发生了什么事情。

我想知道是什么导致了\Huge\tiny命令的这种意外行为(或者它是预期的行为?)是否有更好的解决方案来设置字体大小,同时保持\Huge\tiny命令的行为?

答案1

让我们看看anyfontsize.sty

% anyfontsize.sty -- allow font size substitutions
% by Péter Szabó <[email protected]> at Sat Feb  3 13:56:49 CET 2007
[...]
%** Overrides \externalfont by specifying the ` at <requested-fontsize>pt'
%** clause. The requested font size is in \f@user@size.
\def\anyfontsize@set#1 #2\hfuzz{%
  \@tempdimb=\f@user@size\p@%
  \edef\external@font{#1 at\the\@tempdimb}%
}%

%** Overrides definition in latex.ltx
%** See %%%% pts %%%% for the overridden part.
\gdef\tryif@simple#1-#2\tryif@simple{%
[...]
      %%%% pts %%%%
      \expandafter\anyfontsize@set\external@font\hfuzz
[...]

这基本上是一个 17 年前的黑客行为。如果我用 TeX Live 2012 测试您的示例,问题完全一样。

请注意,甚至在anyfontsize发布之前,基础 LaTeX 发行版就已经fix-cm旨在解决 Computer Modern 字体的相同问题。

不要使用anyfontsize。如果您打算使用 Computer Modern 字体(或 T1 编码中的 European Modern),请加载

\RequirePackage{fix-cm}

之前\documentclass。对于其他字体包,您不必担心大小。有一些非常专业的字体,例如数学模式下的书法大写字母的 RSFS,可能需要特殊处理,但手动更改字体定义通常非常简单。

我们ursfs.fd发现

\DeclareFontFamily{U}{rsfs}{\skewchar\font127 }
\DeclareFontShape{U}{rsfs}{m}{n}{%
   <5> <6> rsfs5
   <7> rsfs7
   <8> <9> <10> <10.95> <12> <14.4> <17.28> <20.74> <24.88> rsfs10
}{}

只需在文档中添加,

\DeclareFontFamily{U}{rsfs}{\skewchar\font127 }
\DeclareFontShape{U}{rsfs}{m}{n}{<-6> rsfs5 <6-8> rsfs7 <8-> rsfs10}{}

并且字体将以任意大小显示。

相关内容