我尝试使用索引选项来实现一些稍微复杂的事情biblatex's
。考虑以下 MWE:
\documentclass{article}
\usepackage{fontspec}
\setmainfont{TeX Gyre Pagella}
\usepackage[style=authoryear,indexing=cite]{biblatex}
\usepackage{filecontents}
\begin{filecontents*}{bib.bib}
@book{morus,
Address = {Louvain},
Author = {Morus, Thomas},
Publisher = {Nomos},
Title = {Utopia},
Year = {2014}}
}
\end{filecontents*}
\DeclareIndexNameFormat{name:title}{%
\iffieldundef{title}
{\usebibmacro{index:name}{\index}
{\namepartfamily}
{\namepartgiven}
{\namepartprefix}
{\namepartsuffix}}
{\usebibmacro{index:name:title}{\index}
{\namepartfamily}
{\namepartgiven}
{\namepartprefix}
{\namepartsuffix}}}
\newbibmacro*{cbx:index-name-title}{%
\ifciteindex
{\indexnames[name:title]{labelname}}
{}}
\DeclareCiteCommand{\citetitle}
{\usebibmacro{prenote}}
{\usebibmacro{cbx:index-name-title}
\printtext[bibhyperref]{\printfield[citetitle]{labeltitle}}}
{\usebibmacro{cite:postnote}}
\usepackage[]{imakeidx}
\def\xindyopt{-C utf8 -M texindy}
\makeindex[program=truexindy,columns=1,options=\xindyopt]
\addbibresource{bib.bib}
\begin{document}
\citetitle{morus}
\printbibliography
\printindex
\end{document}
我首先定义一个\citetitle
命令,将书名放入索引中。然后我利用{index:name:title}
已在中定义的宏biblatex.def
。这不仅仅是将书名放入索引中,而是将其作为作者名下的子项进行排序。像这样:
这很好,但我想要更多:我还想要书名下的索引项,然后引用其作者。因此在这种情况下,我还想要以下条目:
乌托邦,看看托马斯·莫鲁斯
我尝试通过\index{\thefield{title}|see{\printnames{author}}}
在\citetitle
命令中插入类似的内容来做到这一点,但这不起作用,因为作者姓名在需要的时候没有得到解析。
编辑:当前的解决方案是使用以下两种构造中的任一种:
\index{\citetitle{\thefield{entrykey}}%
|see{\citename{\thefield{entrykey}}[]{author}}}
\index{\emph{\thefield{indextitle}}%
|see{\citename{\thefield{entrykey}}[]{author}}}
它们都还不是完美的。citetitle
使用正确的格式,但没有考虑indextitle
到。\thefield{indextitle}
使用正确的字段,但在这里我必须对格式进行硬编码。