У меня есть 2 вопроса по поводу компоновки моих индексов и заголовков индексов:
- Я не понимаю, почему
no indent first
илиno page break
между заголовком и прологом индекса сразу после него реагируют правильно в индексе с одним столбцом, но не в индексе с двумя столбцами (см. мой пример); - Почему они
headsepline
появляются на первой странице главы Index? Это не его место;
Можете ли вы помочь мне решить эти вопросы или один из них?
Спасибо. Вот мой MWE, где вы можете увидеть разницу между нормальным поведением основного материала и индексом из одного столбца.противиндекс из двух колонок:
% !TEX encoding = UTF-8 Unicode
% !TEX TS-program = arara
\documentclass{scrbook}
\usepackage[automark,headsepline,markcase=noupper]{scrlayer-scrpage}
\usepackage{imakeidx}
\usepackage{multicol}
\usepackage{lipsum}
\pagestyle{scrheadings}
\indexsetup{level=\section, toclevel=\section, othercode=\footnotesize, headers={\indexname}{\indexname}, firstpagestyle=scrheadings, noclearpage}
\makeindex[title=Index A, columns=2, columnsep=7pt, columnseprule]
\makeindex[name=ici, title=Index B, columns=1]
\begin{document}
\chapter{Lorem Ipsum}
\section{Lorem}\lipsum[1-6]\index{lipsum}\index{lorem}\index{ipsum}
\section{Ipsum}\lipsum[7-12]\index[ici]{lipsum}\index[ici]{lorem}\index[ici]{ipsum}
\addchap{Index}\setcounter{secnumdepth}{0}
\indexprologue{\lipsum[5-7]}\printindex[ici]
\indexprologue{\lipsum[1-4]}\printindex
\end{document}
% arara: xelatex
% arara: makeindex
% arara: xelatex
пс: я видел главуimakeidx MANо конфликте между двумя колонками и прологом индекса, но это мне не помогает.
решение1
Способ, которым imakeindex
в этой ситуации набирается индекс, по сути,
\section{Index title}
\begin{multicols}{2}[index prologue text\par\bigskip]
index stuff
\end{multicols}
Любая конструкция этой формы имеет тенденцию допускать разрыв страницы между заголовком раздела и последующим текстом. Вместо этого можно переместить команду \section
в необязательный аргумент multicols
:
\begin{multicols}{2}[\section{Index title}index prologue
text\par\bigskip]
index stuff
\end{multicols}
сохранение материала вместе. Код ниже обеспечивает соответствующее переопределение theindex
смоделированной imakeidx
версии , но с внесением вышеуказанных изменений. Поскольку \section
команда сопровождается другими механизмами, локальный макрос определяется для сохранения всей этой информации вместе, и это развертывается в различных сценариях для индекса. Он одинаково хорошо работает в book
или scrbook
.
\documentclass{scrbook}
\usepackage[automark,headsepline,markcase=noupper]{scrlayer-scrpage}
\usepackage{imakeidx}
\usepackage{multicol}
\usepackage{lipsum}
\pagestyle{scrheadings}
\indexsetup{level=\section, toclevel=\section, othercode=\footnotesize, headers={\indexname}{\indexname}, firstpagestyle=scrheadings, noclearpage}
\makeindex[title=Index A, columns=2, columnsep=7pt, columnseprule]
\makeindex[name=ici, title=Index B, columns=1]
\makeatletter
\renewenvironment{theindex}{%
\def\myimki@headercode{%
\imki@maybeaddtotoc
\imki@indexlevel{\indexname}\imki@indexheaders
\thispagestyle{\imki@firstpagestyle}}%
\ifnum\imki@columns>\@ne
\columnsep \imki@columnsep
\ifx\imki@idxprologue\relax
\begin{multicols}{\imki@columns}[\myimki@headercode]
\else
\begin{multicols}{\imki@columns}[\myimki@headercode\imki@idxprologue]
\fi
\else
\myimki@headercode
\imki@idxprologue
\fi
\global\let\imki@idxprologue\relax
\parindent\z@
\parskip\z@ \@plus .3\p@\relax
\columnseprule \ifKV@[email protected]\p@\else\z@\fi
\raggedright
\let\item\@idxitem
\imki@othercode}
{\ifnum\imki@columns>\@ne\end{multicols}\fi
}
\makeatother
\begin{document}
\chapter{Lorem Ipsum}
\section{Lorem}\lipsum[1-6]\index{lipsum}\index{lorem}\index{ipsum}
\section{Ipsum}\lipsum[7-12]\index[ici]{lipsum}\index[ici]{lorem}\index[ici]{ipsum}
\addchap{Index}\setcounter{secnumdepth}{0}
\indexprologue{\lipsum[5-7]}\printindex[ici]
\indexprologue{\lipsum[1-4]}\printindex
\end{document}