![删除 bibtex *.bst 中“note”字段子字符串的命令](https://linux22.com/image/457264/%E5%88%A0%E9%99%A4%20bibtex%20*.bst%20%E4%B8%AD%E2%80%9Cnote%E2%80%9D%E5%AD%97%E6%AE%B5%E5%AD%90%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E5%91%BD%E4%BB%A4.png)
我有一份简历,其中所有的演讲都使用“@misc”格式——对于一些出版物,我想将它们标记为“受邀”,并且我有一个简历版本,我通过将其附加到位置来实现这一点(通过使用 ISSN 字段作弊)
@misc{mypresentation2011,
title= {How do I do this with LaTeX?},
author = {Jane Q. Smith},
month = {November},
year = {2011},
howpublished={talk},
issn={Seattle, WA, USA, Invited},
note={University of Washington Department of Mathematics Seminar Series}
}
对于另一份带有第二个 *.bst 文件的简历(个人简介),我想只为受邀演讲设置一个单独的部分。在这种情况下,添加“,受邀”是多余的,我想进行搜索并将其替换为空字符串。这样,我需要一个 .bib 文件,一份简历保留原样,另一份简历删除它。
下面带有 xstring 的宏按照我的意愿对主 .tex 文件中的条目进行操作,但是我无法让它在 *bst 文件中或围绕我使用的 \bibentry 表现良好......
\newcommand{\delinvited}[1]{%
\StrDel{\bibentry{#1}}{, Invited}
}
有什么想法吗?
答案1
仅供参考,我最终找到了一个解决方法。不确定这是否是最优雅的,但我会在这里发布,以备将来遇到问题时参考。
基于最优秀的驯服野兽,我把这两个函数添加到我的bst文件中(注意需要添加在下面“not” 函数定义,如果你没有,你必须添加一个,也遵循 TtB)
%% from Tame the Beast
INTEGERS{ l }
FUNCTION{ string.length }
{
#1 'l :=
{duplicate$ duplicate$ #1 l substring$ = not}
{l #1 + 'l :=}
while$
pop$ l
}
STRINGS{replace find text}
INTEGERS{find_length}
FUNCTION{find.replace}
{ 'replace :=
'find :=
'text :=
find string.length 'find_length :=
""
{ text empty$ not }
{ text #1 find_length substring$ find =
{
replace *
text #1 find_length + global.max$ substring$ 'text :=
}
{ text #1 #1 substring$ *
text #2 global.max$ substring$ 'text :=
}
if$
}
while$
}
然后,我添加了一个函数,在格式化 ISSN(即我的虚假会议信息)时从堆栈中的最后一个字符串中删除“Invited”
% Here we use ISSN as location + invited status
% Remove ", Invited" from strings
FUNCTION {removeinvite.issn}
{
", Invited" "" find.replace
}
FUNCTION {format.issn}
{ issn empty$
{ "" }
{ "" * issn removeinvite.issn }
if$
}
这给出了所需的行为(假设我在 ISSN 字段中将受邀演示文稿标记为“位置,受邀”)。