Revised question (I've been able to eliminate all extraneous definitions from my original source project and yet still reproduce this error with a MWE.)
On the memoir
document source below, I've run pdflatex
, makeindex
(with the -s
option for the indicated .ist
style file), and then pdflatex
again. On that final run of pdflatex
I get the error Extra }, or forgotten \endgroup
. Specifically, the log shows:
Redoing nameref's sectioning
Redoing nameref's label
(./indexerr.out) (./indexerr.out) [1{/Users/murray/Library/texlive/2019/texmf-v
ar/fonts/map/pdftex/updmap/pdftex.map}] [2] [3] (./indexerr.ind
(/usr/local/texlive/2019/texmf-dist/tex/latex/base/t1cmss.fd) [4] [5]
! Extra }, or forgotten \endgroup.
<argument> ...entry@wrap {\@nameuse {indexeheadr}}
\@nameuse {indexpsheadstru...
l.110 \end{theindex}
The error does not occur if I omit the babel
commands from the preamble!
What could the error source be?
%% INDEXERR.TEX
\begin{filecontents}{indexerr.ist}
% MakeIndex style file
% output main entry <entry> as: \item \idxmark{<entry>},
item_0 "\n\\item \\idxmark{"
delim_0 "}, "
% not forgetting the subitem case
item_x1 "} \n \\subitem "
%%headings_flag 1
%%heading_prefix "{\\textsf{\\textbf{"
%%heading_suffix "}}}\\nopagebreak\n"
headings_flag 1
heading_prefix "{\\medskip\\hfill\\large\\textsf{\\textbf{"
heading_suffix "}}\\hfill}\\medskip\\nopagebreak\n"
\end{filecontents}
\documentclass{memoir}
%% BABEL (actually used with multiple languages)
\RequirePackage[T1]{fontenc}%
\RequirePackage[main=english]{babel}%
%% HEADINGS
\makeheadrule {headings}{\textwidth}{\normalrulethickness}
\makepagestyle{index}
\makeheadrule{index}{\textwidth}{\normalrulethickness}
\makeevenhead{index}%
{\sffamily\bfseries\rightmark}%
{\sffamily\bfseries\MakeTextUppercase{\indexname}}%
{\sffamily\bfseries\leftmark}
\makeoddhead{index}%
{\sffamily\bfseries\rightmark}%
{\sffamily\bfseries\MakeTextUppercase{\indexname}}%
{\sffamily\bfseries\leftmark}
\makeevenfoot{index}{}{\sffamily\thepage}{}
\makeoddfoot{index}{}{\sffamily\thepage}{}
%% INDEXING
\newcommand\gobbleone[1]{}
\newcommand{\seeonly}[2]{\, (\emph{\seename} #1)}
\newcommand{\also}[2]{\unskip(\emph{\alsoname} #1)}
\newcommand{\Also}[2]{\unskip\emph{See also} #1}
\let\oldindex\index
\renewcommand{\index}[1]{\def\exptoindex{#1}\expandafter\oldindex\expandafter{\exptoindex}}
\makeatletter
\newcommand{\indexsee}[2]{\index{#1\protect\gobbleone|seeonly{#2}}}
\newcommand{\indexalso}[2]{\index{#1!zzzz@\protect\gobbleone|also{#2}}}
\newcommand{\indexAlso}[2]{\index{#1!zzzz@\protect\gobbleone|Also{#2}}}
\makeatother
\newcommand{\indexnamesee}[2]{\index[names]{#1\protect\gobbleone|seeonly{#2}}}
% fix for memoir to put hyperlink on mainref, too:
\newcommand{\mainref}[1]{\textbf{\emph{\hyperpage{#1}}}}
\newcommand{\idxmark}[1]{{\let\gobbleone\relax\markboth{\sffamily\bfseries#1}{\sffamily\bfseries#1}}#1}
%% CROSS-REFERENCING
\RequirePackage[pdftex]{hyperref}
\hypersetup{colorlinks, citecolor=red, linkcolor=blue}
\makeindex
\begin{document}
\frontmatter
\mainmatter
\chapter{The chapter}
This is a short book about zero. Therefore, it's also about nothing.
Which means null (or nil).
%
\index{nothing}
\index{nothing!nil}
\index{nothing!nil!and zero}
\index{nothing!null}
\indexalso{nothing!nil}{null elements}
\indexsee{nothing!nada}{nothing!nil}
\indexsee{zero}{zero elements}
\indexAlso{nothing}{zero elements}
\indexsee{thing}{something}
\index{null elements}
\newpage
More.
\index{nothing}
\index{nothing!nil}
\index{nothing!nil!and zero}
\index{null elements}
\index{zero elements}
\newpage
Still more.
\index{closed interval}
\index{continuous function!and bounded function}
\index{cover!and open cover}
\index{open cover|mainref}
\index{open cover|(}
\newpage
Yet more
\index{znothing}
\index{znothing!nil}
\index{znothing!nil!and zero}
\index{znothing!null}
\indexalso{znothing!nil}{null elements}
\indexsee{zzero}{zero elements}
\indexAlso{znothing}{zero elements}
\indexsee{zthing}{something}
\index{znull elements}
Something.
\index{ynothing}
\index{ynothing!nil}
\index{ynothing!nil!and zero}
\index{ynothing!null}
\indexalso{ynothing!nil}{null elements}
\indexsee{yzero}{zero elements}
\indexAlso{ynothing}{zero elements}
\indexsee{ything}{something}
\index{ynull elements}
Really nothing,
\index{xnothing}
\index{xnothing!nil}
\index{nothing!nil!and zero}
\index{xnothing!null}
\indexalso{xnothing!nil}{xnull elements}
\indexsee{xzero}{xzero elements}
\indexAlso{xnothing}{xzero elements}
\indexsee{xthing}{xsomething}
\index{xnull elements}
Getting repetitous!
\index{wnothing}
\index{wnothing!nil}
\index{wnothing!nil!and zero}
\index{wnothing!null}
\indexalso{wnothing!nil}{wnull elements}
\indexsee{wzero}{wzero elements}
\indexAlso{wnothing}{wzero elements}
\indexsee{wthing}{wsomething}
\index{wnull elements}
Still is.
\index{vnothing}
\index{vnothing!nil}
\index{vnothing!nil!and zero}
\index{vnothing!null}
\indexalso{vnothing!nil}{vnull elements}
\indexsee{vzero}{vzero elements}
\indexAlso{vnothing}{vzero elements}
\indexsee{vthing}{vsomething}
\index{vnull elements}
Hope this is enough.
\index{unothing}
\index{unothing!nil}
\index{unothing!nil!and zero}
\index{unothing!null}
\indexalso{unothing!nil}{unull elements}
\indexsee{uzero}{uzero elements}
\indexAlso{unothing}{uzero elements}
\indexsee{uthing}{usomething}
\index{unull elements}
\pagestyle{index}
\printindex
\end{document}
Notes: The definitions of indexing commands \seeonly,
\also, etc., and the auxiliary
\gobbleonecome from https://tex.stackexchange.com/questions/318472/change-index-see-also-and-see-format. The definitions of
\indexseeand
\idxmark` come from Error with entries in index page header, memoir class.
\@nameuse {indexoheadl}
as that is followed by one extra bracket (it doesn't mean the error is there tex probably got lost earlier but find that and work backwards....\@nameuse {i#1}
where#1
isindexoheadl
so you need to be fairly open in your search queries\@nameuse
at all, anywhere!.log
is:./topologybook.ind:1152: Extra }, or forgotten \endgroup. <argument> ...entry@wrap {\@nameuse {indexeheadr}} \@nameuse {indexpsheadstru... l.1152 \subitem of a relation, \hyperpage{12}
pshead
across the tex input tree suggests it's in memoir/usr/local/texlive/2019/texmf-dist/tex/latex/memoir/memoir.cls: \@namedef{#1psheadstrut}{\@nameuse{#2psheadstrut}}