pdflatex 无限循环和页面标题与 dateiliste/babel 错误对齐

pdflatex 无限循环和页面标题与 dateiliste/babel 错误对齐

在下面的代码中,如果 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,该命令又针对包括英语在内的一小段语言列表运行\addtolanguage \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,这应该可以解决这两个问题。

相关内容