![访问由空格分隔的字符串](https://linux22.com/image/456832/%E8%AE%BF%E9%97%AE%E7%94%B1%E7%A9%BA%E6%A0%BC%E5%88%86%E9%9A%94%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2.png)
我有这个命令\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-publist
:https://ctan.org/pkg/biblatex-publist
边注:我考虑将类选项声明为 (a) 不隐藏 publist 中的名称或 (b) 改为在 publist 中突出显示名称(例如normalpublist
和highlightpublist
)。我该怎么做?我的想法如下:以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
。