包装 add.period

包装 add.period

我正在尝试调整随附的 BibTeX 样式文件LNI LaTeX 模板真正匹配在指导方针来自同一个(抱歉,与指南文档相反,带有链接的页面仅提供德语版本)。我以前从未研究过 BST 语言,因此很高兴能够轻松修改显示的名称数量和名称格式,但作者列表后的分隔符仍然是一个悬而未决的问题:

样式文件坚持使用命令add.period在参考书目条目的每个部分后添加句号。但是,指南要求在作者姓名后添加冒号。

我暂时在各个模板函数中插入了冒号,一般结构如下:

format.authors "author" output.check
new.block
format.title "title" output.check

new.block并且output.check是在同一 BST 文件中定义的通用函数。在其中的某个地方add.period被调用。

不幸的是,如果我在之前或之后添加冒号new.block,则会添加另一个句点冒号,使得引用看起来像这样:

样本,S.;示例,E.:供您参考书目的示例论文。

显然,add.period忽略了冒号(好吧,文档隐含地说明了这一点)。因此,我的想法是包装该add.period函数(该函数在 BST 文件中只被调用了三次,因此用对包装函数的调用替换所有调用应该是可行的),该函数检查最后一个字符是否是冒号,如果是,则不执行任何操作,否则add.period将调用该函数。

这是我的包装函数:

FUNCTION {safe.add.period}
{ 's :=
  s s text.length$
  #1 substring$
  ":" =
    'skip$
    { s add.period$ 's := }
  if$
  s
}

应该像这样工作:

  • 从堆栈中取出最顶部的字符串并将其存储为s
  • 将该字符串及其长度放入堆栈
  • 将这两个替换为字符串的最后一个字符
  • 将该字符与冒号进行比较
  • 如果比较返回 true,则不执行任何操作,否则调用add.period并将s结果分配回s
  • 放回s堆栈,就像add.period

我已将 的所有三个调用替换add.periodsafe.add.period,但现在所有句号都消失了。似乎add.period从未被调用过。我做错了什么?

相关内容