我想创建一个人员索引。我使用了 nameauth 包,并且正在研究回忆录类。我没有完全获得我想要的结果。我也尝试过摆弄词汇表和 imakeidx,但说实话,我不太擅长定制。
我正在尝试做的事情:
- 正向引用索引中的名称,最好使用像我的 MWE 中那样的简单命令。nameauth 包缺少正向引用,但它确实可以进行正确的反向引用。
- 仅用于索引的描述字段。最好是生命日期包括在名称的第一次出现中,但不在其余描述中。在我的 MWE 中,我试图通过将其放在“词缀”部分来规避该问题,但这当然不能令人满意。
- 在我的 MWE 中,使用名称命令后存在空格问题。我该如何解决这个问题?
- 最后,我希望在索引的描述中包含超链接,即
我现在拥有的 MWE:
\documentclass[a4paper,oneside]{memoir}
\usepackage{geometry}
\usepackage{nameauth}
\usepackage[hidelinks]{hyperref} % For hyperlinks in the PDF
\makeindex
\begin{document}
\pagestyle{plain}
\begin{nameauth}
\< Bosscha & Johannes & Bosscha, Jr. (1831-1911) & >
\< BosschaSr & Johannes & Bosscha, Sr. (1784-1874) & >
\< Someone & Mister & Someone, (1812-1911) & >
\end{nameauth}
\chapter{test}
And I want to test \Bosscha, or either is it \BosschaSr. So the second
time it is called we get: \Bosscha and \BosschaSr. Another test is
\Someone and \Name[Mister]{Someone2}{ (1812-1911), and some text}.
Lastly, I could try a manual \href{www.google.nl}{\Bosscha (1831-1911)},
although I'm not sure this is a solution to my problem.
\printindex
\end{document}
我想要实现的目标:
文中第一次出现 [小型大写]:
Johannes van Bosscha Jr. (1831-1911) 出生于等。
这是正确的。我想将后面出现的改为小写:
小范博查在晚年做了这样那样的事情。
在索引中:
Bosscha,Johannes van,Jr.(1831-1911),人物描述,第 1、3、5 页。
在哪里某处我里面有一个超链接。
nameauth 部分已经具备了我需要的有关排序和反向引用的功能,但我缺乏编辑索引中描述和超引用部分的自由,并且没有前向引用。我该如何解决这个问题?
答案1
acro
下面是使用和(为了方便)包的示例imakeidx
。acro
需要为每个包设置一个非常详细的首字母缩写词,因为您需要所有的花哨功能,但该包提供了许多可定制的功能。
\documentclass{memoir}
\usepackage[T1]{fontenc}
\usepackage{imakeidx}
\makeindex
\usepackage{acro}
\acsetup{
first-style=long, page-style=plain, index,
activate-trailing-tokens = {dot}
}
\usepackage{hyperref}
\DeclareAcronym{bosscha}{
% Appearance in text
short = {Van Bosscha Jr\acdot},
long = {Johannes van Bosscha Jr\acdot},
long-post = {\space (1831--1911)},
first-long-format = {\scshape},
short-plural = , long-plural = ,
% Appearance in \printacronyms
extra = {(1831--1911)},
sort = {Van Bosscha, Johannes, Jr.},
list = {\href{www.google.com}{Van Bosscha, Johannes, Jr}},
% Appearance in index
index = {\href{www.google.com}{Van Bosscha, Johannes, Jr.} (1831--1911)},
}
\DeclareAcronym{bosschasr}{
short = {Van Bosscha Sr\acdot},
long = {Maior van Bosscha Sr\acdot},
long-post = {\space (1700--1831)},
first-long-format = {\scshape},
extra = {(1700--1831)},
sort = {Van Bosscha, Maior, Sr},
list = {\href{www.yahoo.com}{Van Bosscha, Johannes, Sr}},
index = {\href{www.yahoo.com}{Van Bosscha, Johannes, Sr.} (1700--1831)},
}
\begin{document}
\chapter{Test}
And I want to test \ac{bosscha}, or either is it \ac{bosschasr}. So
the second time it is called we get: \ac{bosscha} and \ac{bosschasr}.
% Another test is \Someone and \Name[Mister]{Someone2}{ (1812-1911),
% and some text}. Lastly, I could try a manual
% \href{www.google.nl}{\Bosscha (1831-1911)}, although I'm not sure
% this is a solution to my problem.
\clearpage
And I want to test \ac{bosscha}, or either is it \ac{bosschasr}. So
the second time it is called we get: \ac{bosscha} and \ac{bosschasr}.
\printacronyms[name=Persons of Interest]
\printindex
\end{document}
这里我包含了\printacronyms
命令,以便您可以将其与索引输出进行比较。(请注意,作者acro
并不认为索引是一个有用的功能,如果您喜欢此选项并注意到任何问题,请发送电子邮件。)
答案2
截至 2017 年 4 月,nameauth 包将满足您要求的大部分功能,超链接除外。恐怕此功能要等到未来了。
为了简单起见,我没有像后续材料所建议的那样将名称设置为“Van Bosscha”。有几种不同的方法可以做到这一点,具体取决于语言需求,正如软件包文档所建议的那样。美国英语将助词放在姓氏中,例如\noexpand\textSC{\noexpand\AltCaps{v}an Bosscha}
。其他上下文将助词分开,要么放在 FNN 字段中,要么放在备用名称字段中,具体取决于索引中想要的内容。我坚持使用下面 MWE 的修改版本,它大致显示了目前可以从 nameauth 3.2 中期待的内容:
\documentclass[a4paper,oneside]{memoir}
\usepackage{geometry}
\usepackage[altformat]{nameauth}
\PretagName[Johannes]{\noexpand\textSC{Bosscha},\noexpand\textSC{Jr.}}
{Bosscha, Johannes, Jr.}
\PretagName[Johannes]{\noexpand\textSC{Bosscha},\noexpand\textSC{Sr.}}
{Bosscha, Johannes, Sr.}
\NameAddInfo[Johannes]{\noexpand\textSC{Bosscha},\noexpand\textSC{Jr.}}
{(1831--1911)}
\NameAddInfo[Johannes]{\noexpand\textSC{Bosscha},\noexpand\textSC{Sr.}}
{(1784--1874)}
\TagName[Johannes]{\noexpand\textSC{Bosscha},\noexpand\textSC{Jr.}}
{ (1831--1911)}
\TagName[Johannes]{\noexpand\textSC{Bosscha},\noexpand\textSC{Sr.}}
{ (1784--1874)}
\makeatletter % I should put the nonbreaking space below in the pkg docs
\renewcommand*\NamesFormat[1]{\begingroup%
\protected@edef\temp{\endgroup{#1~%
\noexpand\NameQueryInfo[\unexpanded\expandafter{\the\@nameauth@toksa}]
{\unexpanded\expandafter{\the\@nameauth@toksb}}
[\unexpanded\expandafter{\the\@nameauth@toksc}]}}\temp}
\makeatother
\renewcommand*\MainNameHook{\AltOn}
\begin{nameauth}
\< Bosscha & Johannes & \noexpand\textSC{Bosscha},\noexpand\textSC{Jr.} & >
\< BosschaSr & Johannes & \noexpand\textSC{Bosscha},\noexpand\textSC{Sr.} & >
\end{nameauth}
\makeindex
\begin{document}
\AltFormatActive*
\pagestyle{plain}
\chapter{test}
I want to test \Bosscha, or either is it \BosschaSr{}.
We actually have to frustrate the punctuation detection
when adding a text tag here. I will explain this in the
docs for the next version.
The second time it is called we get: \Bosscha\ and \BosschaSr.
Again \KeepAffix\LBosscha\ and \LBosschaSr.
We can force the formatting via \ForceName\Bosscha\ and
\ForceName\BosschaSr, which is not the same as
\ForgetThis\Bosscha\ and \ForgetThis\BosschaSr{}.
\printindex
\end{document}