有问题的 MWE:
\documentclass[headinclude,footinclude]{scrbook}%\documentclass[headinclude,footinclude,a4paper]{scrbook}
\usepackage{classicthesis}%\usepackage[style=arsclassica]{classicthesis}
\usepackage[english]{babel}
\usepackage[utf8]{inputenc}%\usepackage[ansinew]{inputenc}
%\usepackage[T1]{fontenc}
\usepackage{listings}%\usepackage{listingsutf8}
\lstset{breaklines=true}
\begin{document}
%\tableofcontents
\chapter{Exemplary~chapter~title here}
\section{Exemplary~section~title here}
%\lstinputlisting{a.py}
\begin{lstlisting}
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
a = 1;
\end{lstlisting}
\end{document}
问题(下图中以红色突出显示):
chapter
和命令中使用的硬空格(波浪号)section
在页眉中显示错误 - 有时是问题清单中以“)”括号结尾的代码部分(在本例中为:'␣␣␣␣␣␣a)'),有时也只是作为 ')' 括号。lstlisting
列表中的某个换行符lstinputlisting
丢失。不久之后,列表长度达到临界值,导致出现标题问题。
观察结果:
- 如果通过删除足够多的行来缩短列表,则列表最后一页的页眉问题最终会消失(但前面的页面似乎仍然受到影响)。
- 删除
\usepackage[english]{babel}
似乎可以防止这两个问题的发生。 - 删除
\usepackage{classicthesis}
也会删除问题。 - 这似乎与包
\lccode`\~=0\relax
中的错误无关listings
(例如,文本大小写、列表和波浪符号)。
实际结果:
期望结果的近似值:
答案1
我无法说出问题的确切原因,但显然是 和 包(后者由 加载)之间的奇怪交互listings
。触发babel
该问题似乎需要四个条件:textcase
classicthesis
- 该
~
命令必须在标题中的文本中使用。如果您在此处使用普通空格,则输出没有问题。 - 必须
lstlisting
出现在页面上并跨越到下一页。如果您只使用纯虚拟文本,标题看起来会很正常。 babel
必须加载该包,这样~
命令(\nobreakspace {}
)的正常定义就会被替换,\active@prefix ~\active@char~
从而以某种方式触发问题。- 最后,
\lowercase
必须涉及一个。在标题中classicthesis
使用textcase
的命令。这会使用 TeX 的原始 和,从而导致奇怪的行为。如果使用 重新定义,则可以看到相同的行为,但使用简单的 则不会。\MakeTextLowercase
\lowercase
~
\MakeTextLowercase
\def\MakeTextLowercase#1{\lowercase{#1}}
\def\MakeTextLowercase#1{#1}
综上所述,listings
您在问题中提到的错误似乎确实与此有关。至少我是这么认为的,因为它以某种方式操纵了 的小写代码~
。所以我建议的解决方案是删除 的babel
实现~
并使用原始实现:
\let\origtilde=~
\usepackage[english]{babel}
\let~=\origtilde