5

I am using imakeidx to generate a multicolumn index with makeindex.

Here is an excerpt from my .ind:

  \item \BRbooktitlestyle {\BRepistlenumberstyle {1}Jean}                       
    \subitem \BRchapterstyle {2}\BRchvsep \BRversestyle {2} \dotfill            
                \textrm{18}                                                     
    \subitem \BRchapterstyle {4}\BRchvsep \BRversestyle {9}\BRvrsep \BRversestyle {10} \dotfill
                \textrm{18}   

where \BRfoo are bibleref formatting macros. Unfortunately, the \item is at the bottom of a left column, so the \subitems get pushed to the right column:

column break in index

Is there an equivalent to \nobreak which could be used here to prevent this behaviour, and how?

lockstep
  • 250,273
raphink
  • 31,894

1 Answers1

7

You want that a column break is preferred before each \item command; the usual definition of \item in an index is \par\hangindent 40\p@; so something like

\indexsetup{othercode={\let\item\breakitem}}

may do what needed, after saying in the preamble

\makeatletter
\def\breakitem{\par\goodbreak\hangindent 40\p@}
\makeatother

Another trick could be to add

\vadjust{\nobreak}

to the definition of \BRbooktitlestyle

egreg
  • 1,121,712
  • This is perfect! I used the second trick since I'm already redefining the style. – raphink Jun 26 '11 at 11:52
  • That is really helpful! Unfortunately, I gave a (private) book into print two days ago without this (I had only \nobreak), but the next edition will benefit from your trick. Adding \vadjust{\nobreak} works perfectly. – Thomas F. Sturm Jul 20 '16 at 05:42