我正在尝试在运行英文版 Windows 7 的日本计算机上为角度写一个度数符号。考虑在 TeXLive 2017 上使用 LuaLaTeX 1.0.4 编译的以下 MWE:
\documentclass{scrreprt}
\usepackage{siunitx}
\usepackage{lmodern}
\usepackage{polyglossia}
\setdefaultlanguage{english}
\begin{document}
The angle is \ang{30}.
\end{document}
该代码的输出是以下字符串:
通过将 documentclass 更改为 report 或删除 lmodern,我得到了正确的度数符号。为什么会发生这种情况?有没有办法使用这些包来生成正确的字符?
答案1
该问题与 KOMA-Script 无关。使用当前的 TeX Live 2018,我使用标准类report
而不是获得了相同的结果scrreprt
。
您不需要\usepackage{lmodern}
,因为 LuaLaTeX 已经使用 Latin Modern 作为默认字体。此外,默认(没有lmodern
)使用的是 OpenType Latin Modern 字体。这些是 unicode 字体,包含的字形比 所使用的旧字体多得多,\usepackage{lmodern}
并且限制为 256 个字符。而且 LuaLaTeX 准备使用其中几个额外的字形。
如果您加载\usepackage{lmodern}
并切换到旧字体,则每个字体限制为 256 个字符。所以您不应该使用\usepackage{lmodern}
。
顺便说一句:如果您想使用其他字体而不是默认的 Latin Modern,建议使用包fontspec
和命令(如\setmainfont
等\setsansfont
)来加载 OpenType(或至少是 Type-1)字体。此类字体可以包含远超 256 个字符。
因此我建议使用:
\documentclass{report}
\usepackage{siunitx}
\usepackage{polyglossia}
\setdefaultlanguage{english}
\begin{document}
The angle is \ang{30}.
\end{document}
或者
\documentclass{report}
\usepackage{fontspec}
\usepackage{siunitx}
\usepackage{polyglossia}
\setdefaultlanguage{english}
\begin{document}
The angle is \ang{30}.
\end{document}
对于额外的数学功能,另请参阅包unicode-math
。