使用 XeTex 编译时产生错误的章节编号

使用 XeTex 编译时产生错误的章节编号

我有一个论文的驱动程序文件,所有章节都包含\input命令。我注意到只有在第六章章节编号是错误的,尽管它们在 ** 目录** 中显示正确。我得到的是 ** 0.1 Nanoslits **,而我应该得到的是 ** 6.1 Nanoslits **。

编译是在 Windows 10 64 位上完成的,并安装了 TexLive 2016 完整版。经过大量修改后,我得到了一个可以重现该问题的示例,并且篇幅很短。以下是平均能量损失以下是相关内容类文件

\documentclass[titlepage, footnotes, a4paper]{kuthesismod} 
\usepackage{xspace}
\usepackage{ifxetex}
\ifxetex
    \usepackage{unicode-math} 
    \setmainfont[Numbers=OldStyle,Ligatures=Common,Mapping=tex-text]{Linux Libertine O}
    \setmathfont{Libertinus Math}
\else  
    \usepackage[utf8]{inputenc} 
    \usepackage[T1]{fontenc} 
    \usepackage[oldstyle]{libertine} 
    \usepackage{libertinust1math}
\fi
\usepackage{hyperref} 

\newcommand{\figref}[1]{Figure~\ref{#1}}
\newcommand{\tabref}[1]{Table~\ref{#1}}
\renewcommand{\eqref}[1]{Equation~\ref{#1}}
\newcommand{\chapref}[1]{Chapter~\ref{#1}}
\newcommand*\chem[1]{\ensuremath{\mathrm{#1}}} 
\emergencystretch = 1 em
\begin{document}
    \prelimpages
    \tableofcontents
    \textpages
    \chapter{Introduction}\label{chp:intro}
        \section{Literature Review}

        \section{Thesis Outline}

    \chapter{Background Information}\label{chp:bg}
        \section{Brief review of electromagnetic theory}

        \section{Permittivities of metals}

            \subsection{Lorentz Model}

            \subsection{Drude Model}

            \subsection{Extended Drude Model}

        \section{Plasmons}

            \subsection{Volume Plasmons}

            \subsection{Surface Plasmon Polaritons}

        \chapter{Single Scatterers}\label{chp:singlescat}

        \section{Single Grating}

        \section{Rectangular Nanoslit}

        \section{\texorpdfstring{$\Delta$}{Delta}-antenna} 

    \chapter{SPP beam launcher}\label{chp:sppbeam}

        \section{Reproduction of Hermite-Gauss SPP Beam} 

        \section{Stripe Waveguide Coupling}

    \chapter{Scalar Wave Theory}\label{chp:scalarwave} 

        \section{Antenna Arrays} 

            \subsection{Linear Arrays}

            \subsection{Coupler Design}

        \chapter{Mode Coupling}\label{chp:modecoup}

        \section{Nanoslits}

        \section{\texorpdfstring{$\Delta$-antennas}{Delta-antennas}}

            \subsection{\texorpdfstring{Design with $w_b$ = 500 nm, $h$ = 800 nm }{Design 1}}

            \subsection{\texorpdfstring{Design with $w_b$ = 900 nm, $h$ = 800 nm }{Design 2}}

            \subsection{\texorpdfstring{Design with $w_b$ = 900 nm, $h$ = 800 nm with SPP on air-metal}{Design 3}}

    \chapter{Conclusion and Future Work}\label{chp:conc}

\end{document}

答案1

xelatex 正在查找错误的字体。如果像 David 的示例一样按名称加载字体

这是一个仅使用文章类的更简单的例子,它用 pdftex 和 luatex 给出 [6],用 xetex 给出 [0]。

如果您想回答,任何人都可以随意拿起这个例子(如果下次我来的时候有人发布了答案,我会删除它:-)

\documentclass{article} 

\ifx\Umathchar\undefined
    \usepackage[utf8]{inputenc} 
    \usepackage[T1]{fontenc} 
    \usepackage[oldstyle]{libertine} 
    \usepackage{libertinust1math}
\else  
    \usepackage{fontspec} 
    \setmainfont[Numbers=OldStyle,Ligatures=Common]{Linux Libertine O}
\fi

\begin{document}


[{\bfseries\slshape 6}]


\end{document}

它使用LinLibertine_RZI.otf而不是正确的LinLibertine_RBI.otf,并且没有正确的数字。

\documentclass{article}

\pagestyle{empty}
\begin{document}
\font\test= "[LinLibertine_RBI.otf]:script=latn;language=DFLT;+onum;"

\test 6 1234567890

\font\test= "Linux Libertine O/BI/OT:script=latn;language=DFLT;+onum;"

\test 6 1234567890

\font\test= "[LinLibertine_RZI.otf]:script=latn;language=DFLT;+onum;"

\test 6 1234567890

\end{document}

在此处输入图片描述

因此,您至少应该通过文件名而不是字体名称来加载此字体。例如,通过 libertine 包或手动加载:

\documentclass{article}
\usepackage{fontspec}

\setmainfont[Numbers=OldStyle,Ligatures=Common, 
            BoldItalicFeatures={Extension=.otf},
            BoldItalicFont = LinLibertine_RBI]{Linux Libertine O}
\begin{document}

[{\bfseries\slshape 6}]

\end{document}

添加

错误的字体意味着 xelatex 找到了不同的字体比 lualatex 更好。LinLibertine_RZI.otf是 libertine 的斜体半粗体变体。

但字体给出错误的旧式数字并不是 xelatex 的错,如果强制 luatex 使用该字体,也会发生这种情况。这显然是字体的一个缺陷,所以我添加了一个错误报告:https://sourceforge.net/p/linuxlibertine/bugs/331/

相关内容