将索引页引用加粗但不抹去“参见{其他索引}”

将索引页引用加粗但不抹去“参见{其他索引}”

之前我发过一个问题 如何以粗体显示索引页码?

并得到了非常好的答复,这对我很有帮助。

然而,我发现使用算法时,页码加粗存在冲突

\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为您所命名的索引样式。


  1. 我并不认为这是一个好主意,尽管我会注意到 TeXshop 提供了与 makeindex 的最小集成,并且要求用户在需要指定索引样式时下拉到命令行来运行命令,这样我才能看到动机。

  2. 另一方面,这是一个不错的功能。makeindex除了在命令行运行时记住指示之外,没有其他方法可以指定索引样式makeindex,这可能是索引样式很少使用的原因。

相关内容