删除 bibtex *.bst 中“note”字段子字符串的命令

删除 bibtex *.bst 中“note”字段子字符串的命令

我有一份简历,其中所有的演讲都使用“@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 字段中将受邀演示文稿标记为“位置,受邀”)。

相关内容