自动缩写姓名

自动缩写姓名

是否有一个包或命令可以自动缩写姓名(类似于 bibtex 的功能,但不专门用于作者姓名或引文)?目标是有一个命令可以生成正确格式的索引条目,例如“Einstein, A.”和文本中的名称,例如“Albert Einstein”。理想情况下,该命令只接受一个参数(全名)。对于有多个名字的人,该命令也应该有效。

编辑

我有一份包含许多姓名的长文档。我希望它们以统一的方式出现,并为它们创建索引。目前“A. Einstein”和“Albert Einstein”都可以出现。在索引中,这两个版本当然应该合并为一个条目。我可以编写一个编辑文本文件的脚本,但乳胶解决方案可以足够灵活,以便稍后更改格式,而不会丢失全名中包含的信息。

\newcommand{\myname}[1]{%
   \index{\shortname{#1}}%
   \longname{#1}%
 }%

 \myname{Albert Einstein}

应该打印“Albert Einstein”并在索引中添加元素“Einstein,A.”

答案1

名称验证软件包正是针对这些和类似需求而设计的。2.1 版是我所说的“功能齐全”和“容错”的版本。如果您的发行版尚未升级到 2.1,我强烈建议您在本地 texmf 树中手动安装此版本。

该软件包有一个“主”界面和一个“简化”界面,具体取决于您想要如何使用它。整个想法是制作一个可塑性强并适合不同风格和工作流程的东西。此外,最新版本仍然与早期版本向后兼容。

以下是其功能的简要概述:

  1. 跟踪名称的首次使用和后续使用:\Name[Albert]{Einstein}在名称第一次出现时显示“Albert Einstein”,之后显示“Einstein”。

  2. 处理名称的变体:

    a.\Name*[Albert]{Einstein}无论发生什么情况,总是会产生“Albert Einstein”。

    b.\Name[Albert]{Einstein}[A.]第一次出现该名字时显示“A. Einstein”,之后显示“Einstein”。

    警告:其识别控制序列与 相同\Name[Albert]{Einstein},两者都将创建相同的索引条目“Einstein, Albert”。如果\Name[Albert]{Einstein}先出现,\Name[Albert]{Einstein}[A.]则仅在文本中打印“Einstein”,而\Name*[Albert]{Einstein}[A.]始终打印“A. Einstein”。

    c.\FName[Albert]{Einstein}如果这是对 Einstein 的后续引用,则打印“Albert”,再次共享相同的索引条目“Einstein, Albert”。

  3. 正确对索引中的名称进行排序。即使没有在 中创建样式makeindex或在 中整理序列,您也可以在和中xindy“预先标记”名称以获得所需的内容。例如,将在索引中将“æsc”排序为“ae”。这也有助于对罗马数字名称后缀进行排序。makeindextexindy\PretagName{Æthelred, II}{Aethelred 2}

    此外,一旦标记,名称总是自动包含该标记!

  4. 通过 自动将信息标签或特色添加到索引条目中\TagName

  5. 处理- 索引中的名称引用:

    \AKA{Æthelred, II}{Æthelred}[the Unready]在文本中放入“埃塞尔雷德,未准备好的人”和“埃塞尔雷德,未准备好的人索引中的“埃塞尔雷德二世”。

  6. 妥善处理罗马化的东方名字、中世纪和古代名字、皇室名字以及带有世代后缀的西方名字。

  7. 处理各种“特殊情况”,包括

    a. 粒子:de、de la、d'、von、van、ten、Le、La 和 L' 等。

    b. 连字符需求

    c. NFSS、xelatex和“lualatex”下的 Unicode 重音符号。

  8. 首次使用(或后续使用)的名称格式。

  9. 其他与名称有关的杂项(手册中说明了一切)。

如果时间允许,我希望更新我在 YouTube 上非常旧的教程视频。

相关内容