我正在嘗試在我的論文中使用 Linux Libertine 字體。事實上,Libertine 確實有數學符號,但我無法在 unicode-math 中正確使用它們。以下範例總結了我從字體中逐步添加符號的嘗試,並突出顯示了失敗的情況。我知道有些問題無法解決,因為 OTF 字體不完全支援數學,但也許有些問題可以使用高級 TeX 技巧來解決。兩個主要問題是重音符號和括號;我可以容忍從另一種字體中獲取其他符號。
\documentclass{article}
\usepackage{amsmath}
\usepackage{xcolor}
\setlength{\parindent}{0pt}
\usepackage{fontspec}
\usepackage[partial=upright,nabla=upright]{unicode-math}
\newcommand{\sample}{\[ \underbrace{\frac{\partial y}{\partial x}R(x)^2}_{\text{Foo}} = \left[ \sum_{i=0}^\infty \tilde{f}_i \arcsin\left( \alpha_i^3 x \right) \right]^{-1} \sqrt[6]{\int \nabla y\times\mathbf{\theta}(y) \mathrm{d}\phi} \geq \mathring{\Omega}_\ell [d]\]}
\begin{document}
\sample
This is a correct rendering using Latin Modern. Let's try to add some Libertine\ldots
\setmainfont[Mapping=tex-text]{Linux Libertine O}
\setmathfont[range=\mathit/{latin,Latin,num,Greek,greek}]{Linux Libertine O Italic}
\setmathfont[range=\mathup/{latin,Latin,num,Greek,greek}]{Linux Libertine O}
\setmathfont[range=\mathbfup/{latin,Latin,num,Greek,greek}]{Linux Libertine O Bold}
\setmathfont[range=\mathbfit/{latin,Latin,num,Greek,greek}]{Linux Libertine O Bold Italic}
\setmathfont[range={"0300-"036F}]{Linux Libertine O}% Accents - won't compile correctly without this line
\setmathfont[range={"003D,"00D7,"2202,"2207,"2212,"221E,"2265}]{Linux Libertine O} % some more symbols, they work properly
% U+003D Equal sign
% U+00D7 Cross
% U+2202 Partial
% U+2207 Nabla
% U+2212 Minus
% U+221E Infinity
% U+2265 Greater or equal
\sample
\textcolor{red}{Problem 1:} accents are off (ugly hack: use \texttt{\backslash skew})\\
\textcolor{red}{Problem 2:} brackets are still in LM; at least the normal sized brackets must match the text, so let's add parentheses \& square brackets:
\setmathfont[range={"0028,"0029,"005B,"005D}]{Linux Libertine O}
\sample
\textcolor{red}{Problem 3:} only the right parenthesis extends\\
\textcolor{red}{Problem 4:} the underbrace became gibberish\\
Possible fix to 3 \& 4: include the extending brackets from `Miscellaneous Technical' unicode block (\texttt{U+239B}--\texttt{U+23AA}); unfortunately it doesn't change anything.
\medskip
Libertine has a summation and integral symbol, let's try to use them:
\setmathfont[range={"2211,"222B}]{Linux Libertine O}
\sample
\textcolor{red}{Problem 5:} the summation symbol is too small; Note that the integral symbol was broken to an top and bottom parts (both exist in the font), but there are no top and bottom parts of the summation symbol in this font.
\end{document}
答案1
除了 Linux Libertine 等非 OpenType 數學字型中的字母數字符號外,請勿使用任何其他符號。括號、大運算子(求和、積分等)、寬重音符號、字根等都需要特殊考慮,只有在完整的 OpenType 數學字型中才令人羨慕。
一般來說,如果您想要最高品質的數學排版,請僅使用完整的數學字體,正如您在第一個 Libertine 範例中看到的那樣,重音和根音都已關閉。
XITS Math 可能比較淺的 Latin Modern 字體更匹配。
答案2
自從提出這個問題以來,事情可能已經發生了變化,我相信它只解決了其中的一部分,但我也遇到了類似的情況(想在論文中使用Linux Libertine),當我找到這個包時,我感到如釋重負newtx
,它為在大量字體中設定數學提供了許多增強功能,特別關注 Linux Libertine。
我使用 XeLaTeX,簡而言之(真實文檔中的序言此時已超過 100 行......)將以下內容放入序言中:
\usepackage[libertine]{newtxmath}
\usepackage[no-math]{fontspec}
\setmainfont{Linux Libertine O}
突然之間,所有字距調整問題以及數學模式中的更多問題都預設得到了解決。
我甚至可以說,如果不付出努力,Linux Libertine 實際上無法用於包括數學在內的文件newtx
。人們可能會花費大量時間來添加手動跳過、空格和字距,或者可以加載newtxmath
.
我不知道在數學模式下定義字體指標的內部原理,所以我可能在技術上是錯誤的,但我確實相信,如果Linux Libertine 可以在主線中包含此外部包中的字距調整功能,那麼這將是Linux Libertine 的巨大增強字型。如果沒有它,數學模式下的幾乎每個字元集都會出現問題。
我希望那些發現這個問題的人能夠徹底探索這個包。
答案3
嘗試新的 TeX Gyre Pagella Math,它是 TL 2012 的一部分:
\documentclass{article}
\usepackage{amsmath}
\usepackage{xcolor}
\setlength{\parindent}{0pt}
\usepackage[partial=upright,nabla=upright]{unicode-math}
\setmainfont{Linux Libertine O}
\setmonofont{LinMonoO}
\setmathfont{TG Pagella Math}
\setmathfont[range={\mathcal,\mathbfcal},StylisticSet=1]{XITS Math}
\def\Macro#1{\texttt{\textbackslash#1}}
\begin{document}
\[ \underbrace{\frac{\partial y}{\partial x}R(x)^2}_{\text{Foo}} = \left[ \sum_{i=0}^\infty \tilde{f}_i \arcsin\left( \alpha_i^3 x \right) \right]^{-1} \sqrt[6]{\int \nabla y\times\mathbf{\theta}(y) \mathrm{d}\phi} \geq \mathring{\Omega}_\ell [d]
\]
\Macro{mathscr}: $\mathscr{ABCDEFGHIJKLMNOPQRSTUVWXYZ}$\\
\Macro{mathscr}: $\mathscr{abcdefghijklmnopqrstuvwxyz}$\\
\Macro{mathbfscr}: $\mathbfscr{ABCDEFGHIJKLMNOPQRSTUVWXYZ}$\\
\Macro{mathbfscr}: $\mathbfscr{abcdefghijklmnopqrstuvwxyz}$
\bigskip
\Macro{mathcal} and \Macro{mathbfcal}
\texttt{StylisticSet=1}: $\mathcal{ABCDEFGHIJKLMNOPQRSTUVWXYZ}$\\
\texttt{StylisticSet=1}: $\mathbfcal{ABCDEFGHIJKLMNOPQRSTUVWXYZ}$
\setmathfont[range={\mathcal,\mathbfcal},StylisticSet=2]{XITS Math}
\texttt{StylisticSet=2}: $\mathcal{ABCDEFGHIJKLMNOPQRSTUVWXYZ}$\\
\texttt{StylisticSet=2}: $\mathbfcal{ABCDEFGHIJKLMNOPQRSTUVWXYZ}$
\end{document}
答案4
CTAN 套件的維護者libertine
,也是事實上的Libertine 字型的維護者,建議使用
\usepackage{unicode-math}
\setmathfont[Scale=MatchUppercase]{libertinusmath-regular.otf}
用於 XeTeX 或 LuaTeX 中的「相容數學」。字型 libertinusmath-regular.otf 屬於libertinus 字體CTAN 包。如果我可以完全控制我現在正在修改的文檔中的字體選擇,我可能會完全切換到這些字體; Libertinus 是 Libertine 家族的一個分支,具有「修復了許多錯誤」和更多風格上的亮點。