我正在尝试让 hepparticles/hepnames 包与 XeLaTeX 配合使用。我使用 Libertine 作为衬线字体,使用 Biolinum 作为无衬线字体。粒子名称不知何故以错误的字体呈现。
HEP 软件包插入了高能物理中使用的粒子名称的字形。它们应该(我认为)使用当前的字体和样式,但它们实际使用的字体不一致。在下面的 MWE 中,我使用了一个简单的粒子名称 (B) 来比较字母 B 的正常渲染和使用 \PB 宏插入的粒子名称,它们应该是相同的。
我尝试了不同的加载包的顺序:
字体规范已加载前HEP 软件包
\documentclass{minimal}
\usepackage{fontspec}
\setmainfont{Linux Libertine}
\setsansfont{Linux Biolinum}
\usepackage{hepparticles}
\usepackage{hepnames}
\begin{document}
\begin{tabular}{p{1.5cm}p{1.5cm}p{1.5cm}p{1.5cm}p{1.5cm}}
~ & Normal & textsf & textit & textsf+textit \\
B & B & \textsf{B} & \textit{B} & \textit{\textsf{B}} \\
PB & \PB & \textsf{\PB} & \textit{\PB} & \textit{\textsf{\PB}} \\
\end{tabular}
\end{document}
正常字形使用错误的字体,sf 字形使用错误的字体和衬线,但斜体版本都是正确的:
字体规范已加载后HEP 软件包
\documentclass{minimal}
\usepackage{hepparticles}
\usepackage{hepnames}
\usepackage{fontspec}
\setmainfont{Linux Libertine}
\setsansfont{Linux Biolinum}
\begin{document}
\begin{tabular}{p{1.5cm}p{1.5cm}p{1.5cm}p{1.5cm}p{1.5cm}}
~ & Normal & textsf & textit & textsf+textit \\
B & B & \textsf{B} & \textit{B} & \textit{\textsf{B}} \\
PB & \PB & \textsf{\PB} & \textit{\PB} & \textit{\textsf{\PB}} \\
\end{tabular}
\end{document}
所有字形都使用正确的样式,但字体都错误除了衬线斜体字形。
接下来我使用 libertine/biolinum 包代替 fontspec,并使用 pdflatex 编译文件以进行比较:
字体包已加载后HEP 软件包
\documentclass{minimal}
\usepackage{hepparticles}
\usepackage{hepnames}
\usepackage{libertineRoman}
\usepackage{biolinum}
\begin{document}
\begin{tabular}{p{1.5cm}p{1.5cm}p{1.5cm}p{1.5cm}p{1.5cm}}
~ & Normal & textsf & textif & textsf+textit \\
B & B & \textsf{B} & \textit{B} & \textit{\textsf{B}} \\
PB & \PB & \textsf{\PB} & \textit{\PB} & \textit{\textsf{\PB}} \\
\end{tabular}
\end{document}
pdflatex
所有字形均具有正确的样式和错误的字体:
赛莱特
所有字形都使用正确的样式,但字体都错误除了衬线斜体字形。
字体包已加载前HEP 软件包
\documentclass{minimal}
\usepackage{libertineRoman}
\usepackage{biolinum}
\usepackage{hepparticles}
\usepackage{hepnames}
\begin{document}
\begin{tabular}{p{1.5cm}p{1.5cm}p{1.5cm}p{1.5cm}p{1.5cm}}
~ & Normal & textsf & textit & textsf+textit \\
B & B & \textsf{B} & \textit{B} & \textit{\textsf{B}} \\
PB & \PB & \textsf{\PB} & \textit{\PB} & \textit{\textsf{\PB}} \\
\end{tabular}
\end{document}
pdflatex
所有字形均使用正确的样式,并且均具有正确的字体除了衬线斜体字形。(这对我来说没问题,只是我想使用 xelatex。)
赛莱特
正常字形使用错误的字体,sf 字形使用错误的字体和衬线,但斜体版本都是正确的:
答案1
好的,所以 egreg 的评论为我指明了正确的方向。我尝试使用 来mathspec
更改数学字体,但没有成功。仔细查看 中的宏后hepparticles
,我发现它们使用\mathup
和类似的宏来渲染粒子名称。我找不到如何使用 来更改它们mathspec
,所以我切换到unicode-math
并找到了一个可以给出令人满意的结果的工作配置:
\documentclass{minimal}
\usepackage{hepparticles}
\usepackage{hepnames}
\usepackage{fontspec}
\setmainfont{Linux Libertine}
\setsansfont[BoldItalicFont=Linux Biolinum O Bold Oblique]{Linux Biolinum}
\usepackage[math-style=ISO]{unicode-math}
\setmathfont{Linux Libertine}
\setmathfont[range=\mathrm]{Linux Libertine}
\setmathfont[range=\mathup]{Linux Libertine}
\setmathfont[range=\mathit]{Linux Libertine Italic}
\setmathfont[range=\mathbf]{Linux Libertine Bold}
\setmathfont[range=\mathbfit]{Linux Libertine Bold Italic}
\setmathfont[range=\mathsf]{Linux Biolinum}
\setmathfont[range=\mathsfup]{Linux Biolinum}
\setmathfont[range=\mathsfit]{Linux Biolinum Italic}
\setmathfont[range=\mathbfsf]{Linux Biolinum Bold}
\setmathfont[range=\mathbfsfit]{Linux Biolinum O Bold Oblique}
\begin{document}
\begin{tabular}{p{1.5cm}p{1.5cm}p{1.5cm}p{1.5cm}p{1.5cm}}
~ & Normal & textsf & textit & textsf+textit \\
B & B & \textsf{B} & \textit{B} & \textit{\textsf{B}} \\
PB & \PB & \textsf{\PB} & \textit{\PB} & \textit{\textsf{\PB}} \\
\end{tabular}
\end{document}
编辑:我遇到了一个后续问题,该问题将在另一个线程。