编辑:
在 @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
,这不是我写的,也不能怪我,但我肯定加入了自己的一些恶作剧,大概我可以。)
所有这些都表明,没有一组有用的标准宏可供您搜索并确信您已经找到了所需内容。fontspec
,fontaxes
并且nfssext-cfr
是扩展标准集的三种方法,但各个字体包通常也会添加宏。
此外,即使有包,“模板”也可能不会加载包。它可能会.fd
直接输入文件或直接设置字体系列。这并不总是设计不良的表现:在某些情况下,这是获得所需结果的唯一方法。
当然,这个答案只涉及文本模式的字体:数学模式的字体使用几乎完全不同的一组宏进行配置。这里的一线希望是,试图扩展或更改这些宏的软件包要少得多,因此至少在某种意义上,情况更容易管理。这里仍然unicode-math
和mathspec
都是选项,所以只有在没有它们的情况下,情况才真正更容易管理。