使用 nameauth 包将姓氏转换为小写

使用 nameauth 包将姓氏转换为小写

我现在使用\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(包括索引等),因此它不允许轻松修改您要求的类型。但是,通过调整包的相当一部分代码,我相信我已经想出了一个修改后的版本,可以执行您要求的操作。

我为该软件包引入了两个新功能:

  1. 与现在的命令类似,\CapName有一个\SCapName命令将当前名称的姓氏转换为小写字母,并将其与姓氏一起列在索引中。
  2. 对您来说,可能更有趣的是新的包选项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) 可以分为基数/后缀对。该对的含义与上下文相关。

  1. 在西方人的名字中,您需要格式化基数和后缀。在这里,基数和后缀正确地属于姓氏。您可以根据需要将它们格式化为:

    \PretagName[Thurston]{\textSC{Howell},\textSC{III}}{Howell, Thurston 3}
    \Name[Thurston]{\textSC{Howell},\textSC{III}}
    

    如果您尝试将整个姓氏和后缀放在一个范围内,\textSC则可能会产生括号不平衡的错误。

  2. 在实施全大写字母的东方名称中,您只需要格式化词根。因此:

    \PretagName{\textSC{Sun}, Yat-sen}{Sun Yat-sen}
    \Name{\textSC{Sun}, Yat-sen}
    
  3. 在古代或中世纪的名字中,它可以是任意一种格式,正如托马斯·阿奎那和托马斯·肯皮斯所暗示的那样。然而,对于皇室名字,你可能再次希望将词根和后缀格式化:

    \PretagName{\textSC{Elizabeth},\textSC{I}}{Elizabeth I}
    \Name{\textSC{Elizabeth},\textSC{I}}
    

当您概括姓名时,没有自动方法可以判断什么是“姓氏”。这是一项设计功能,因为 nameauth 包试图避免任何民族中心主义偏见。

当前软件包文档对这些和其他相关问题进行了深入的探讨。

相关内容