我想在页边空白处显示索引条目。以下是我所做的:
\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}
过