在页边空白处清晰显示“特殊”索引条目

在页边空白处清晰显示“特殊”索引条目

我想在页边空白处显示索引条目。以下是我所做的:

\documentclass[a4paper, 12pt, twoside]{report}

\usepackage{kantlipsum}

\usepackage{marginnote}
\let\oldmarginnote\marginnote
\renewcommand{\marginnote}[1]{\oldmarginnote{\footnotesize #1}}

\usepackage{makeidx}
\makeindex
\let\oldindex\index
\renewcommand{\index}[1]{\oldindex{#1}\marginnote{\bfseries{#1}}}

\begin{document}

\kant[1]
\index{Kant}
\kant[2]
\index{Kant!Test}
\kant[3]
\index{Kant|textbf}
\kant[4]
\index{Kant|see {blah}}
\kant[5]
\index{Kant|seealso {xyz}}
\kant[6]

\end{document}

这很有效,但对于“特殊”索引键则不行:这些索引键使用特殊字符!|来表示特殊索引条目。它们也会显示在边距中,如下所示:

在此处输入图片描述

有没有办法不这样做,或者:

  • 仅显示主要条目(此处始终为“康德”)
  • 以某种方式将索引的所有不同部分(主条目、子条目、样式、参见、另请参阅等)分开,并在页边距中自行使用。最终可能会得到类似这样的结果:

    \marginnote{\bfseries{Main entry} (Sub entry)}
    

我见过在文本本身中标记索引条目?将文本中的索引条目可视化?但他们似乎并不关心这一点。

答案1

您可以使用 来实现xparse;如果存在,则首先在 处拆分条目!。然后我们处理|,忽略它及其后续内容。请注意,仅支持一个子索引级别。但是,可以添加对两个级别的支持。

\documentclass[a4paper, 12pt, twoside]{report}

\usepackage{xparse}
\usepackage{marginnote}
\usepackage{kantlipsum}
\usepackage{makeidx}

\renewcommand{\marginfont}{\footnotesize\bfseries}

\makeindex

\let\oldindex\index
\renewcommand{\index}[1]{%
  \oldindex{#1}%
  \marginnote{\splitentry{#1}}%
}

\NewDocumentCommand{\splitentry}{ >{\SplitArgument{1}{!}} m }
 {%
  \splitentryEM#1%
 }
\NewDocumentCommand{\splitentryEM}{mm}
 {%
  \IfNoValueTF{#2}
   {\splitentryBAR{#1}}
   {#1 -- \splitentryBAR{#2}}%
 }
\NewDocumentCommand{\splitentryBAR}{ >{\SplitArgument{1}{|}} m }
 {%
  \dosplitentryBAR#1%
 }
\NewDocumentCommand{\dosplitentryBAR}{mm}{#1}

\begin{document}

\kant[1]
\index{Kant}
\kant[2]
\index{Kant!Test}
\kant[3]
\index{Kant|textbf}
\kant[4]
\index{Kant|see {blah}}
\kant[5]
\index{Kant|seealso {xyz}}
\kant[6]

\printindex

\end{document}

注意,marginnote提供\marginfont设置注释的功能。

第 1 页和第 2 页

在此处输入图片描述

第 3 和 4 页

在此处输入图片描述

如果您还想容纳@条目,您可以按以下方式修改代码:

\let\oldindex\index
\renewcommand{\index}[1]{%
  \oldindex{#1}%
  \marginnote{\splitentry{#1}}%
}

\NewDocumentCommand{\splitentry}{ >{\SplitArgument{1}{!}} m }
 {%
  \splitentryEM#1%
 }
\NewDocumentCommand{\splitentryEM}{mm}
 {%
  \splitentryBAR{#1}%
  \IfValueT{#2}{ -- \splitentryBAR{#2}}%
 }
\NewDocumentCommand{\splitentryBAR}{ >{\SplitArgument{1}{|}} m }
 {%
  \dosplitentryBAR#1%
 }
\NewDocumentCommand{\dosplitentryBAR}{ >{\SplitArgument{1}{@}} m m }
 {%
  \splitentryAT#1%
 }
\NewDocumentCommand{\splitentryAT}{ m m }
 {
  \IfNoValueTF{#2}{#1}{#2}%
 }

我尝试\index{Kant@K\'ant!ecole@\'ecole}

在此处输入图片描述

相关内容