请考虑以下 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}
只有维护人员才能真正纠正该问题tabu
。tabu
不应该重新定义所有这些宏,或者应该正确恢复。
但是,解决这个问题最简单的方法是不使用,\\
而是\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}
但您还应该从弃用版本切换scrpage2
到scrlayer-scrpage
。不幸的是,的当前版本scrlayer-scrpage
不允许\par
在的参数内\chead
(我已经报告了这个问题)。这个问题应该在的下一个版本中得到修复scrlayer-scrpage
。此外,scrlayer-scrpage
v3.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
。