字体规范已加载前HEP 软件包

字体规范已加载前HEP 软件包

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

在此处输入图片描述

编辑:我遇到了一个后续问题,该问题将在另一个线程

相关内容