LaTeX 中字体更改的所有标准方法(命令包)

LaTeX 中字体更改的所有标准方法(命令包)

编辑:

在 @samcarter 对 CTAN 上现有列表发表评论后,我更新了我的问题以使其变得有用:

哪些命令包可以全局或局部改变字体?

问题的目的是找到一种方法来识别所有这些命令,并可能制作一个工具来搜索并找到这些命令+改变字体的包。

PS:@samcarter 提到的 CTAN 列表已经是答案的一半了……

旧问题: 来自这个问题:https://tex.stackexchange.com/a/411063/120578并认为创建一个包含更改 LaTeX 字体的软件包的列表会很好,这样有人就可以轻松识别它们(如链接问题的情况一样)或者可以尝试使用它们来查看其中是否有一些适合他的需要:

附言:如果您认为该问题没用,请随时要求我删除该问题。

答案1

有关软件包,请参阅TeX live 中安装了哪些字体包?

有关 NFSS 的介绍,请参阅TeX live 中安装了哪些字体包?

对于宏的覆盖范围由fontspec,请参阅字体规格

对于由nfssext-cfr,请参阅nfssext-cfr

对于由fontaxes,请参阅字体

nfssext-cfr请注意fontaxes都提供了一些宏,它们是 NFSS 的简单扩展,但也包括其他通过以下方式改变重量、宽度或形状的宏:改变家庭,NFSS 的局限性使得事情无法“按预期工作”。此外,nfssext-cfr至少重新定义了一些标准字体宏,特别是那些影响斜体和/或小型大写字母选择的宏,以便允许更改“正常”累积。

例如,这是的新定义\itshape

\DeclareRobustCommand{\itshape}{%
  \not@math@alphabet\itshape\mathit
  \exfs@merge@shape{\itdefault}{\scdefault}{\sidefault}}

下面是\scshape

\DeclareRobustCommand{\scshape}{%
  \not@math@alphabet\scshape\relax
  \def\tempu{u}%
  \def\tempo{ol}%
  \ifx\f@shape\tempu
        \exfs@merge@shape{\scdefault}{\udefault}{\scudefault}%
  \else
        \ifx\f@shape\tempo
                \exfs@merge@shape{\scdefault}{\oldefault}{\scoldefault}%
        \else
                \exfs@merge@shape{\scdefault}{\itdefault}{\sidefault}%
        \fi
  \fi}

做什么\exfs@merge@shape

\newcommand*{\exfs@merge@shape}[3]{%
  \edef\exfs@tempa{#1}%
  \edef\exfs@tempb{#2}%
  \ifx\f@shape\exfs@tempb
    \expandafter\ifx\csname\f@encoding/\f@family/\f@series/#3\endcsname\relax
    \else
      \edef\exfs@tempa{#3}%
    \fi
  \fi
  \fontshape{\exfs@tempa}\selectfont}

这相对简单——我们不会在这里更换家庭。

但假设我们看一下\tlstyle

\DeclareRobustCommand{\tlstyle}{%
        \lstyle\tstyle}

嗯,两者都不\lstyle\tstyle标准。它们起什么作用?

\DeclareRobustCommand{\tstyle}{%                tabular figures
        \not@math@alphabet\tstyle\relax
        \exfs@unmerge@families{2}}
\DeclareRobustCommand{\lstyle}{%                lining figures (cf. command above)
        \not@math@alphabet\lstyle\relax
        \exfs@unmerge@families{j}}

以下是具体操作\exfs@unmerge@families

\newcounter{taken}%
\newcommand*\exfs@unmerge@families[1]{%
        \edef\exfs@tempf{#1}%
        \edef\tempa{\expandafter\exfs@get@variants\f@family\@nil}%
        \let\exfs@tempq\@empty
        \edef\exfs@tempg{}%
        \setcounter{taken}{0}%
        % check whether there are variants - if not do nothing
        \ifx\tempa\@empty
                \edef\exfs@tempq{}%
        \else
                % o/w go through the variants to find the one to delete
                \whiledo{\value{taken}<1}{%
                        % get the next variant
                        \edef\exfs@tempn{\expandafter\exfs@next\tempa\@nil}%
                        % see if the next variant is the thing we seek and, if so, eliminate it
                        \ifx\exfs@tempf\exfs@tempn
                                \edef\tempa{\expandafter\exfs@shift\tempa\@nil}%
                                \edef\exfs@tempq{\exfs@tempg\tempa}%
                                \stepcounter{taken}%
                        % o/w save the next variant and move on if any variants remain
                        \else
                                \edef\exfs@tempg{\exfs@tempg\exfs@tempn}%
                                \edef\tempa{\expandafter\exfs@shift\tempa\@nil}%
                                \ifx\tempa\@empty% if there are no variants left, we're done
                                        \edef\exfs@tempq{\exfs@tempg}%
                                        \stepcounter{taken}%
                                \fi
                        \fi
                }%
        \fi
        \exfs@try@family{\expandafter\exfs@get@base\f@family\@nil \exfs@tempq}}

正如您可能猜到的,还\exfs@merge@families需要一个,例如,用于和\pstyle等等。\ostyle\postyle

没有什么可以阻止“模板”使用类似的东西\plstyle\AtBeginDocument全局更改图形样式。(当然,nfssest-cfr必须加载以避免错误,并且必须做更多事情才能使其生效。)

我相信,类似的评论也适用于fontaxes。当然,如果在 NFSS 的局限性方面面临同样的问题。我之所以关注它,nfssext-cfr只是因为我碰巧更熟悉它的怪癖。(它基于nfssext.sty,这不是我写的,也不能怪我,但我肯定加入了自己的一些恶作剧,大概我可以。)

所有这些都表明,没有一组有用的标准宏可供您搜索并确信您已经找到了所需内容。fontspecfontaxes并且nfssext-cfr是扩展标准集的三种方法,但各个字体包通常也会添加宏。

此外,即使有包,“模板”也可能不会加载包。它可能会.fd直接输入文件或直接设置字体系列。这并不总是设计不良的表现:在某些情况下,这是获得所需结果的唯一方法。

当然,这个答案只涉及文本模式的字体:数学模式的字体使用几乎完全不同的一组宏进行配置。这里的一线希望是,试图扩展或更改这些宏的软件包要少得多,因此至少在某种意义上,情况更容易管理。这里仍然unicode-mathmathspec都是选项,所以只有在没有它们的情况下,情况才真正更容易管理。

相关内容