忍了很久之后终于按捺不住诱惑,刚刚上手接触 XeTeX。选择字体实在太方便了,想想以前每次重配 LaTeX 安装字体时候花的功夫就觉得很崩溃…
现在好了,不管什么中文字体英文字体统统都是拿过来直接用,再也不用自己去生成 fontmap 之类的了。兴奋了一阵子之后,觉得要是能把 Arno Pro、Minion Pro 之类的字体融合到 MathTime 的符号多好… 可惜 fontspec 包对于数学的支持实在平平,作者另外搞了一个 unipre-math 据说不错,可是难道我们折腾半天就是为了用 Cambria Math?? 那么就自己来搞一下。
XeTeX 在 Windows 下的字体配置也很简单,只需要 fc-cache 一下,就可以用 fc-list 看到系统里面安装的字体了。MikTeX 2.8 把目录结构改了,虽然软件推荐另外找个目录,不过图省事,安装 MathTime Pro 就直接扔到 MikTeX 目录下。texhash 时候要加–admin 选项,否则这个目录就被它直接跳过去了。
首先不要让 fontspec 的数学模式插手了:
\documentclass[12pt,a4paper]{article} \usepackage{mtpro} \usepackage[no-math]{fontspec}
设置字体:Minion Pro/Myriad Pro
\setmainfont[]{Minion Pro} \setsansfont[Mapping=tex-text]{Myriad Pro}
然后把所有的 letter 和 operator 全部重新定义一遍:
\DeclareSymbolFont{letters}{\encodingdefault}{\rmdefault}{m}{it} \SetSymbolFont{letters}{bold}{\encodingdefault}{\rmdefault}{b}{it} \DeclareSymbolFont{upright}{\encodingdefault}{\rmdefault}{m}{n} \SetSymbolFont{upright}{bold}{\encodingdefault}{\rmdefault}{b}{n} \DeclareSymbolFont{operators}{\encodingdefault}{\rmdefault}{m}{n} \SetSymbolFont{operators}{normal}{\encodingdefault}{\rmdefault}{m}{n} \SetMathAlphabet{\mathrm}{normal}{\encodingdefault}{\rmdefault}{m}{n} \SetMathAlphabet{\mathit}{normal}{\encodingdefault}{\rmdefault}{m}{it}
注意这个 mathbf。如果直接把 mathbf 定义成 {\rmdefault}{bx}{it},那么拿到的是 MinionPro-Semibold。因为 Regular 的 bx 形式是 Semibold 而不是 Bold,Bold 则是另外一个字体。怎么才能知道合适的 family 值呢?(重新 setmainfont 之后用了 showrmdefault 看了一下…)
\setmainfont[]{Minion Pro Bold} \SetMathAlphabetmathbf{normal}{\encodingdefault}{\rmdefault}{m}{it} \setmainfont[]{Minion Pro}
由于已经回避了 fontspec 的数学处理,为了保险起见,整个把相关内容全部重定义:
\DeclareMathSymbol{!}{\mathclose}{upright}{33} \DeclareMathSymbol{\mathrel} {upright}{58} \DeclareMathSymbol{;}{\mathpunct}{upright}{59} \DeclareMathSymbol{.}{\mathord}{upright}{46} \DeclareMathSymbol{,}{\mathpunct}{upright}{44} \DeclareMathSymbol{?}{\mathclose}{upright}{63} \DeclareMathSymbol{0}{\mathalpha}{upright}{`0} \DeclareMathSymbol{1}{\mathalpha}{upright}{`1} \DeclareMathSymbol{2}{\mathalpha}{upright}{`2} \DeclareMathSymbol{3}{\mathalpha}{upright}{`3} \DeclareMathSymbol{4}{\mathalpha}{upright}{`4} \DeclareMathSymbol{5}{\mathalpha}{upright}{`5} \DeclareMathSymbol{6}{\mathalpha}{upright}{`6} \DeclareMathSymbol{7}{\mathalpha}{upright}{`7} \DeclareMathSymbol{8}{\mathalpha}{upright}{`8} \DeclareMathSymbol{9}{\mathalpha}{upright}{`9} \DeclareMathSymbol{+}{\mathbin}{upright}{43} \DeclareMathSymbol{=}{\mathrel}{upright}{61} \DeclareMathSymbol{.}{\mathord}{upright}{46} \DeclareMathSymbol{,}{\mathpunct}{upright}{44} \DeclareMathSymbol{}{\mathrel}{letters}{62} \DeclareMathDelimiter{(}{\mathopen} {upright}{40}{largesymbols}{0} \DeclareMathDelimiter{)}{\mathclose}{upright}{41}{largesymbols}{1} \DeclareMathDelimiter{[}{\mathopen} {upright}{91}{largesymbols}{2} \DeclareMathDelimiter{]}{\mathclose}{upright}{93}{largesymbols}{3} \DeclareMathDelimiter{/}{\mathord}{upright}{47}{largesymbols}{14} \DeclareMathSymbol{\mathdollar}{\mathord}{upright}{36} \renewcommand{\vec}[1]{\mathbf{#1}} \renewcommand{\partial}{\mathrm{∂}} \renewcommand{\imath}{\mathit{ı}} \renewcommand{\jmath}{\mathit{ȷ}} \renewcommand{\alpha}{\mathit{α}} \renewcommand{\beta}{\mathit{β}} \renewcommand{\gamma}{\mathit{γ}} \renewcommand{\delta}{\mathit{δ}} \renewcommand{\epsilon}{\mathit{ε}} \renewcommand{\zeta}{\mathit{ζ}} \renewcommand{\eta}{\mathit{η}} \renewcommand{\theta}{\mathit{θ}} \renewcommand{\iota}{\mathit{ι}} \renewcommand{\kappa}{\mathit{κ}} \renewcommand{\nu}{\mathit{ν}} \renewcommand{\xi}{\mathit{ξ}} \renewcommand{\pi}{\mathit{π}} \renewcommand{\rho}{\mathit{ρ}} \renewcommand{\sigma}{\mathit{σ}} \renewcommand{\tau}{\mathit{τ}} \renewcommand{\upsilon}{\mathit{υ}} \renewcommand{\phi}{\mathit{φ}} \renewcommand{\chi}{\mathit{χ}} \renewcommand{\Gamma}{\mathit{Γ}} \renewcommand{\Delta}{\mathit{Δ}} \renewcommand{\Theta}{\mathit{Θ}} \renewcommand{\Xi}{\mathit{Ξ}} \renewcommand{\Pi}{\mathit{Π}} \renewcommand{\Sigma}{\mathit{Σ}} \renewcommand{\Upsilon}{\mathit{Υ}} \renewcommand{\Phi}{\mathit{Φ}} \renewcommand{\varphi}{\mathit{ϕ}} \renewcommand{\Lambda}{\mathit{Λ}} \renewcommand{\Psi}{\mathit{Ψ}} \renewcommand{\Omega}{\mathit{Ω}} \renewcommand{\mu}{\mathit{μ}} \renewcommand{\omega}{\mathit{ω}} \renewcommand{\psi}{\mathit{ψ}} \renewcommand{\lambda}{\mathit{λ}} \renewcommand{\vartheta}{\mathit{ϑ}} \renewcommand{\varsigma}{\mathit{ς}} \renewcommand{\varpi}{\mathit{ϖ}} \renewcommand{\varkappa}{\mathit{ϰ}} \renewcommand{\upalpha}{\mathrm{α}} \renewcommand{\upbeta}{\mathrm{β}} \renewcommand{\upgamma}{\mathrm{γ}} \renewcommand{\updelta}{\mathrm{δ}} \renewcommand{\upepsilon}{\mathrm{ε}} \renewcommand{\upzeta}{\mathrm{ζ}} \renewcommand{\upeta}{\mathrm{η}} \renewcommand{\uptheta}{\mathrm{θ}} \renewcommand{\upiota}{\mathrm{ι}} \renewcommand{\upkappa}{\mathrm{κ}} \renewcommand{\upnu}{\mathrm{ν}} \renewcommand{\upxi}{\mathrm{ξ}} \renewcommand{\uppi}{\mathrm{π}} \renewcommand{\uprho}{\mathrm{ρ}} \renewcommand{\upsigma}{\mathrm{σ}} \renewcommand{\uptau}{\mathrm{τ}} \renewcommand{\upupsilon}{\mathrm{υ}} \renewcommand{\upphi}{\mathrm{φ}} \renewcommand{\upchi}{\mathrm{χ}} \renewcommand{\upGamma}{\mathrm{Γ}} \renewcommand{\upDelta}{\mathrm{Δ}} \renewcommand{\upTheta}{\mathrm{Θ}} \renewcommand{\upXi}{\mathrm{Ξ}} \renewcommand{\upPi}{\mathrm{Π}} \renewcommand{\upSigma}{\mathrm{Σ}} \renewcommand{\upUpsilon}{\mathrm{Υ}} \renewcommand{\upPhi}{\mathrm{Φ}} \renewcommand{\upvarphi}{\mathrm{ϕ}} \renewcommand{\upLambda}{\mathrm{Λ}} \renewcommand{\upPsi}{\mathrm{Ψ}} \renewcommand{\upOmega}{\mathrm{Ω}} \renewcommand{\upmu}{\mathrm{μ}} \renewcommand{\upomega}{\mathrm{ω}} \renewcommand{\uppsi}{\mathrm{ψ}} \renewcommand{\uplambda}{\mathrm{λ}} \renewcommand{\upvartheta}{\mathrm{ϑ}} \renewcommand{\upvarsigma}{\mathrm{ς}} \renewcommand{\upvarpi}{\mathrm{ϖ}} \renewcommand{\upvarkappa}{\mathrm{ϰ}}
这个过程看起来很傻… 不过反正最后都裹起来不给人家看到就是了…
中文的内容要放到这个之后,诸如
\usepackage[CJKaddspaces]{xeCJK} \usepackage{xunipre} \usepackage{xltxtra} \setCJKmainfont{Adobe Song Std} \setCJKsansfont{Adobe Heiti Std} \setCJKfamilyfont{song}{Adobe Song Std} \XeTeXlinebreaklocale "zh" \XeTeXlinebreakskip = 0pt plus 1pt
想推倒了…
IT男!
大师呀。。。
我是来围观的。。。。完全看不懂。。。。
。。。太复杂了,请发明简单易用的。。