我最近升级了我的计算机,在我的旧电脑上,此代码
\RequirePackage{fix-cm}
\documentclass{scrbook}
\usepackage[no-math]{fontspec}
\usepackage{xunicode,xltxtra}
\usepackage{mathspec}
% Mathfont
\setmathfont{STIXGeneral}
\usepackage[german]{babel} % Neue Rechtschreibung
\usepackage{hyperref}
\usepackage[all]{hypcap} % Link to start of figures, not captions
\newcommand{\interpolationOp}[1]{\ensuremath{L_{#1}}}
\begin{document}
\tableofcontents
\section{Der Interpolationsfehler
\texorpdfstring{\( \|f-\interpolationOp{\mathbf{M}}f\| \)}{||f- IMf||}
}
\end{document}
将使用 XeLaTeX 生成正确的 PDF-Meta-TOC 和正确的 TOC。
但是现在目录是这样的
删除 mathspec 或 babel packes 会删除有问题的目录,但我需要这两个包。此外,文件.aux
指出
\@writefile{toc}{\contentsline {section}{\numberline {0.1}Der Interpolationsfehler \( \delimiter "026B30D f-\ensuremath {L_{\mathbf {M}}}f\delimiter "026B30D \)}{1}{section.0.1}}
看起来像是TeX
正在扩展(但不知何故,因为我换了电脑)\|
,尽管来自的提示这里,声明一个强命令是行不通的。
有什么想法,为什么在我的新设置中会出现这种情况(虽然我说不出有什么区别,旧电脑现在不可用,可能是 MacTex 2013 和 2012 之间的区别)?
答案1
问题是\|
扩展为
\delimiter "026B30D
在.toc
文件和引号mathspec
加载时会干扰 XeLaTeX。
解决方案:添加
\protected\def\|{\Vert}
到你的序言。但是,如果你在章节标题中使用,问题会是一样的\Vert
(不要这样做!)
不要加载xunicode
和xltxtra
。说明需要它们的文档已经过时了。
我不会使用mathspec
:
\documentclass{scrbook}
\usepackage{unicode-math}
\setmainfont{TeX Gyre Termes} % or any other Times-like font
\setmathfont{XITS Math}
\usepackage[german]{babel} % Neue Rechtschreibung
\usepackage{hyperref}
\usepackage[all]{hypcap} % Link to start of figures, not captions
\newcommand{\interpolationOp}[1]{\ensuremath{L_{#1}}}
\begin{document}
\tableofcontents
\section{Der Interpolationsfehler
\texorpdfstring{\( \|f-\interpolationOp{\mathbf{M}}f\| \)}{||f- IMf||}
}
\end{document}
我不会使用任何一个\ensuremath
的定义\interpolationOp
。
答案2
因此,一种肮脏且相当本地化的方式(因为它只影响这一点\section
)就是
\texorpdfstring{\( {\protect\|}f-\interpolationOp{\mat{M}}f{\protect\|}\)}{||f- LMf||}
以免它们被扩大。编辑:但当然,这应该在命令中使用,或者 - 甚至更好 - 使用 @egreg 在他的回答中的注释。