假设我有一个类似的命令
\newcommand{\fntpal}[1]{{\fontfamily{ppl}\selectfont#1}}
用于将特定文本块的字体更改为 Palatino,并且我还希望对其他字体(如 Helvetica、Latin Modern Sans Serif 等)有类似的效果。
最快的方法来发现 Helvetica 的正确参数是phv
以及 Latin Modern Sans 的正确参数是lmss
?
我可以猜到这个hv
部分,但我永远猜不到它p
在哪里phv
(现在我知道它在那里的原因,但这不是重点)。
我所做的是:
- 检查相关LaTeX 字体目录页面(没有任何有用的东西);
- 跳至Helvetica CTAN 页面并在文档中搜索一些提示,直到我找到inst.tex 文件。
同样的方法对拉丁现代语不起作用(那里有太多文档文件),我不得不随机搜索互联网,直到找到神奇的字符串。
那么,有没有一般参考清单对此有何看法?字体目录页面为何没有包含这些信息?
编辑:看起来另一个小组的某个人有一个类似问题 并指出: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
是 Adobe、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.fd
或T1xyz.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 的新命令。它们之间有兼容性吗?。
参考:
- https://tex.stackexchange.com/a/25251/250119有一位導師。
- LaTeX 字体系列的 Berry 命名方案列表
- 是否有所有 TeX 字体的列表?(包含通过
.map
文件搜索和参考的解决方案fontname
) - 如何获取所有 \fontfamily{...}\fontseries{...} 组合的列表?(包含通过
.fd
文件进行 grep 的解决方案) - 我的盒子上安装了哪些字体?(包含通过
.fd
文件和/或列表.map
文件进行 grep 的解决方案) - 我如何测试当前的字体?