我对此还很陌生,我正在尝试修改标准的 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
使用。
该序列将newserverprefix
和number
放入堆栈,并将两个字符串与连接起来*
。然后将newserverurl
和 number
放入堆栈,并用连接起来*
。然后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