我正在尝试设置我喜欢的mathptmx
和字体组合newtxmath
。这需要使用largsymbols
的字体newtxmath
,因为我更喜欢 的字体而不是 的字体mathptmx
。但是,这种字体就是无法加载。下面是说明该问题的简单代码片段:
\documentclass[a4paper]{report}
\DeclareSymbolFont{largesymbols}{OMX}{ntxex}{m}{n}
\begin{document}
$\forall\exists<>\leq\geq\int\subseteq\supseteq$
\[\int abcdefghijklmnopqrstuvwxyz+-=\alpha\]
\end{document}
结果为pdfTeX
:
This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2014) (preloaded format=pdflatex)
restricted \write18 enabled.
entering extended mode
(./newtxtest2.tex
LaTeX2e <2014/05/01>
Babel <3.9k> and hyphenation patterns for 78 languages loaded.
(/usr/local/texlive/2014/texmf-dist/tex/latex/base/report.cls
Document Class: report 2007/10/19 v1.4h Standard LaTeX document class
(/usr/local/texlive/2014/texmf-dist/tex/latex/base/size10.clo))
(./newtxtest2.aux)
LaTeX Font Warning: Font shape `OMX/ntxex/m/n' undefined
(Font) using `OMX/cmex/m/n' instead on input line 5.
[1{/usr/local/texlive/2014/texmf-var/fonts/map/pdftex/updmap/pdftex.map}]
(./newtxtest2.aux)
LaTeX Font Warning: Some font shapes were not available, defaults substituted.
)</usr/local/texlive/2014/texmf-dist/fonts/type1/public/amsfonts/cm/cmex10.pfb
></usr/local/texlive/2014/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi10.pfb>
</usr/local/texlive/2014/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb></
usr/local/texlive/2014/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy10.pfb>
Output written on newtxtest2.pdf (1 page, 37359 bytes).
SyncTeX written on newtxtest2.synctex.gz.
Transcript written on newtxtest2.log.
也一样XeLaTeX
。现在,在我的一个包中,情况更复杂,我遇到了错误。在这种情况下,我收到警告,并且积分形状错误:如果我没看错的话,我得到的是 Computer Modern 的,即默认的cmex
。事实上,添加
\SetSymbolFont{largesymbols}{bold}{OMX}{ntxex}{b}{n}
\DeclareFontSubstitution{OMX}{ntxex}{m}{n}
产生XeLaTeX
:
This is XeTeX, Version 3.14159265-2.6-0.99991 (TeX Live 2014) (preloaded format=xelatex)
restricted \write18 enabled.
entering extended mode
(./newtxtest2.tex
LaTeX2e <2014/05/01>
Babel <3.9k> and hyphenation patterns for 78 languages loaded.
(/usr/local/texlive/2014/texmf-dist/tex/latex/base/report.cls
Document Class: report 2007/10/19 v1.4h Standard LaTeX document class
(/usr/local/texlive/2014/texmf-dist/tex/latex/base/size10.clo))
(./newtxtest2.aux)
No file OMXntxex.fd.
./newtxtest2.tex:6: LaTeX Error: This NFSS system isn't set up properly.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.6 \begin{document}
然而,代码是从包中逐字复制的,那么这里发生了什么?为什么.fd
找不到?我知道它在哪里,但TeX
似乎不知道,如果我把它放在TeX
可以找到的地方,它就会开始做一些奇怪的事情,调用metafont
并最终没有.tfm
:
[…]
kpathsea: Running mktextfm bickham-r
mktextfm: Running mf-nowin -progname=mf \mode:=ljfour; mag:=1; nonstopmode; input bickham-r
This is METAFONT, Version 2.7182818 (TeX Live 2014) (preloaded base=mf)
kpathsea: Running mktexmf bickham-r
! I can't find file `bickham-r'.
<*> ...jfour; mag:=1; nonstopmode; input bickham-r
Please type another input file name
! Emergency stop.
为什么会发生这种情况?如何在不newtxmath
直接加载的情况下获得积分符号所需的形状?
答案1
如果你不需要扩展,至少你需要这样的东西:
\documentclass[a4paper]{report}
\DeclareFontEncoding{LMX}{}{}
\DeclareFontSubstitution{LMX}{ntxexx}{m}{n}
\DeclareFontFamily{LMX}{ntxexx}{}
\DeclareFontShape{LMX}{ntxexx}{m}{n}{<->ntxexx}{}
\DeclareFontShape{LMX}{ntxexx}{b}{n}{<->ntxbexx}{}
\DeclareFontShape{LMX}{ntxexx}{bx}{n}{<->ssub ntxexx/b/n}{}
\DeclareSymbolFont{largesymbols}{LMX}{ntxexx}{m}{n}
\SetSymbolFont{largesymbols}{bold}{LMX}{ntxexx}{b}{n}
\begin{document}
$\forall\exists<>\leq\geq\int\subseteq\supseteq$
\[\int abcdefghijklmnopqrstuvwxyz+-=\alpha\]
\end{document}
但是,如果您只想使用字体中的几个符号,那么这不是一个好方法(因为largesymbols
现在所有使用的东西都会使用newtxmath
字体),而且它也无法正常工作(因为LMX
不等同于OMX
)。
因此,最好创建一个新的符号字体并使用它来重新定义所需的符号(如egreg 的回答确实如此)。
但是,您可能还想使用 中的数学扩展 A 的积分符号newtxmath
。在这种情况下,您需要设置一个附加字体,但是此配置可以直接从中获取,newtxmath.sty
因为它已经定义了一个附加符号字体。
综合起来:
\documentclass[a4paper]{report}
\usepackage{mathtools}
\makeatletter
\DeclareFontEncoding{LMX}{}{}
\DeclareFontSubstitution{LMX}{ntxexx}{m}{n}
\DeclareFontFamily{LMX}{ntxexx}{}
\DeclareFontShape{LMX}{ntxexx}{m}{n}{<->ntxexx}{}
\DeclareFontShape{LMX}{ntxexx}{b}{n}{<->ntxbexx}{}
\DeclareFontShape{LMX}{ntxexx}{bx}{n}{<->ssub ntxexx/b/n}{}
\DeclareSymbolFont{largesymbolsTX}{LMX}{ntxexx}{m}{n}
\SetSymbolFont{largesymbolsTX}{bold}{LMX}{ntxexx}{b}{n}
\DeclareMathSymbol{\intop}{\mathop}{largesymbolsTX}{"52}
\def\int{\intop\nolimits}
\DeclareMathSymbol{\ointop}{\mathop}{largesymbolsTX}{"48}
\def\oint{\ointop\nolimits}
\DeclareSymbolFont{largesymbolsTXA}{U}{ntxexa}{m}{n}
\SetSymbolFont{largesymbolsTXA}{bold}{U}{ntxexa}{b}{n}
\DeclareFontSubstitution{U}{ntxexa}{m}{n}
\def\re@DeclareMathSymbol#1#2#3#4{%
\let#1=\undefined
\DeclareMathSymbol{#1}{#2}{#3}{#4}}
\re@DeclareMathSymbol{\oiintop}{\mathop}{largesymbolsTXA}{8}
\def\oiint{\oiintop\ilimits@}
\re@DeclareMathSymbol{\ointctrclockwiseop}{\mathop}{largesymbolsTXA}{10}
\def\ointctrclockwise{\ointctrclockwiseop\ilimits@}
\re@DeclareMathSymbol{\ointclockwiseop}{\mathop}{largesymbolsTXA}{12}
\def\ointclockwise{\ointclockwiseop\ilimits@}
\re@DeclareMathSymbol{\sqintop}{\mathop}{largesymbolsTXA}{14}
\def\sqint{\sqintop\ilimits@}
\re@DeclareMathSymbol{\iintop}{\mathop}{largesymbolsTXA}{33}
\def\iint{\iintop\ilimits@}
\re@DeclareMathSymbol{\iiintop}{\mathop}{largesymbolsTXA}{35}
\def\iiint{\iiintop\ilimits@}
\re@DeclareMathSymbol{\iiiintop}{\mathop}{largesymbolsTXA}{37}
\def\iiiint{\iiiintop\ilimits@}
\re@DeclareMathSymbol{\idotsintop}{\mathop}{largesymbolsTXA}{39}
\def\idotsint{\idotsintop\ilimits@}
\re@DeclareMathSymbol{\oiiintop}{\mathop}{largesymbolsTXA}{41}
\def\oiiint{\oiiintop\ilimits@}
\re@DeclareMathSymbol{\varointctrclockwiseop}{\mathop}{largesymbolsTXA}{43}
\def\varointctrclockwise{\varointctrclockwiseop\ilimits@}
\re@DeclareMathSymbol{\varointclockwiseop}{\mathop}{largesymbolsTXA}{45}
\def\varointclockwise{\varointclockwiseop\ilimits@}
\re@DeclareMathSymbol{\fintop}{\mathop}{largesymbolsTXA}{62}
\def\fint{\fintop\ilimits@}
\re@DeclareMathSymbol{\oiintctrclockwiseop}{\mathop}{largesymbolsTXA}{64}
\def\oiintctrclockwise{\oiintctrclockwiseop\ilimits@}
\re@DeclareMathSymbol{\varoiintclockwiseop}{\mathop}{largesymbolsTXA}{66}
\def\varoiintclockwise{\varoiintclockwiseop\ilimits@}
\re@DeclareMathSymbol{\oiiintctrclockwiseop}{\mathop}{largesymbolsTXA}{68}
\def\oiiintctrclockwise{\oiiintctrclockwiseop\ilimits@}
\re@DeclareMathSymbol{\varoiiintclockwiseop}{\mathop}{largesymbolsTXA}{70}
\def\varoiiintclockwise{\varoiiintclockwiseop\ilimits@}
\re@DeclareMathSymbol{\oiintclockwiseop}{\mathop}{largesymbolsTXA}{72}
\def\oiintclockwise{\oiintclockwiseop\ilimits@}
\re@DeclareMathSymbol{\varoiintctrclockwiseop}{\mathop}{largesymbolsTXA}{74}
\def\varoiintctrclockwise{\varoiintctrclockwiseop\ilimits@}
\re@DeclareMathSymbol{\oiiintclockwiseop}{\mathop}{largesymbolsTXA}{76}
\def\oiiintclockwise{\oiiintclockwiseop\ilimits@}
\re@DeclareMathSymbol{\varoiiintctrclockwiseop}{\mathop}{largesymbolsTXA}{78}
\def\varoiiintctrclockwise{\varoiiintctrclockwiseop\ilimits@}
\re@DeclareMathSymbol{\sqiintop}{\mathop}{largesymbolsTXA}{80}
\def\sqiint{\sqiintop\ilimits@}
\re@DeclareMathSymbol{\sqiiintop}{\mathop}{largesymbolsTXA}{82}
\def\sqiiint{\sqiiintop\ilimits@}
\makeatother
\begin{document}
$\forall\exists<>\leq\geq\int\subseteq\supseteq$
\[\int abcdefghijklmnopqrstuvwxyz+-=\alpha\]
\[\int \oint \iint \iiint \iiiint \idotsint \idotsint \]
\end{document}
答案2
我不知道你为什么要使用mathptmx
并替换符号,newtxmath
而不是直接使用后者。提供的字体mathptmx
大部分都很丑陋,因为它们是从各种来源构建的;尤其是希腊字母很讨厌。
但是,您可以按照以下方法处理积分。其他符号就留给您了。请注意,它newtx
对其数学扩展字体使用了不同的字体编码,因为它比标准 OMX 编码容纳了更多的字符。此外,定义largesymbols
数学组肯定不推荐,因为这必须伴随着几个符号的重新定义(或者至少需要彻底检查 OMX 和 LMX 编码之间的差异)。
\documentclass{article}
\usepackage{mathptmx}
\DeclareFontEncoding{LMX}{}{}
\DeclareFontSubstitution{LMX}{ntxexx}{m}{n}
\DeclareFontFamily{LMX}{ntxexx}{}
\DeclareFontShape{LMX}{ntxexx}{m}{n}{<-> ntxexx}{}
\DeclareFontShape{LMX}{ntxexx}{b}{n}{<-> ntxbexx}{}
\DeclareFontShape{LMX}{ntxexx}{bx}{n}{<->ssub ntxexx/b/n}{}
\DeclareSymbolFont{largesymbolsNT}{LMX}{ntxexx}{m}{n}
\DeclareMathSymbol{\intop}{\mathop}{largesymbolsNT}{"52}
\begin{document}
\[
\int_a^b f(x)\,dx
\]
\end{document}