当使用 fontspec 和 titletoc 且字体大小 >10pt 时,TOC 对齐出现问题

当使用 fontspec 和 titletoc 且字体大小 >10pt 时,TOC 对齐出现问题

由于各种原因,我正在将大型文档切换到 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} 可消除该问题。

10pt 的情况下: 在此处输入图片描述

12pt,无字体规格: 在此处输入图片描述

12pt,无标题: 在此处输入图片描述

答案1

我猜你的问题是“这里发生了什么事?”

加载中fontspec将当前字体从 Computer Modern 更改为 Latin Modern。而目录中页码宽度的长度由 给出,\@pnumwidth根据字体使用ems 定义。

为了隔离问题,请使用 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}

相关内容