访问由空格分隔的字符串

访问由空格分隔的字符串

我有这个命令\name来存储某人的姓名。(编辑:我也将此命令用于其他用途,因此我希望它是相同的)。

我想使用命令从参考书目中\plauthorname[first name][von-part]{surname}删除给出的名称。问题是创建一个命令,根据输入将其拆分为一个、两个或三个字符串:\name\name

  • 如果只给出姓氏,即\name{surname}我们得到\plauthorname{surname}
  • 如果给出了名字(和中间名),但没有 von-part,即\name{ Firstname Middlename Lastname}我们得到\plauthorname[Firstname Middlename]{surname}
  • 如果以名称给出识别的 von-part biblatex,即\name{Firstname von-part Lastname}我们得到\plauthorname[first name][von-part]{surname}
  • 如果有人写的话我也希望它能起作用\name{Lastname, Firstname}

最困难的部分(我认为)是找出名称是否包含von-part可识别的\plauthorname

\documentclass{article}

% From .sty file:
\newcommand{\name}[1]{\def\@name{#1}}
\RequirePackage[%
        backend=biber,
        bibstyle=publist,
        hyperref=auto
    ]{biblatex}

% Some code to get first name, middle name von-part and surname.

\plauthorname[first name][von-part]{surname}

\begin{filecontents}[overwrite]{sample.bib}
@article{einstein,
    author = "Albert Einstein",
    title = "{Zur Elektrodynamik bewegter K{\"o}rper}. ({German})
    [{On} the electrodynamics of moving bodies]",
    journal = "Annalen der Physik",
    volume = "322",
    number = "10",
    pages = "891--921",
    year = "1905",
    DOI = "http://dx.doi.org/10.1002/andp.19053221004",
}

@book{dirac,
    title = {The Principles of Quantum Mechanics},
    author = {Paul Adrien Maurice Dirac},
    isbn = {9780198520115},
    series = {International series of monographs on physics},
    year = {1981},
    publisher = {Clarendon Press},
}
\end{filecontents}
\addbibresource{sample.bib}

% This will be defined by users:
\name{Paul Adrien Maurice Dirac}

\begin{document}

foo baz baa

\nocite{*}

\printbibliography


\end{document}

\plauthorname[first name][von-part]{surname}来自biblatex-publisthttps://ctan.org/pkg/biblatex-publist


边注:我考虑将类选项声明为 (a) 不隐藏 publist 中的名称或 (b) 改为在 publist 中突出显示名称(例如normalpublisthighlightpublist)。我该怎么做?我的想法如下:以plauthorhandling=highlight某种方式设置 higlight(?),也设置 normal,plauthorhandling=highlight但将 highlight 重新定义为普通文本(文档中的第 11 页):

\renewcommand*\plauthorhl[1]{%
#1%
}

答案1

这个答案只是初步的——文本太长,无法评论。

您希望将字符串(输入)拆分为多个部分。您粗略地描述了如何构造可能的输入字符串。但您没有描述解析输入的算法应该如何工作。

由于整个事情是在宏观层面上运行的,所以它与标记有关,因此,例如,也涉及在解析之前是否应该扩展由标记组成的字符串的问题。

其他一些问题包括:

  • 该机制是否可以应对不同的输入编码?如果可以,那么是哪些?
  • 包 inputenc 的使用是否起到作用?
  • 同一名称或同一 von-part 的不同 LaTeX 符号在多大程度上起到作用?(例如,假设 von-part 包含变音符号 - 例如\"a"aä可能表示相同的字符。)

我可以想象一种机制

  • 从字符串中删除所有前导和尾随空格标记,
  • 测试剩余字符串中是否存在可能代表 von-parts 的标记序列,如果存在这样的标记序列,则在 von-part 首次出现的位置将剩余字符串拆分为名字、von-part 和姓氏。如果剩余字符串中没有预设 von-part:如果没有空格,则使用剩余字符串作为姓氏,同时假设没有给出名字;如果有空格,则使用剩余字符串的最后一个可用空格分隔的元素作为姓氏,同时假设最后一个可用空格分隔的元素之前的内容构成名字。

该机制在边缘情况下应如何运作尚未指定。

  • 例如,在只有算作 von-part 的事物的情况下的行为;
  • 例如,字符串为空/空白时的行为;
  • 例如,只有名字时的行为;
  • 例如,当姓氏是由几个空格分隔的元素组成的双名时的行为;
  • 例如,姓氏为双名且每个姓氏都有一个 von 部分时的行为。

检查不同 von-parts 是否存在的顺序也是相关的 - 例如,检查“Van der”(如 Van der Waals)应该在检查“Van de”(如 Van de Graaff)之前进行,而检查“Van de”(如 Van de Graaff)又应该在检查“Van”(如 Van Gogh)之前进行。

von-parts 的正确/不正确的字母大小写也可能起到一定作用。

由于存在如此多的极端情况,因此出现了一个问题:是否最好反过来做事:

让您心目中的界面的用户分别指定名称/参数的各个组成部分\plauthorname,然后从它们中组成宏的参数\name

相关内容