我现在使用\package{nameauth}
。
我只想在我的作品中使用相同形式的名字呈现(第一个和另一个)仅限小写姓氏或单名在我的文本和索引中。我可以在这里阅读该包的基本参数:
当你了解编程时,我的目标似乎很简单男人“2.5.5. 自定义格式”,但我不是一个好的程序员。这里是男人:
在我的工作中,我使用arara
xelatex
imakeidx
xindy
glossaries
babel
& 例如:
% !TEX encoding = UTF-8 Unicode
% !TEX TS-program = arara
\documentclass{scrbook}
\usepackage{makeidx}
\usepackage[noformat]{nameauth}
\makeindex
\begin{document}
\Name[Jean de]{La Fontaine}, \\
\Name*[Jean de]{La Fontaine}, \\
\FName[Jean de]{La Fontaine}[Jean] \\
\AKA[Jean de]{La Fontaine}{le fabuleux}\\
Jean de \textsc{La Fontaine} \\ % to show you what I want…
\printindex
\end{document}
% arara: xelatex
% arara: makeindex
% arara: xelatex
% arara: xelatex: {shell: yes}
你可以看到结果:
以下是索引:
如果您的意思是这是可能的(没有什么是不可能的,不是吗?),请帮助我。
答案1
与您的建议相反,这\NameFormat
在这里没有任何帮助,因为它总是影响整个名称并且不允许仅格式化姓氏。
而且由于该nameauth
包将其所有功能都隐藏在命令定义中Name
(包括索引等),因此它不允许轻松修改您要求的类型。但是,通过调整包的相当一部分代码,我相信我已经想出了一个修改后的版本,可以执行您要求的操作。
我为该软件包引入了两个新功能:
- 与现在的命令类似,
\CapName
有一个\SCapName
命令将当前名称的姓氏转换为小写字母,并将其与姓氏一起列在索引中。 - 对您来说,可能更有趣的是新的包选项
namesmallcaps
,它与选项类似allcaps
,始终将姓氏设置为小写字母,但与选项相反,allcaps
它还以小写字母编制索引。 (注:手册关于allcaps
选项:“请注意,这只会影响打印形式;索引中不会出现大写字母。在这种情况下,用户应该手动输入大写字母。”因此,这里新选项smallcaps
和现有allcaps
选项的行为不同!)
现在,最后是一些代码:
% !TEX encoding = UTF-8 Unicode
% !TEX TS-program = arara
\documentclass{scrbook}
\usepackage{makeidx}
\usepackage[noformat,namesmallcaps]{nameauth_mod}
\makeindex
\usepackage{showidx}
\begin{nameauth}
\< LaFontaine & Jean de & La Fontaine & >
\end{nameauth}
\SubvertName[Jean de]{La Fontaine}
\begin{document}
\Name[Jean de]{La Fontaine} \emph{and} \LaFontaine
\Name*[Jean de]{La Fontaine}{} \emph{and} \LLaFontaine
\FName[Jean de]{La Fontaine}[Jean] \emph{and} \SLaFontaine %\S* seems not quite the same as \FName
\CapName\Name[Jean de]{La Fontaine}{} \emph{and} \CapName\LaFontaine
\SCapName\Name[Jean de]{La Fontaine}{} \emph{and} \SCapName\LaFontaine
\AKA[Jean de]{La Fontaine}{le fabuleux}
Jean de \textsc{La Fontaine} % to show you what I want…
\printindex
\end{document}
% arara: xelatex
% arara: makeindex
% arara: xelatex
% arara: xelatex: {shell: yes}
生成:
右侧显示索引键(注意使用包裹showidx
)。
类似地,当不使用该namesmallcaps
选项时,其他格式选项保持不变(包括索引),输出将是:
其中只有两个用法\SCapName
是小写,包括索引条目。
最后修改包的代码为这里- 将其放入nameauth_mod.sty
您正在工作的同一文件夹并替换\usepackage{nameauth}
为\usepackage{nameauth_mod}
。
原始 .sty 与新 .sty 之间的差异如下:
24c24
< \ProvidesPackage{nameauth}
---
> \ProvidesPackage{nameauth_mod}
37a38,39
> \newif\if@nameauth@SmallCaps
> \newif\if@nameauth@SmallThis
50a53
> \DeclareOption{namesmallcaps}{\@nameauth@SmallCapstrue}
82a86,89
> \newcommand*{\@nameauth@SmallCapRoot}[1]%
> {%
> \textsc{\@nameauth@Root{#1}}%
> }
142a150,153
> \newcommand{\SCapName}%
> {%
> \@nameauth@SmallThistrue%
> }
162a174
> \if@nameauth@SmallCaps\SCapName\fi%
173c185,191
< \let\IndexShort\RawShort%
---
> \protected@edef\SmallCapShort{\@nameauth@SmallCapRoot{#2}}%
> \if@nameauth@SmallThis%
> \protected@edef\RawShortIdx{\textsc{\RawShort}}%
> \else%
> \protected@edef\RawShortIdx{\RawShort}%
> \fi%
> \let\IndexShort\RawShortIdx%
176c194
< \let\IndexSurnames\RawShort%
---
> \let\IndexSurnames\RawShortIdx%
189a208,212
> \if@nameauth@SmallThis%
> \let\Reversed\SmallCapShort%
> \let\Surnames\SmallCapShort%
> \let\PrintShort\SmallCapShort%
> \fi%
192c215
< \protected@edef\IndexSurnames{\RawShort\Space\Suffix}%
---
> \protected@edef\IndexSurnames{\RawShortIdx\Space\Suffix}%
217a241,249
> \if@nameauth@SmallThis%
> \protected@edef\Reversed{\Suffix\Space\SmallCapShort}%
> \protected@edef\Surnames{\SmallCapShort\Space\Suffix}%
> \if@nameauth@RevThis%
> \let\PrintShort\Suffix%
> \else%
> \let\PrintShort\SmallCapShort%
> \fi%
> \fi%
220a253
> \@nameauth@SmallThisfalse%
答案2
请注意,当前版本的软件包可能无法与上述不同版本兼容。截至 2015 年 12 月初,版本 2.2 将是最新版本。
[2017 年编辑,下面有许多变化] 版本 3.2 是截至 2017 年 4 月的最新版本,并且具有更多功能来辅助这种格式。
幸运的是,由于您希望在正文中格式化所有内容和在索引中,有一种方法可以做到这一点,而无需输入大量额外的宏:
\PretagName[Jean de]{\textSC{La Fontaine}}{La Fontaine, Jean de}
\begin{nameauth}
\< Fontaine & Jean de & \textSC{La Fontaine} & >
\end{nameauth}
\Fontaine
\LFontaine
\SFontaine[Jean]
如果您的整个文档都采用 Continental 格式,请使用altformat
包选项。这样,\CapThis
就不会导致错误。如果您确实使用,\CapThis
您还需要使用\noexpand
,例如:
\PretagName[Hernando]{\noexpand\textSC{\noexpand\AltCaps{d}e Soto}}{de Soto, Hernando}
\begin{nameauth}
\< Soto & Hernando & \noexpand\textSC{\noexpand\AltCaps{d}e Soto} & >
\end{nameauth}
\Soto
\CapThis\Soto
此处“姓氏”的问题在于,姓氏字段 (SNN) 可以分为基数/后缀对。该对的含义与上下文相关。
在西方人的名字中,您需要格式化基数和后缀。在这里,基数和后缀正确地属于姓氏。您可以根据需要将它们格式化为:
\PretagName[Thurston]{\textSC{Howell},\textSC{III}}{Howell, Thurston 3} \Name[Thurston]{\textSC{Howell},\textSC{III}}
如果您尝试将整个姓氏和后缀放在一个范围内,
\textSC
则可能会产生括号不平衡的错误。在实施全大写字母的东方名称中,您只需要格式化词根。因此:
\PretagName{\textSC{Sun}, Yat-sen}{Sun Yat-sen} \Name{\textSC{Sun}, Yat-sen}
在古代或中世纪的名字中,它可以是任意一种格式,正如托马斯·阿奎那和托马斯·肯皮斯所暗示的那样。然而,对于皇室名字,你可能再次希望将词根和后缀格式化:
\PretagName{\textSC{Elizabeth},\textSC{I}}{Elizabeth I} \Name{\textSC{Elizabeth},\textSC{I}}
当您概括姓名时,没有自动方法可以判断什么是“姓氏”。这是一项设计功能,因为 nameauth 包试图避免任何民族中心主义偏见。
当前软件包文档对这些和其他相关问题进行了深入的探讨。