我正在尝试在使用 xelatex 和 siunitx 的文档中讨论温度。
The temperature was further increased to \SI{200}{\degreeCelsius}.
使用 xelatex 时,会导致单位位置出现一个空心框。使用 pdflatex 和发行版提供的字体时,效果很好。有没有我遗漏的解决方案?
这是我正在使用的字体 ITC Baskerville Std Roman 的字符指南链接。 http://store2.adobe.com/cfusion/store/html/index.cfm?store=OLS-UK&event=displayFont&code=BASQ10005000
我也尝试过 Times New Roman,但没有成功。
我正在使用已完全更新的 texlive 2011。
非常感谢,
平均能量损失
\documentclass{article}
\usepackage{fontspec}
\setmainfont[Mapping=tex-text]{Times New Roman}
%\usepackage{xkeyval}
%\usepackage{polyglossia}
%\setdefaultlanguage[variant=british]{english}
%\usepackage{etoolbox}
\usepackage{siunitx}
\begin{document}
The temperature was \SI{200}{\degreeCelsius}.
\end{document}
答案1
扩展约瑟夫的答案,你可以找到具有所需符号的匹配字体;例如,如果你的 Times New Roman 没有 ℃ 符号,那么你可以这样做
\newfontfamily{\tgtermes}[Ligatures=TeX]{TeX Gyre Termes}
\usepackage{siunitx}
\usepackage{newunicodechar}
\newunicodechar{℃}{{\tgtermes ℃}}
\sisetup{text-celsius = ℃}
从而只对您需要的字符使用不同的字体。或者,您也可以尝试伪造符号:
\sisetup{text-celsius = $^\circ\mkern-1mu$C}
(调整字距量)。
答案2
该siunitx
软件包内置了一组用于处理标准 LaTeX 字体的基本符号选择。但是,在使用 XeLaTeX 或 LuaLaTeX 加载系统字体时,这些符号可能有效,也可能无效。字体并不涵盖所有符号,检测所有可能的组合也不现实。因此,在使用非标准字体时,最终用户需要做出适当的选择,例如使用
\sisetup{text-celsius = <symbol or appropriate macro>}
日志文件可能会显示
LaTeX Font Warning: Some font shapes were not available, defaults substituted.
如果没有合适的符号。(这取决于所使用的字体。)
答案3
使用 TeX Gyre Times 字体,有度数符号:
\documentclass{article}
\usepackage{fontspec}
\fontspec[Extension=.otf,
BoldFont=texgyretermes-bold,
ItalicFont=texgyretermes-italic,
BoldItalicFont=texgyretermes-bolditalic]{texgyretermes-regular}
\addfontfeatures{Mapping=tex-text}
\usepackage{siunitx}
\setmainfont{TeX Gyre Termes}
\begin{document}
The temperature was \SI{200}{\degreeCelsius}.
\end{document}
如果你使用的是 Linux,那么请注意,它xelatex
会找到 TeXLive 的开放字体,位于$texmf-dist/fonts/opentype/public/texgyre/
。使用lualatex
它没有问题。
答案4
我正在发布另一个更新的答案,因为我刚刚遇到了与 LuaLaTeX 非常相似的问题,并且自发布此问题以来,siunitx 包已经发生了变化,答案现在已经过时了
\sisetup{text-celsius = <symbol or appropriate macro>}
不再有效。将这段代码放入我的序言中可以为我修复一个缺失的度数符号:
\usepackage{gensymb}
\DeclareSIUnit[quantity-product = \,]{\degreeCelsius}{\ensuremath{\degree} C}