在下面的代码中,如果 babel 和 dateiliste 同时加载,标题对齐错误。此外,如果删除第一行,整个 MWE 会陷入无限循环。
% remove to let pdflatex go into endless loop
\RequirePackage[l2tabu, orthodox]{nag}
\documentclass[english]{scrbook}
%
\usepackage{babel} % <- remove to correct heading alignment
\usepackage{scrpage2}
\usepackage{dateiliste} % <- remove to correct heading alignment
% only for demonstration
\usepackage{blindtext}
\begin{document}
\frontmatter
\tableofcontents
\mainmatter
\chapter{wrong aligned heading}
\blindtext[1]
\section{section}
\blindtext[5]
\end{document}
编辑:
系统是Texlive 2012,所有软件包都在Windows 7上更新。
无限循环来自 dateiliste,\tracingall
最后显示这些行
\dateiliste@mainfile ->LaTeXTemplate.tex
\@filelist ->\@filelist
\@filelist ->\@filelist
...
永不停歇
答案1
运行头位置不正确是 中的一个错误dateiliste.sty
。加载babel
包会导致dateiliste
运行命令\dateiliste@babel
,该命令又针对包括英语在内的一小段语言列表运行\addto
language \extra
。不幸的是,该代码中的许多行尾未注释掉,导致一些额外的空格,这些空格会进入页码。即使在标准 中,这也很明显book
,但下面是您的设置中的一个最小示例。请注意,\listfiles
已添加到序言中以防止dateiliste
进入其无限循环。
\documentclass[english]{scrbook}
\usepackage[a6paper]{geometry}
\usepackage{babel}
\usepackage{dateiliste}
\usepackage{blindtext}
\listfiles
\begin{document}
\mainmatter
\chapter{Heading}
\blindtext[2]
\end{document}
要更正此问题,请复制dateiliste.sty
到新文件并更正 的定义,\dateiliste@babel
以便%
行在右括号后以百分号结尾}
。以下是该定义的英文部分。
\newcommand*{\dateiliste@babel}{
\addto{\extrasenglish}{%
\renewcommand*\fileListPreamble{%
Here is the list of all files used during the run of \LaTeX{}
which produced this document.\footnote{More precisely, it is
the list of files used one \LaTeX-run before the one which
produced this document, but after some runs the list
should stabilize.}
}%
\renewcommand*\fileListName{List of Files}%
\renewcommand*\fileNameName{file name}%
\renewcommand*\pageName{page}%
\renewcommand*\dateName{release date}%
\renewcommand*\verName{ver.}%
\renewcommand*\descriptionName{description}%
}%
使用新样式文件会得到以下输出,其中标题正确地左对齐。
或者,你可以移动babel
包裹后包中dateiliste
,删除有问题的钩子,如果需要的话,做出具体的定义:
\documentclass[english]{scrbook}
\usepackage[a6paper]{geometry}
\usepackage{dateiliste}
\usepackage{babel}
\makeatletter
\let\dateiliste@babel\relax % Clear the hook
\makeatother
%% Make the English definitions
\renewcommand*\fileListPreamble{%
Here is the list of all files used during the run of \LaTeX{}
which produced this document.\footnote{More precisely, it is
the list of files used one \LaTeX-run before the one which
produced this document, but after some runs the list
should stabilize.}
}%
\renewcommand*\fileListName{List of Files}%
\renewcommand*\fileNameName{file name}%
\renewcommand*\pageName{page}%
\renewcommand*\dateName{release date}%
\renewcommand*\verName{ver.}%
\renewcommand*\descriptionName{description}%
%% End of English definitions
\usepackage{blindtext}
\listfiles
\begin{document}
\mainmatter
\chapter{Heading}
\blindtext[2]
\end{document}
答案2
感谢 Matthias 的报告,感谢 Andrew Swann 和 Markus Kohm(通过邮件发送给我)对问题的分析。
这页眉缩进问题是由 Babel\extrasenglish
在此位置执行引起的,并且在此宏中,我确实插入了错位的空格(其中几个),因为没有注释掉行尾,而在序言之后进行“编程”(而不是排版)时应该始终这样做。看来我没有意识到这实际上是在文档内部执行的,而且我并没有在打开标题的情况下真正测试我的翻译功能。
我注释掉了包中各个部分的所有行尾。
这无限循环来自于尝试\@filelist
在它实际上未定义时进行操作。程序的这一部分尝试\jobname.tex,
在再次添加它之前将其从文件列表中删除:
\@expandtwoargs\@removeelement{\dateiliste@mainfile}%
\@filelist\@filelist
当您使用此包(并且不提供选项[noaddmain]
)但忘记在前言中包含\listfiles
命令时,就会发生这种情况。看来我从未考虑过这种情况,因为我的包的主要目标是创建文件列表。
我的解决方案现在在这种情况下发出警告(并且省去了整个的操作\@filelist
)。
我刚刚将 0.6 版本上传到 CTAN,这应该可以解决这两个问题。