修改 plainurl bst 文件以添加其他预印本服务器

修改 plainurl bst 文件以添加其他预印本服务器

我对此还很陌生,我正在尝试修改标准的 plainurl bst 文件以在常用链接(arxiv/doi/pubmed/url)之上添加其他链接。

通过准确模仿文件中出现的内容,我可以做到这一点,但我想要解析的预印本服务器需要在 url 上有一个最后的“/”,否则该页面似乎不存在。

具体来说,除了我必须在 ENTRY、STRINGS 等中定义的部分之外,我还有

FUNCTION {format.newserver}
{ newserver empty$
    { "" }
    { newserverprefix number * newserverurl number * make.href }
  if$
}

在参考书目中打印出 newserverprefix:number hyperreff'ed tohttp://新服务器网址/号码

我想将其改为“http://新服务器网址/号码/“。我怎样才能实现它?

答案1

如果没有适当的例子来测试,很难确定任何事情,但如果您想要做的只是添加尾随/,那么您可以使用"/" *afternewserverprefix number *添加到打印的文本和/或 afternewserverurl number *添加到实际的 URL:

FUNCTION {format.newserver}
{ newserver empty$
    { "" }
    { newserverprefix number * "/" * % This adds / to the printed text
         newserverurl number * "/" * % This adds / to the actual URL
      make.href }
  if$
}

一个解释:

BibTeX 语言使用逆波兰表示法 (RPN) 或后缀表示法,这意味着您将项目添加到堆栈,然后使用运算符对该堆栈执行某些操作。

format.newserver函数将数据添加newserver到堆栈中,然后使用该 empty$函数。该函数将测试堆栈最顶部的数据是否为空(令人惊讶!)并将结果保留在堆栈顶部。

然后,该函数将另外两个项目添加到堆栈中:""newserverprefix number * newserverurl number * make.href,然后使用该if$函数。此函数将从堆栈顶部取出三个项目,并检查第三个项目(自上而下)是否为真。如果是,则将第二个项目放回堆栈,否则将第一个项目放回堆栈。

如果为newserver空,则函数返回"",因此我们知道整个函数应该只返回一个字符串。如果newserver不为空,则newserverprefix number * newserverurl number * make.href使用。

该序列将newserverprefixnumber放入堆栈,并将两个字符串与连接起来*。然后将newserverurlnumber放入堆栈,并用连接起来*。然后make取出堆栈最上面的两个项目并写入 URL。第二项(自上而下)是要打印的文本,第一项是实际的 URL。

因此,要添加尾随,/您需要向堆栈添加另一个项目,即字符串"/",然后将其与 URL 文本和/或带有的 URL 连接起来*

newserverprefix % add newserverprefix 
number          % add number
*               % concatenate
"/"             % add "/"
*               % concatenate
newserverurl    % add newserverurl
number          % add number
*               % concatenate
"/"             % add "/"
*               % concatenate
make.href       % make the hyper-reference

相关内容