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.... – David Carlisle Jul 23 '19 at 20:20\@nameuse {i#1}where#1isindexoheadlso you need to be fairly open in your search queries – David Carlisle Jul 23 '19 at 20:21\@nameuseat all, anywhere! – murray Jul 23 '19 at 21:46.logis:./topologybook.ind:1152: Extra }, or forgotten \endgroup. <argument> ...entry@wrap {\@nameuse {indexeheadr}} \@nameuse {indexpsheadstru... l.1152 \subitem of a relation, \hyperpage{12}– murray Jul 23 '19 at 21:53psheadacross the tex input tree suggests it's in memoir/usr/local/texlive/2019/texmf-dist/tex/latex/memoir/memoir.cls: \@namedef{#1psheadstrut}{\@nameuse{#2psheadstrut}}– David Carlisle Jul 23 '19 at 22:00memoir.clsdoes not seem to have changed since 2018/12/12, and I've certainly successfully processed the index between that date and now (up to 6 to 8 weeks ago). – murray Jul 23 '19 at 22:09\showor\tracingallaround where I think the problem is to trace what it's doing but as it is, i can't help much, sorry. – David Carlisle Jul 23 '19 at 22:37\gobbleoneand\idxmark. Believe me, I would dearly love to be able to boil my complex preamble specifications down and prune my hundreds of output pages of material down down to a MWE to post. I do understand that the errors seem to be originating in building headers, as an index page is being completed before being shipped out. – murray Jul 24 '19 at 13:59\Cin that weird way? Just use a different name for the complex numbers. Anyway, we can't debug code we don't see. – egreg Jul 24 '19 at 16:08\gobbleone, see https://tex.stackexchange.com/questions/318472/change-index-see-also-and-see-format. – murray Jul 24 '19 at 17:00\idxmarkcommand in connection with that\gobbleonehackery. I'll take a a look. It is actually not related tomemoirat all, I kan get a similar error with book + makeidx (minus the memoir index header definitions) – daleif Jul 25 '19 at 21:11latexmk -norc -pdf indexerr.tex. But I get the same error withpdflatex indexerr,pdflatex indexerr,makeindex -s indexerr.ist indexerr,pdflatex indexerr(and I'm not finding a.latexmkrcorlatexmkrcin the directory of my source or in my$HOME(which is~). And how would inclusion/exclusion of thebabelstuff change things for me? – murray Jul 25 '19 at 21:30.istfile. I'm getting the same error and a similar one with book. So it does not have to do with memoir. It is something to do with then\gobbleoneis reset, it sees to be doing so too late or something when it comes to the\markboth– daleif Jul 25 '19 at 21:31fontencandbabellines? If not and the trouble is caused by\gobbleone, why wouldbabelcause the error, but without thebabelcode no error? – murray Jul 25 '19 at 21:49\let\gobbleone\relaxto the\leftmarkand\rightmarklines as well. It is strange, because it still needs the one in the\idxmarkdefinition as well. – daleif Jul 25 '19 at 21:55\gobbleone\relax\sffamily\bfseries\leftmarkand similary for\rightmark(on both evenhead and oddhead for index, then the headers on the index pages after the first become simply: INDEX INDEX INDEX (with the starting & ending entries now misssing from the left and right sides of the headers. (Or did I unintenionally omit something from my MWE preamble?) – murray Jul 25 '19 at 22:22\let– daleif Jul 25 '19 at 22:25