之前我发过一个问题 如何以粗体显示索引页码?
并得到了非常好的答复,这对我很有帮助。
然而,我发现使用算法时,页码加粗存在冲突
\let\oldindex\index
\renewcommand{\index}[1]{%
\oldindex{#1|textbf}%
}%
与引导读者参阅另一个条目的索引条目结合使用(例如\index{Heading2|see{Heading}}
)。
考虑一下代码
\RequirePackage{filecontents}
\begin{filecontents*}{\jobname.mst}
%delim_0 "\\IndexDotfill "
%delim_1 "\\IndexDotfill "
headings_flag 1
heading_prefix " \\IndexHeading{"
heading_suffix "}\n"
\end{filecontents*}
\documentclass{book}
\usepackage{imakeidx}
\makeindex
\usepackage{idxlayout}
\usepackage{xcolor}
\usepackage[tikz]{bclogo}
\usetikzlibrary{calc,shapes.callouts,shapes.arrows}
\newcommand*{\IndexDotfill}{%
\nobreak\dotfill\ \nobreak
}
\renewcommand*{\indexspace}{%
\par
\vspace{25pt plus 6pt minus 4pt}%
}
\newcommand*{\IndexHeading}[1]{%
\vspace{27pt}
\hfil \tikz\node[
rounded corners=5pt,
draw=blue,
fill=blue!35,
line width=1.3pt,
inner sep=10pt,
align=center,
font=\sffamily\bfseries\Large,
minimum width=1.25in
] {#1};%
\nopagebreak
\par
\vspace{2mm}%
\hfil }
% Make all page numbers in index bold
%\let\oldindex\index
%\renewcommand{\index}[1]{%
% \oldindex{#1|textbf}%
%}%
\begin{document}
\LARGE
\newpage A sentence\index{Heading@!IndiceA}
\newpage Another sentence\index{Heading@!IndiceB}
\newpage Another sentence\index{Heading@!IndiceC}
\index{Heading2|see{Heading}}
\index{A@\textbf{A}|see{\textbf{B}}}
\idxlayout{columns=1}
\printindex
\end{document}
生成索引
但是,当我使用算法运行代码时
\let\oldindex\index
\renewcommand{\index}[1]{%
\oldindex{#1|textbf}%
}%
“看'' 索引消失:
问:谁能解释为什么会发生这种情况?我该如何纠正它,以便我可以同时用粗体显示引用页面看引导读者找到其他条目的索引?
谢谢。
答案1
如果您查看.idx
文档生成的文件,就会发现问题所在:您会发现您看到的条目创建了如下内容:
\indexentry{A|see{B}|textbf}{1}
⬆︎ ⬆︎
请注意二|
中的实例\indexentry
。然后,当您运行 makeindex 时,请注意输出:
Scanning input file xx.idx....done (1 entries accepted, 1 rejected).
----------
关于索引条目被拒绝的那部分就是你的线索。如果你查看文件.ilg
,你会看到:
!! Input index error (file = xx.idx, line = 2):
-- Extra `|' at position 9 of first argument.
|
它准确地告诉你哪里出了问题。当 makeindex在输入中看到两个s 时,它拒绝了索引条目。
因此,这里的陷阱是,您不能盲目地将其应用于|textbf
每个索引条目。事实上,如果您确实希望将索引中的每个页码都加粗(您真的想这样做吗?),那么管理此问题的方法是通过索引样式。将其添加到您的.ist
文件中(或使用它创建一个文件)将导致所有页码都加粗:
delim_0 ", \\textbf{"
delim_1 ", \\textbf{"
delim_2 ", \\textbf{"
delim_n "}, \\textbf{"
delim_t "}"
encap_prefix "}\\"
encap_infix "{\\textbf{"
encap_suffix "}"
然后,您可以通过运行 makeindex 来使用它,并使用选项-s
来指示样式,例如,
makeindex -s test.ist xx
现在我看到你正在使用imakeidx
将自动运行的包makeindex
。¹在这种情况下,你需要修改命令\makeindex
以指定它需要特殊的索引样式²,方法是将其更改为
\makeindex[options=-s mystyle]
当然,要更改mystyle
为您所命名的索引样式。
我并不认为这是一个好主意,尽管我会注意到 TeXshop 提供了与 makeindex 的最小集成,并且要求用户在需要指定索引样式时下拉到命令行来运行命令,这样我才能看到动机。
另一方面,这是一个不错的功能。
makeindex
除了在命令行运行时记住指示之外,没有其他方法可以指定索引样式makeindex
,这可能是索引样式很少使用的原因。