我希望我的索引能够以页码加脚注符号的形式显示脚注中的项目,例如137n7
第 137 页脚注 7 中的项目。以下https://tex.stackexchange.com/a/55460/3935,我在脚注中使用了一个特殊的索引命令,当使用 MakeIndex 处理文件时,该命令可以正常工作.idx
。该命令取决于命令中管道的含义(对于 MakeIndex 来说很特别)\index
,以修改索引项的页码。
texindy
但是,为了支持外语,我使用 而不是 MakeIndex 来处理索引,并且texindy
这些特殊索引条目被忽略。xindy
手册页解释道:
对于 LaTeX 语法中的原始索引条目,
\index{aaa|bbb}
解释不同。对于 MakeIndex 来说,bbb
是作为此页码的 LaTeX 标签输出的标记。对于xindy
,这是一个位置属性,一个抽象标识符,稍后将与应为该属性输出的标记相关联。
我不明白如何处理xindy
位置属性以获得原始效果。在我看来,因为\footnote
必须附加,所以这不是可以在原始待索引文件本身之外完成的简单标记。Xindy 标记语法描述Xindy 文档网站。
平均能量损失:
%!TEX encoding = UTF-8 Unicode
\documentclass[12pt]{scrbook}
\usepackage{makeidx}
\makeindex
\newcommand{\pageandfn}[2]{#2n#1} % format as <page>n<footnotemark>
\newcommand{\indexfn}[1]{\index{#1@ #1|pageandfn{\thefootnote}}}
\begin{document}
Some text here.%
\footnote{Plain footnote\index{footnote, \texttt{\textbackslash index}}.} %
More text here.\footnote{%
Specially indexed footnote\indexfn{footnote, \texttt{\textbackslash indexfn}}.
}
\printindex
\end{document}
编译一次后的文本:
.idx
以下是文件的内容:
\indexentry{footnote, \texttt {\textbackslash index}}{1}
\indexentry{footnote, \texttt {\textbackslash indexfn}@ footnote, \texttt {\textbackslash indexfn}|pageandfn{2}}{1}
使用 MakeIndex 处理然后再次编译:
处理texindy
然后再次编译:
答案1
除了将页码写入索引文件外,还可以写入页码和脚注编号的列表,如果要索引的项目不在脚注中,则将后者设置为 0。
以下是该想法如何应用于您的 MWE。它还使用 hyperref 以提供更多便利。
mwe-style.xdy:
;; make xindy and hyperindex work together
;; see http://tex.stackexchange.com/questions/80300/how-can-i-convince-hyperref-and-xindy-to-play-together-nicely
;; (the comment by michal.h21)
;; (markup-locref :open "\hyperpage{" :close "}")
;; now taken care of by attribute formatloc
(define-attributes (("formatloc")) )
(markup-locref :attr "formatloc" :open "\formatloc{" :close "}")
(define-location-class "pagefn" :var
("arabic-numbers" :sep " " "arabic-numbers"))
(define-location-class-order ("pagefn"))
;; End
麦格:
%!TEX encoding = UTF-8 Unicode
\documentclass[12pt]{scrbook}
\usepackage{etoolbox}
\usepackage{hyperref}
\usepackage[original]{imakeidx}
\makeindex[program=texindy,options=-M mwe-style]
% test to detect we are in a footnote;
% taken from
% http://tex.stackexchange.com/questions/171681/detect-whether-im-in-a-footnote/
\let\svfootnote\footnote
\renewcommand\footnote[2][\thefootnote]{%
\stepcounter{footnote}%
\gdef\infootnote{T}%
\svfootnote[#1]{#2\gdef\infootnote{F}}%
}
\gdef\infootnote{F}
% write the footnote number if we're in one
% and 0 otherwise
\makeatletter
\newcommand{\fnind}{\if T\infootnote
\@currentlabel%
\else 0\fi%
}
\makeatother
% \formatlocc formats the locations as given in the .ind index files
% \formatloc is a wrapper for \formatlocc to permit braces
\newcommand{\formatloc}[1]{\formatlocc #1}
\def\formatlocc #1 #2{%
\ifnumequal{#2}{0}{\hyperpage{#1}}{\hyperpage{#1}n#2}%
}
% http://tex.stackexchange.com/questions/20894/make-index-entries-refer-to-something-other-than-the-page-numbers/20910#20910
\makeatletter
\let\@indexfn\@index
\patchcmd{\@indexfn}{\@wrindex}{\@Wrindex}{}{}
\let\@Wrindex\@wrindex
\patchcmd{\@Wrindex}{\thepage}{\thepage\space\fnind}{}{}
\let\xindexfn\index
\patchcmd{\xindexfn}{\@index}{\@indexfn}{}{}
\patchcmd{\xindexfn}{\@index}{\@indexfn}{}{}
\newcommand{\indexfn}[2][\imki@jobname]{\xindexfn[#1]{#2|formatloc}}
\makeatother
\begin{document}
Some text here.%
\footnote{Plain footnote\index{footnote, \texttt{\textbackslash index}}.} %
More text here.\footnote{%
Specially indexed footnote\indexfn{footnote, \texttt{\textbackslash indexfn}}.
}
\printindex
\end{document}
使用 -shell-escape 标志进行编译,或手动运行 texindy。