longtabu 和 scrpage2:页眉中的换行符导致编译错误

longtabu 和 scrpage2:页眉中的换行符导致编译错误

请考虑以下 MWE:

\documentclass{scrartcl}
\usepackage{longtable,tabu}
\usepackage{lipsum}
\usepackage{scrpage2}
\chead[Headline 1\\ Headline 2]{Headline 1\\ Headline 2}
\pagestyle{scrheadings}

\begin{document}
\lipsum[1-5]
\begin{longtabu}{XXX}
    Col1 & Col2 & Col3 \\
    Col1 & Col2 & Col3 \\
    Col1 & Col2 & Col3 \\
    Col1 & Col2 & Col3 \\
    Col1 & Col2 & Col3 \\
    Col1 & Col2 & Col3 \\
\end{longtabu}
\end{document}

我注意到这个MWE的编译导致以下错误:

! Misplaced \cr.
\reserved@c ->\ifnum 0=`{}\fi \cr 

l.17 \end{longtabu}

I can't figure out why you would want to use a tab mark
or \cr or \span just now. If something like a right brace
up above has ended a previous alignment prematurely,
you're probably due for more error messages, and you
might try typing `S' now just to see what is salvageable.

对于一个文档,我需要一个两行的页眉,但出现了这个错误,我猜这是包的问题tabu。我找不到任何错误,如果能帮助我如何在页眉中设置换行符而不出现这个错误,我将非常高兴。

答案1

页面头部正在捕捉 longtables 版本的\\最简单的方法是通过使用替代形式来避免该问题

\chead[Headline 1\linebreak Headline 2]{Headline 1\linebreak Headline 2}

答案2

longtabu 重新定义(像每个表格一样)\\,并且在标题中此定义仍然有效并导致混乱。使用另一个命令:

\documentclass{scrartcl}
\usepackage{longtable,tabu}
\usepackage{lipsum}
\usepackage{scrpage2}
\let\ORInewline\\
\chead[Headline 1\ORInewline Headline 2]{Headline 1\ORInewline Headline 2}
\pagestyle{scrheadings}

\begin{document}
\lipsum[1-5]
\begin{longtabu}{XXX}
    Col1 & Col2 & Col3 \\
    Col1 & Col2 & Col3 \\
    Col1 & Col2 & Col3 \\
    Col1 & Col2 & Col3 \\
    Col1 & Col2 & Col3 \\
    Col1 & Col2 & Col3 \\
\end{longtabu}
\end{document}

答案3

问题是由 的错误功能引起的tabu\tabu@init包中重新定义了几个常用的 LaTeX 命令,如\centering\raggedright\raggedleft(还有 等\fbox\color。对于某些命令,如果在处理 时在页眉或页脚中使用这些命令,则会导致问题longtabu。以下是针对此问题的 MWE,未使用任何页面样式包:

\documentclass{article}
\usepackage{longtable,tabu}
\usepackage{mwe}
\pagestyle{myheadings}
\begin{document}
\markright{\protect\parbox{2em}{\protect\centering One\\ Two}}
\lipsum[1-5]
\begin{longtabu}{lr}
  first & row \\
  second & row \\
  third & row \\
  fourth & row \\
  fifth & row \\
  sixth & row \\
\end{longtabu}
\end{document}

这也给出了问题的错误信息:

./test-longtabu.tex:15: Misplaced \cr.
\reserved@c ->\ifnum 0=`{}\fi \cr 

l.15 \end{longtabu}

只有维护人员才能真正纠正该问题tabutabu不应该重新定义所有这些宏,或者应该正确恢复。

但是,解决这个问题最简单的方法是不使用,\\而是\par

\documentclass{scrartcl}
\usepackage{longtable,tabu}
\usepackage{lipsum}
\usepackage{scrpage2}
\chead[Headline 1\par Headline 2]{Headline 1\par Headline 2}
\pagestyle{scrheadings}

\begin{document}
\lipsum[1-5]
\begin{longtabu}{XXX}
    Col1 & Col2 & Col3 \\
    Col1 & Col2 & Col3 \\
    Col1 & Col2 & Col3 \\
    Col1 & Col2 & Col3 \\
    Col1 & Col2 & Col3 \\
    Col1 & Col2 & Col3 \\
\end{longtabu}
\end{document}

但您还应该从弃用版本切换scrpage2scrlayer-scrpage。不幸的是,的当前版本scrlayer-scrpage不允许\par在的参数内\chead(我已经报告了这个问题)。这个问题应该在的下一个版本中得到修复scrlayer-scrpage。此外,scrlayer-scrpagev3.27 将为这个缺陷提供解决方法tabu。因此,使用来自 KOMA-Script 的 subversion 存储库的当前版本:

\documentclass{scrartcl}
\usepackage{longtable,tabu}
\usepackage{lipsum}
\usepackage{scrlayer-scrpage}
\chead*{Headline 1\\ Headline 2}
\pagestyle{scrheadings}

\begin{document}
\lipsum[1-5]
\begin{longtabu}{XXX}
    Col1 & Col2 & Col3 \\
    Col1 & Col2 & Col3 \\
    Col1 & Col2 & Col3 \\
    Col1 & Col2 & Col3 \\
    Col1 & Col2 & Col3 \\
    Col1 & Col2 & Col3 \\
\end{longtabu}
\end{document}

已经起作用了。

答案4

我遇到了同样的问题,解决方法是用 替换\\页眉/页脚定义中的所有\newline

还请注意,同样的问题也会发生fancyhdr

相关内容