Xindy:Index 的封装

Xindy:Index 的封装

好吧,我努力提高我的指数辛迪。我尝试使用\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 使用单独的样式文件。以下示例结果为:

enter image description here

和往常一样,我习惯imakeidx简化这个过程。但是你必须用 进行编译shell-escape

诀窍是允许hyperref为索引提供每个功能,但写入 idx 文件时必须不受 hyperref 的影响。这可以通过imakeidx在 之后加载来实现。必须在 的样式文件中定义 之hyperref类的格式规则。textbfxindy

\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 swedishxindy

我发现的关键问题是我们无法在输入端传递多个嵌套的括号,而输出端例如markup-locref没有任何困难。

因此,提到的策略是可以的,关闭第二个命令的生成,\hyperpage该命令由hyperref包,它被传递给xindy,否则我们无论如何都需要通过外部工具来处理它。

我们的问题分为两部分:如果我们在@运算符(排版材料)之后或|运算符(索引引用)之后使用一个命令。

  • @操作符之后,我使用一个新的单一命令,我可以使用任何排版材料,在下面的例子中,我将颜色、数学、字体样式、缩进和其他材料传递给索引条目。它不用于排序,因此xindy原封不动地传递它。
  • 但是,如果我们使用|运算符,我们不会在命令中使用反斜杠,并且我们必须通知xindy它是什么,因为它将成为合并、排序、分组、标记等的一部分。我们创建自己的xdy文件并在那里使用define-attributesmarkup-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}

Minimum working example


下一个索引示例

索引只是像其他任何材料一样的常规排版材料,通常由idx包含许多\indexentry文件命令的文件生成,它由带有一堆命令的环境ind组成,通常包含许多、和,如果需要,我们可以重新定义它们。theindex\item\indexspace\lettergroup\lettergroupDefault

我附上了我的作品的快照。第一个例子包含我们所指的特定字体的字形(左图),第二个例子包含 CJKV 字形,更具体地说,这些是日语中使用的汉字(右图)。

Two snapshots from my work

相关内容