搜索有效 \fontfamily 参数的最快方法?

搜索有效 \fontfamily 参数的最快方法?

假设我有一个类似的命令

\newcommand{\fntpal}[1]{{\fontfamily{ppl}\selectfont#1}}

用于将特定文本块的字体更改为 Palatino,并且我还希望对其他字体(如 Helvetica、Latin Modern Sans Serif 等)有类似的效果。

最快的方法来发现 Helvetica 的正确参数是phv以及 Latin Modern Sans 的正确参数是lmss

我可以猜到这个hv部分,但我永远猜不到它p在哪里phv(现在我知道它在那里的原因,但这不是重点)。

我所做的是:

同样的方法对拉丁现代语不起作用(那里有太多文档文件),我不得不随机搜索互联网,直到找到神奇的字符串。

那么,有没有一般参考清单对此有何看法?字体目录页面为何没有包含这些信息?

编辑:看起来另一个小组的某个人有一个类似问题 并指出:http://latex.silmaril.ie/formattinginformation/typographics.html(但这不是完整列表)

答案1

恐怕这种方法并不存在。

八十年代,Karl Berry 为 TeX/LaTeX 提出了一种字体命名方案,该方案尽可能确保公制文件名最多由 8 个字符组成,这基本上是一个我不想提及的操作系统强制执行的限制;CD-ROM 上的文件名也受到同样的限制。

“Berry 名称”由以下几个部分组成:

S TT W [V...] [N] [E] [DD]

(方括号表示可选部分),其中S是一个字母,表示供应商p是 Adob​​e、b是 Bitstream、u是 URW 等等)。您感兴趣的是TT,两个代表姓氏的字母数字字符。

Karl Berry 撰写的文档“Fontname – TeX 字体的文件名”可在主要的 TeX 发行版中找到,texdoc fontname或者在texdoc.net(或在 CTAN 上)。在那里,您可以找到一长串两个字母的字体系列名称,它们与“真实”字体名称相对应。

因此phv是“Adobe Helvetica”,而bhv可以是“Bitstream Swiss 721”并且uhv是“URW Nimbus Sans”。

基于 Metafont 的字体不遵循惯例,因此 Computer Modern Roman 字体的系列名称是cmr。有一个系列对mr(Madrone),供应商c是 Compugraphic;但cmr10不符合 Berry 命名方案,因此不会误认为是(可能不存在的)“Compugraphic Madrone”。但是,如果这种字体确实存在,就会出现问题。

但这已是过去。如今操作系统已经取消了文件名的八个字符限制(至少在用户级别)。LaTeX 字体供应商已经开始使用自由文件名和遵循惯例。

例如,Quattrocento 字体使用Quattrocento-TLF作为系列名称,而 Iwona 使用iwona,而 Linux Libertine 有LinuxLibertineT-xxx(xxx代表两个或三个字母的添加。该newpxtext软件包使用诸如ntxr或 之类的系列名称ntxss

shell 命令

locate /t1 | grep 'texlive/2012' | grep '\.fd$'

它应该找到.fd与 T1 编码相关的所有文件,找到 286 个文件;另外找到 59 个/T1(并非所有软件包都遵循字体描述文件名以小写编码开头的建议)。

基本上,如下指令

\fontfamily{<string>}\selectfont

加载字体描述文件<encoding><string>.fd。假设我们使用 T1 作为输出编码;则将\fontfamily{xyz}加载t1xyz.fdT1xyz.fd(如果您的系统上存在)。

从这些字体描述文件名中进行选择是找出您拥有的字体的唯一可靠方法。

除了以下命令之外,在 Unix 系统上,locate我们还可以利用TeX Live 的文件名缓存:ls-R

grep -i '^t1.*\.fd$' $(kpsewhich --all ls-R)

注意:--all选项似乎可以用 替换-a,这也是我一直使用的,但没有记录简短选项。

答案2

 texdoc fontname

在 texlive 系统上至少会让你找到 Karl Berry 关于字体名称的著作。

或者也可以在网上找到

http://mirrors.ctan.org/info/fontname/fontname.pdf

phv在第27页....

lmss不在那里(因为文档太旧了),但它解释了神秘名称背后的基本思想。当然,神秘名称(MSDOS 和其他类似的 8+3 文件系统)的原因实际上已不存在,但现在仍然很难改变。

答案3

Anselm Lingnau 在他的书“LaTeX Hacks”中给出了一些参考。参见第 236 页(hack 编号 67):

计算机现代罗马: cmr

Adobe Times Roman:ptr

Adobe Palatino:ppt

ITC Bookman:pbk

Adobe New Century Schoolbok:pnc

衬线字体:fve

URW Classico(“Optima”):uop

计算机现代无字体:cmss

计算机现代明亮:cmbr

Adobe Helvetica: phv

ITC Avant Garde Gothic:页面

Bera Sans:fvs

计算机现代打字机:cmtt

Adobe Courier:pcr

(我忽略了那些非免费软件。)

答案4

方法 1. 加载包,然后使用 TeX 打印出家族

步骤1。制作一个包含您想要的字体的“Hello world”的文档。

\documentclass{article}
\usepackage{lmodern}
\begin{document}
\textsf{Hello world}
\end{document}

第2步. 将“Hello world”替换为Encoding: \csname f@encoding\endcsname, font family: \csname f@family\endcsname.

\documentclass{article}
\usepackage{lmodern}
\begin{document}
\textsf{Encoding: \csname f@encoding\endcsname, font family: \csname f@family\endcsname}
\end{document}

输出

如果字体是奇怪的符号字体,请使用\typeout并从控制台/日志文件中读取。

\documentclass{article}
\usepackage{lmodern}
\begin{document}
\pagenumbering{gobble}
\textsf{\typeout{Encoding: \csname f@encoding\endcsname, font family: \csname f@family\endcsname}}
\end{document}

PDF 将是空白的,但日志文件将包含编码/系列名称。

评论。fontspec

当然,对于某些字体,您需要使用fontspec来加载它。

\documentclass{article}
\usepackage{fontspec}
\begin{document}
\setmainfont{Latin Modern Roman}
Encoding: \csname f@encoding\endcsname, font family: \csname f@family\endcsname

这将打印出输出

而在\setmainfont该特定文档之后,字体系列是可用的

\fontfamily{LatinModernRoman(0)}\selectfont Hello world

完全不建议依赖后缀(0)

而应使用fontspec,并指定NFSSFamily=...。例如,请参阅宏 setmainfont 和 setsansfont 不接受 newfontfamily 的新命令。它们之间有兼容性吗?


参考:

相关内容