通过修改bst文件手动设置LaTeX参考文献格式

您所在的位置:网站首页 读取文件后如何改变格式 通过修改bst文件手动设置LaTeX参考文献格式

通过修改bst文件手动设置LaTeX参考文献格式

2024-07-12 03:38| 来源: 网络整理| 查看: 265

最近因为约稿要投一个很偏的期刊,参考文献格式奇葩,现成的\(\LaTeX\)参考文献格式不能满足要求,需要自己手动配置。一些博客中已经介绍了使用makebst工具交互式生成相应bst文件的做法。好处是相对学习成本比较小,坏处就是被人牵着走还不一定能完成需求。

本文介绍的,是掌握BibTeX语法后,直接修改bst文件来设置\(\LaTeX\)参考文献格式的方法。

BibTeX语言一窥

学习BibTeX语法后从头手搓一个bst当然是一种方案,不过稍微取巧一些的是从一些现成的bst出发进行修改,最后满足需求即可。从宏观来看,bst文件只是某种格式或者配置文件,语法应该是比较直截了当的。然而即使是\(\LaTeX\)内置的简单格式如unsrt,其bst文件unsrt.bst也有18 kB,约一千行代码。所有内置参考文献的bst文件都可以从CTAN下载。

unsrt.bst文件中的代码没有太多注释,粗看起来并不好懂。比如以下代码,大体上应该可以判断出来这段代码定义了渲染引用article时参考文献格式的函数,但具体运行逻辑不明朗。12345678910111213141516171819FUNCTION {article}{ output.bibitem format.authors "author" output.check new.block format.title "title" output.check new.block crossref missing$ { journal emphasize "journal" output.check format.vol.num.pages output format.date "year" output.check } { format.article.crossref output.nonnull format.pages output } if$ new.block note output fin.entry}

一个有一定编程基础的人,看完这段代码自然会有如下几个问题:

函数(FUNCTION)的形参和实参是什么?返回值如何定义? 频繁出现在两个单词之间的.代表什么? 出现在单词之后的$有什么含义? {}括起来的是代码块吗?何时需要何时不需要? "引号括起来的部分,是否表示字符串?如果是,为什么最终渲染出来的引文中并没有"author"、"title"等字符串?

只要将这些问题一一解决,BibTeX的语法也就基本清楚了,这时修改bst文件手动设置\(\LaTeX\)参考文献格式也就有如探囊取物。

BibTeX语言基本模型:逆波兰表示法

逆波兰表示法在计算机科学界可说是鼎鼎大名了,其优点是很容易解析(parse)成堆栈操作并实现为计算机代码。例如表达式5 1 3 + 2 \ *:

首先5,1,3依次入栈 对栈顶的1和3做加法操作,结果4入栈 加号后的2入栈 对栈顶的4和2做除法操作,结果2入栈 再对栈顶的5和2做乘法操作,结果10入栈 运算结束

BibTeX是一种脚本语言,基本模型就是通过逆波兰表示法维护一个堆栈,不同的指令对应于不同的堆栈操作,其目标是将参考文献的\(\LaTeX\)代码打印出来。函数与指令没有本质区别。在定义函数时,不需要指定形参和返回值,只需要在函数中对堆栈进行操作就行了。换句话说,假如函数有参数,在调用函数前需要手动将参数压栈。这就回答了上面提到的函数如何定义的问题。从这种函数定义方式上讲,可以说BibTeX是一种比较落后的语言。

BibTeX语言的基本数据类型和内置函数

BibTeX语言中,基本数据类型只有两类:整数和字符串,对应的变量使用前需要在bst文件头部INTEGER和STRING部分声明。BibTeX语言还有一类数据类型是bib文件中的条目(可以理解为某种对象),需要在头部ENTRY部分声明。定义整数时,在数字前加井号,如#1。定义字符串时,用双括号括起来,如"hello"。上文示例代码中的"author"等字符串最后并没出现在参考文献的渲染结果的原因是此时"author"等字符串只是入栈,而并没有加入到输出中。实际上,后续的函数output.check就会将其出栈。之所以这么做的原因是如果出错output.check在打印错误原因时需要"author"这一字符串(类似于“Error when processing author”)。换句话说"author"只是output.check的一个参数。

BibTeX的内置函数包括+、



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3