检索当前字体、缩放字体并将字体更改为该版本

检索当前字体、缩放字体并将字体更改为该版本

我使用的是 Plain TeX(以及eplain,如果这很重要的话)。我希望能够通用地缩放当前字体,无论当前字体是如何设置的。例如,我想编写一个宏

\def\VandV{V\hskip-3pt{\abitsmallerthanthecurrentfont\&\hskip-3ptV}

我想让\abitsmallerthanthecurrentfont& 符号变小一点。

我记得,在 LaTeX 中,如果没有软件包,可以使用\Large\tiny之类的东西来影响当前字体的大小。但我没有使用 LaTeX。

是否可以以简单的方式完成此操作而无需对 Plain TeX 进行大量修改?

答案1

我会使用一种完全不同的方法:

\input eplain
\beginpackages
  \usepackage{graphicx}
\endpackages

\def\smallampersand{\scalebox{.8}{\&}}
\def\VandV{V\kern-.4ex\smallampersand\kern-.4ex V}

\font\my="Linux Libertine O" at 36pt

\my\VandV

在此处输入图片描述


请注意,应使用徽标\kern或在\hbox构造周围使用,因为\hskip引入了断点。

答案2

我的方法与@morbusg 类似:检查\fontname。以下代码检索当前字体名称及其大小/缩放因子,然后修改后者并声明具有新大小的临时字体。字体在两个方向上缩放 1.2。因此,可以递归使用该宏来获得相对较大/较小的尺寸。字体操作是在组中完成的,以免累积计算错误。

\newcount\fontscale
\newdimen\fontsize

\def\discard#1\relax{}
\def\processfont#1 #2#3 #4 {%
  \def\fname{#1}%
  % Can't normally compare to 'at' here, because \fontname returns
  % characters of catcode 12
  \if a#2%
    \fontsize=#4
  \else
    \fontscale=#4
  \fi
  \discard}
\def\scalefont#1#2#3{%
  \begingroup
    \edef\x{\fontname\font\space scaled 1000 \relax}%
    \fontscale=0
    \expandafter\processfont\x
    \ifnum\fontscale=0
      % We have the "at" syntax
      \multiply\fontsize by #1
      \divide\fontsize by #2
      \font\tmpfont=\fname\space at \the\fontsize
    \else
      % We have the "scaled" syntax
      \multiply\fontscale by #1
      \divide\fontscale by #2
      \font\tmpfont=\fname\space scaled \the\fontscale
    \fi
    \tmpfont #3%
  \endgroup}
\def\smaller#1{\scalefont{5}{6}{#1}}
\def\bigger#1{\scalefont{6}{5}{#1}}


test \bigger{test \bigger{test \bigger{test}}}

test \smaller{test \smaller{test \smaller{test}}}

\bye

在此处输入图片描述

但是,这种方法无法使用不同的光学字体大小,而这正是实现最佳排版的关键。考虑光学尺寸需要基础设施,该基础设施需要知道所用特定字体的不同可用光学尺寸,就像 LaTeX 已经做到的那样。因此,您可能会使用 LaTeX 获得更好的结果,例如,relsize包裹。

答案3

我有一个非常聪明的想法:使用的结果作为加载较小字体\fontname\font的宏的输入。但不幸的是它有问题(我使用了普通的 XeTeX):\dimexpr

\font\test="Myriad Pro" at 16pt
\test
\def\smaller{%
  \def\loadnewfont"##1" ##2 ##3\relax{%
    \font\test="##1" at \the\dimexpr##3-1pt\relax\test}
  \expandafter\loadnewfont\fontname\font\relax\&}
\fontname\font
\smaller \fontname\font \smaller \fontname\font
\smaller \fontname\font \smaller \fontname\font
\smaller \fontname\font % the size has vanished with the last call!?
\bye

在此处输入图片描述

相关内容