好吧,我努力提高我的指数辛迪。我尝试使用\index{...|textbf}
分类为latex-loc-fmts.xdy,但没有成功。
跑步时辛迪(无论哪种方式,tex2xindy/texindy/xindy)与texindy.xdy,报告了以下错误(是的,它们是错误,因为受影响的条目不会传递给生成的 .ind - IOW 不会显示):
line X: multiple |'s
...
WARNING: unknown attribute `textbfhyperpage'! (ignored)
我不知道如何处理这种行为,如果有人愿意分享他的经验,我会很高兴。顺便说一句:我正在使用 Xindy-2.4 (TL2012)...
更新:
\documentclass{article}
\usepackage{hyperref} % conflict!
\usepackage{makeidx}
\makeindex
\begin{document}
start
Nunc ligula faucibus \index{vel|textbf}. Nullarutrum porttitor...
\index{a}\index{b}\index{ä}\index{z}
end
\printindex
\end{document}
...编译为:
latex <file> && xindy -M texindy <file> && latex <file>
...结果:
在没有 的情况下它可以工作hyperref
,但是当它被抓取时它就不行了。由于 hyperref 或多或少是一个标准,所以我需要让 Xindy 与 hyperref 一起工作。有什么想法吗?
答案1
您必须为 xindy 使用单独的样式文件。以下示例结果为:
和往常一样,我习惯imakeidx
简化这个过程。但是你必须用 进行编译shell-escape
。
诀窍是允许hyperref
为索引提供每个功能,但写入 idx 文件时必须不受 hyperref 的影响。这可以通过imakeidx
在 之后加载来实现。必须在 的样式文件中定义 之hyperref
类的格式规则。textbf
xindy
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[hyperindex=true]{hyperref}
\usepackage{imakeidx}
\makeindex[program=texindy,options=-M mystyle.xdy]
\usepackage{filecontents}
\begin{filecontents*}{mystyle.xdy}
;;; xindy style file
(markup-locclass-list :open "\dotfill" :sep "")
(define-attributes (( "textbf" "default" )) )
(markup-locref :attr "textbf" :open "\textbf{\hyperpage{" :close "}}")
(markup-locref :attr "textit" :open "\textit{\hyperpage{" :close "}}")
(markup-locref :attr "textttt" :open "\textttt{\hyperpage{" :close "}}")
(markup-locref :attr "texttsc" :open "\texttsc{\hyperpage{" :close "}}")
(markup-locref :attr "default" :open "\hyperpage{" :close "}")
\end{filecontents*}
\begin{document}
start
Nunc ligula faucibus \index{vel|textbf}. Nullarutrum porttitor...
\index{a}\index{b}\index{ä}\index{z}
end
\printindex
\end{document}
更新了版本see
,并在样式文件内部加载了see also
模块。makeindex
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[hyperindex=true]{hyperref}
\usepackage{imakeidx}
\makeindex[program=texindy,options=-M mystyle.xdy]
\usepackage{filecontents}
\begin{filecontents*}{mystyle.xdy}
;;; xindy style file
;;; Load a predefined style:
(require "makeindex.xdy")
(markup-locclass-list :open "\dotfill" :sep "")
(define-attributes (( "textbf" "default" )) )
(markup-locref :attr "textbf" :open "\textbf{\hyperpage{" :close "}}")
(markup-locref :attr "textit" :open "\textit{\hyperpage{" :close "}}")
(markup-locref :attr "textttt" :open "\textttt{\hyperpage{" :close "}}")
(markup-locref :attr "texttsc" :open "\texttsc{\hyperpage{" :close "}}")
(markup-locref :attr "default" :open "\hyperpage{" :close "}")
\end{filecontents*}
\begin{document}
start
Nunc ligula faucibus \index{vel|textbf}. Nullarutrum porttitor...
\index{a}\index{b}\index{ä}\index{z}
\index{Peter}
\index{Jenny}
\index{Pet|see{Peter}}
\index{Jen|seealso{Jenny}}
end
\printindex
\end{document}
答案2
如果我们想按照瑞典排序规则按索引排序,我们通常会传递-C utf8 -L swedish
给xindy
。
我发现的关键问题是我们无法在输入端传递多个嵌套的括号,而输出端例如markup-locref
没有任何困难。
因此,提到的策略是可以的,关闭第二个命令的生成,\hyperpage
该命令由hyperref
包,它被传递给xindy
,否则我们无论如何都需要通过外部工具来处理它。
我们的问题分为两部分:如果我们在@
运算符(排版材料)之后或|
运算符(索引引用)之后使用一个命令。
- 在
@
操作符之后,我使用一个新的单一命令,我可以使用任何排版材料,在下面的例子中,我将颜色、数学、字体样式、缩进和其他材料传递给索引条目。它不用于排序,因此xindy
原封不动地传递它。 - 但是,如果我们使用
|
运算符,我们不会在命令中使用反斜杠,并且我们必须通知xindy
它是什么,因为它将成为合并、排序、分组、标记等的一部分。我们创建自己的xdy
文件并在那里使用define-attributes
。markup-locref
由于该filecontents
软件包,很容易在主 TeX 文件中拥有这些定义。
这解决了大多数索引的两部分问题。我附上了一个简单的示例和第一页的预览。我运行这三个命令来处理该示例。
lualatex xindyno1.tex
xindy -M texindy -M mal-style -C utf8 -L swedish -o xindyno1.ind xindyno1.idx
lualatex xindyno1.tex
%! lualatex xindyno1.tex
\documentclass{article}
\usepackage{luatextra} % Due to Swedish Ä letter, use inputenc (pdflatex) or fontspec (xelatex) instead.
\usepackage{xcolor}
\usepackage[hyperindex=false,colorlinks]{hyperref}
\usepackage{filecontents}
\usepackage{makeidx}
\makeindex
\begin{document}
\begin{filecontents*}{mal-style.xdy}
(define-attributes (("texttt" "textsc" "myown")) )
(markup-locref :attr "textbf" :open "\textbf{\hyperpage{" :close "}}")
(markup-locref :attr "textit" :open "\textit{\hyperpage{" :close "}}")
(markup-locref :attr "texttt" :open "\texttt{\hyperpage{" :close "}}")
(markup-locref :attr "textsc" :open "\textsc{\hyperpage{" :close "}}")
(markup-locref :attr "myown" :open "\myown{\hyperpage{" :close "}}")
(markup-locref :attr "hyperpage" :open "\hyperpage{" :close "}")
(markup-locref :attr "default" :open "\hyperpage{" :close "}")
\end{filecontents*}
\def\myshift#1{\makebox[0pt][r]{\texttt{--}}\texttt{#1}}
\def\myown#1{{\Huge#1}}
\def\mycommand#1{{\color{green}#1}}
\def\mydef#1{\texttt{\makebox[0pt][r]{\char"5C}#1}}
\def\mymath#1{{\color{blue}$#1$}}
\def\myfavorite#1{{\color{cyan}\makebox[0pt][r]{I $\heartsuit$\ }{\color{cyan}#1}}}
\begingroup % Print index without page number.
\def\thispagestyle#1{}
\pagestyle{empty}
\printindex
\endgroup
\section{My section}\label{mysection}
I refer to my section~\ref{mysection}.
Start. Nunc ligula faucibus\index{xindy|textbf}.
\index{vector@Vector}
\index{runme@\mycommand{runme}}
\index{asquared@\mymath{a^2}}
\index{bsquared@\mymath{b^2}}
\index{csquared@\mymath{c^2}}
\index{roof|myown}
\index{mal@\myshift{mal}}
\index{nature@\textbf{Nature}}
\index{home!my own 1}
\index{home!my own 2}
\index{definition@\mydef{definition}}
\index{Velocity}
Nullarutrum porttitor...
\index{alcohol}\index{beauty}\index{älf}\index{zero}
\newpage
\index{vectors@\myfavorite{vectors}}
\index{roof|myown}
\index{roof}
End.
\end{document}
下一个索引示例
索引只是像其他任何材料一样的常规排版材料,通常由idx
包含许多\indexentry
文件命令的文件生成,它由带有一堆命令的环境ind
组成,通常包含许多、和,如果需要,我们可以重新定义它们。theindex
\item
\indexspace
\lettergroup
\lettergroupDefault
我附上了我的作品的快照。第一个例子包含我们所指的特定字体的字形(左图),第二个例子包含 CJKV 字形,更具体地说,这些是日语中使用的汉字(右图)。