删除命令定义中 \else 后的空格

删除命令定义中 \else 后的空格

我正在为我的索引定义此命令:\newcommand*{command}{\iffirstsubsubitem\unskip\firstsubsubitemfalse\ \else; \fi}我想知道是否有办法消除它在分号之前打印的空格。

我尝试过\newcommand*{command}{\iffirstsubsubitem\unskip\firstsubsubitemfalse\ \else\kern{-1ex}; \fi},但结果并不好。

以下是 MWE:

\documentclass[a4paper, 11pt, twoside, openright]{article}

\usepackage[top=49.5mm,bottom=52.5mm,inner=39mm,outer=39mm, headheight=4mm, headsep=6mm, marginparwidth=14mm, marginparsep=2mm, nofoot]{geometry}

\usepackage[no-math]{fontspec}
\defaultfontfeatures{Ligatures={TeX, NoCommon}}

\usepackage{polyglossia}
\setmainlanguage{italian}
\setotherlanguage[variant=ancient]{greek}
\setotherlanguage{german}
\setotherlanguage{english}
\setotherlanguage{latin}

\usepackage{microtype}
\usepackage{imakeidx}
\usepackage{xparse}
\makeindex[name=1,title=,options=-s Intero.ist]
\makeindex[name=2,title=,options=-s Intero.ist]
\makeindex[name=3,title=,options=-s Intero.ist]
\makeindex[name=4,title=,options=-s Intero.ist]
\usepackage[itemlayout=singlepar,font=footnotesize]{idxlayout}

\usepackage{xpatch}


\makeatletter
\def\@idxitem{\par\addvspace{10\p@ \@plus 5\p@ \@minus 3\p@}\hangindent 40\p@}
\def\subitem{\par\hangindent 40\p@ \hspace*{20\p@}}
\def\subsubitem{\par\hangindent 40\p@ \hspace*{30\p@}}
\def\indexspace{}
\patchcmd\theindex{\indexname}{\indexname\vspace{12pt}}{}{}
\makeatother


\makeatletter
\newif\iffirstsubitem
\newif\iffirstsubsubitem
\renewcommand{\indexsubsdelim}{ }
\newcommand*{\indexsubsdelimb}{\iffirstsubsubitem\unskip\firstsubsubitemfalse\ \else; \fi}
\renewcommand{\subitem}{\iffirstsubitem\unskip\firstsubitemfalse, \else; \fi\firstsubsubitemtrue}%
\renewcommand{\subsubitem}{\indexsubsdelimb}%
\renewcommand{\@idxitem}{\par\setlength{\hangindent}{\ila@hangindent}\firstsubitemtrue}
\makeatother

\newcommand*{\cose}[1]{\index[1]{#1}\ignorespaces}
\newcommand*{\parole}[1]{\index[2]{#1}\ignorespaces}
\newcommand*{\autori}[1]{\index[4]{#1}\ignorespaces}

\begin{document}


text

\autori{Author!Work1!1,15} 
\autori{Author!Work1!9,31}
\autori{Author!Work2!2,24} 
\autori{Author!Work2!5,11}
\autori{Author!Work2!2,25} 

\autori{Author2!4,34}
\autori{Author3!6,12} 
\autori{Author3!9,4}
\
\printindex[4]

\end{document}

答案1

为了尝试用分号分隔索引条目引用,您定义了以下内容:

\newcommand*{command}{\iffirstsubsubitem\unskip\firstsubsubitemfalse\ \else; \fi}

让我们仔细看看这个问题。

假设条目在排序后,页码后有一个空格。您肯定不希望在分号前页码后有一个空格。因此,您指定了\unskip,这是朝着正确的方向前进的。但是,您在测试第​​一个引用后插入了\unskip……然后您明确插入了一个空格引用(“第一个子子项”)。

\iffirstsubsubitem无疑会做一些事情,有效地将其前面的内容与 分开\if...\unskip因此\unskip可能没有效果(未经测试,所以我不确定)。但是,无论 是否\unskip在那里起作用,您都没有做任何事情来删除您想要在分号前消除的空格。您可以\unskip在 之后\else和分号之前添加另一个,但还有更好的方法。

只需将 移至\unskip定义的开头,在 之前\if...,即可得到以下内容:

\newcommand*{command}{\unskip\iffirstsubsubitem\firstsubsubitemfalse\ \else; \fi}

相关内容