由于各种原因,我正在将大型文档切换到 lualatex,并且我注意到当包 fontspec 和 titletoc 一起加载时目录出现问题,并且字体大小大于默认的 10pt。
当目录中显示的页码超过 3 位数字时,它会超出右边距。
快速搜索发现了类似的问题(http://www.macfreek.nl/memory/LaTeX_package_conflicts#XeTeX_and_titletoc) 但它与 XeTeX 有关,所以我不确定它是否相关。
梅威瑟:
\documentclass[12pt]{book}
\usepackage{lipsum}
\usepackage[showframe]{geometry}
\usepackage{fontspec}
\usepackage{titletoc}
\begin{document}
\tableofcontents
\chapter{Chapter 1}
\section{Section 1.1}
\lipsum[1-100]
\section{Section 1.2}
\lipsum[1-100]
\section{Section 1.3}
\lipsum[1-100]
\chapter{Chapter 2}
\section{Section 2.1}
\lipsum[1-100]
\section{Section 2.2}
\lipsum[1-100]
\section{Section 2.3}
\lipsum[1-100]
\chapter{Chapter 3}
\section{Section 3.1}
\lipsum[1-100]
\section{Section 3.2}
\lipsum[1-100]
\section{Section 3.3}
\lipsum[1-100]
\end{document}
这在第一页上产生了此结果。请注意 3 位数字的页码如何延伸到文本区域之外(仅适用于部分行,但不适用于章节行...)
更改为 10pt,或者注释 \usepackage{fontspec} 或 \usepackage{titletoc} 可消除该问题。
答案1
我猜你的问题是“这里发生了什么事?”
加载中fontspec
将当前字体从 Computer Modern 更改为 Latin Modern。而目录中页码宽度的长度由 给出,\@pnumwidth
根据字体使用em
s 定义。
为了隔离问题,请使用 XeLaTeX 或 LuaLaTeX 编译以下文档:
\documentclass[12pt]{article}
\newlength{\nofontspecem}
\setlength{\nofontspecem}{1em}
\showthe\nofontspecem% Length of 1em in Computer Modern
\usepackage{fontspec}
\newlength{\fontspecem}
\setlength{\fontspecem}{1em}
\showthe\fontspecem% Length of 1em in Latin Modern
\begin{document}
abc
\end{document}
演出.log
> 11.74988pt.
l.5 \showthe\nofontspecem
% Length of 1em in Computer Modern
...
> 10.0pt.
l.11 \showthe\fontspecem
% Length of 1em in Latin Modern
em
因此,Computer Modern 的底字体比 Latin Modern 的底字体略宽12pt
。这样\@pnumwidth
可以留出更多空间来放置目录页码,而不会让它们溢出到右边距。
如何解决这个问题?提供一个适当的值,\@pnumwidth
该值大于默认值1.55em
,因此2em
,或者一些与字体无关的内容,例如25pt
。使用titletoc
加载,只需发出
\contentsmargin{2em}