我尝试为我的一个文档添加索引。但是失败了,下面的 MWI 也失败了。神秘的错误消息是:
Something's wrong--perhaps a missing \item. \end{theindex}
MWI:
\documentclass{scrreport}
\RequirePackage{scrlayer-scrpage}
\cohead[
{
\begin{tabbing}
plain \= header content
\end{tabbing}
}
]
{
header content
}
\usepackage{makeidx}
\usepackage{hyperref}
\makeindex
\begin{document}
Test \index{indexEntry}.
\printindex
\end{document}
问题似乎出在宏tabbing
的纯样式条目中的环境中\cohead
。
tabbing
用环境替换tabular
环境消除了错误 - 但我仍然想知道实际的问题是什么。
此外,用 替换似乎\usepackage{makeidx}
可以\usepackage{imakeidx}
消除此 MWI 的错误 - 但对于我的完整文档却无效。
如果有人知道我在这里做错了什么 - 请告诉我。
谢谢,
约翰内斯
答案1
一、问题分析
环境theindex
(由 插入\printindex
)更改 的定义以\item
执行其他操作,这基本上破坏了所有列表。在 LaTeX 中,列表比您想象的要多,包括tabbing
。现在,当页面在更改的定义生效时结束时,它也会影响页眉和页脚(仅在那时排版),从而导致错误。产生错误的一个更简单的例子是
\documentclass{scrreprt}
\usepackage{scrlayer-scrpage}
\cohead{%
\begin{tabbing}
one \= two
\end{tabbing}%
}
\begin{document}
Hello World!
\let\item\relax
\end{document}
甚至
\documentclass{article}
\begin{document}
\let\item\relax
\begin{tabbing}
Hello World!
\end{tabbing}
\end{document}
该怎么办?
现在,我们可以小心地恢复标题中的 的原意\item
,并消除错误。但是,我仍然不建议这样做,因为tabbing
即使这样,环境也无法很好地处理不同标题部分的对齐。(\let\item\relax
从上面的第一个示例中删除。标题是否设置\cohead
在中心?)
相反,在我看来你确实想要一张桌子。
\documentclass[
headlines=2,
]{scrreprt}
\usepackage{scrlayer-scrpage}
\usepackage{makeidx}
\usepackage{hyperref}
\usepackage{showframe}
\lohead*{left text for alignment and such}
\rohead*{right text for alignment and such}
\cohead*{%
\strut\smash{%
\begin{tabular}[b]{ l l }
one & two \\
three & four \\
\end{tabular}%
}%
}
\makeindex
\begin{document}
Test\index{indexEntry}.
\printindex
\end{document}
关于此的一些说明:
showframe
只是为了让我们能看到类型区域。用来
headlines=2
使页眉足够高以容纳两行文本。使用
tabular
可选参数指定与标题其余部分的垂直对齐([b]
用于底部对齐)。scrlayer-scrpage
将标题的各个部分放在 中\parbox
,默认情况下, 垂直居中其内容并围绕其内容(这会使[b]
之前的内容变得毫无用处)。出于某种原因,没有提供更改此设置的选项。为了解决这个问题而不进入包的内部,我使用了以下技巧:我删除了 表格的高度\smash
并添加了\strut
(零宽度规则)。也就是说, 的内容\cohead
现在具有 的宽度tabular
和 的高度\strut
,从而实现了所需的对齐。请注意,这也意味着如果您的标题太高,LaTeX 无法再警告您(因为我们删除了该高度)。即使没有,您也不会收到警告
headlines=2
。您必须自己检查高度。
答案2
我不确定tabbing
那个位置在做什么(它使 LaTeX 发出有关头部高度的警告)。
您可以通过指定将索引中的第一页样式设置为 使用的样式来解决此问题scrlayer-scrpage
。
\documentclass{scrreport}
\usepackage{scrlayer-scrpage}
\usepackage{imakeidx}
\usepackage{hyperref}
\cohead[%
\begin{tabbing}
plain \= header content
\end{tabbing}%
]{%
header content%
}
\makeindex
\indexsetup{firstpagestyle=plain.scrheadings}
\begin{document}
\chapter{whatever}
Test\index{indexEntry}.
\printindex
\end{document}
但头部高度的问题仍有待解决。
Package scrlayer-scrpage Warning: \headheight to low.
(scrlayer-scrpage) At least 58.8pt needed,
(scrlayer-scrpage) but only 17.0pt found.
(scrlayer-scrpage) I'll enlarge \headheight, for further
(scrlayer-scrpage) processing, but you should do this yourself,
(scrlayer-scrpage) e.g., setting typearea's option
(scrlayer-scrpage) `headheight=58.8pt'.
(scrlayer-scrpage) I'll also decrease \topmargin on input line 26.