我正在为我的索引定义此命令:\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}