![使用 XeTex 编译时产生错误的章节编号](https://linux22.com/image/355903/%E4%BD%BF%E7%94%A8%20XeTex%20%E7%BC%96%E8%AF%91%E6%97%B6%E4%BA%A7%E7%94%9F%E9%94%99%E8%AF%AF%E7%9A%84%E7%AB%A0%E8%8A%82%E7%BC%96%E5%8F%B7.png)
我有一个论文的驱动程序文件,所有章节都包含\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/