使用 siunitx 和 xelatex 显示摄氏度时出现问题

使用 siunitx 和 xelatex 显示摄氏度时出现问题

我正在尝试在使用 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}

相关内容