我正在尝试修改“plainnat.bst”,以如下图所示格式显示参考文献,以符合 CILAMCE 大会的规范。他们的 Latex 模板不包含任何 .bst 文件,而是显示以普通 LateX 代码编写的示例参考书目。
我创建了原始“plainnat.bst”文件的副本,并正在编辑新的“myplainnat.bst”文件。到目前为止,我已成功修改了输出名称,方法是将所有“{ff }{vv }{ll }{jj }”更改为“{vv~}{ll,}{ f.}”,并将每个“和”更改为“\&”。使用 \cite 或 \citep 时,引文按所需输出。参考文献按字母顺序显示,如您所愿。
现在,我遇到了非常大的困难:1- 按照上图所示的顺序放置所有参考块;2- 将卷自定义为卷,将编号自定义为n,将页自定义为p,将页自定义为pp;3- 删除参考文献第一行后所有行上的空白。
此外,我不确定这是否在 .bst 文件中进行了更改,但我还想在之前定义的花式设置中维护我的参考书目页面,并将标题从“参考书目”更改为“参考文献”,并使用与章节标题相同的字体。
我尝试在命令提示符中使用“latex makebst”几次,但没有成功,但非常感谢任何有关解决此问题的提示。
谢谢。
附言:有人知道一个用户友好的 .bst 编程指南吗?我找到了一个叫做“Tame the BeaST”的指南,它帮助我修改了引用名称,但仅此而已。
答案1
介绍
为了解决我的问题,我首先尝试按照 Mico 的建议使用 makebst 生成我想要的 .bst 文件。生成的文件并不完全是我想要的。经过一段时间的折腾,我终于找到了一个好的解决方案。我决定不直接完成这个问题,而是在下面写下我所做的事情,以防有人遇到类似的问题并发现这很有帮助。
我的解决方案
1- 制作
在 Windows 中,输入命令提示符并写入
latex makebst
尽你所知回答问题。如果你不知道,只需按 Enter 键,系统将为你选择默认选项。对于初学者(比如我自己),我建议保留默认主文件(第一个必需输入)。然后为你的个人 .bst 文件写一个名字(例如“mybibstyle”)。
我不会在这里详细介绍。Google 可以教你如何正确配置选项。我通过反复试验完成了大部分操作。另外,我当然不是最有资格解释在 makebst 中应该选择什么的人,最终,我无法仅通过 makebst 获得我想要的东西。
简而言之,我选择了作者年份的引用样式,并启用了 natbib 支持,这意味着我必须编写
\usepackage{natbib}
作为我的 .tex 文件中的序言之一。
生成 .bst 文件后,将其复制到您的 .tex 文件所在的文件夹,并在添加参考书目之前写入:
\bibliographystyle{mybibstyle}
本节对于我解释我的解决方案很重要,因为我用来修复引用的 .bst 文件中的几乎每个函数都是由 makebst 程序完成的。
2-编辑生成的.bst 文件
在我的问题中,我写了 3 个我想解决的事情:
- 将所有参考块按照图中所示的顺序放置;
- 将卷数自定义为卷、将编号自定义为n、将页数自定义为页、将页数自定义为页;
- 删除参考文献第一行之后所有行的空白。
我将按降序解释如何解决上述问题:
3. 删除所有行上的空白处...
我没有删除它。在核实了参考文献的书面要求后,模板实际上规定它们必须有 0.75 厘米的缩进(足够接近默认缩进),并且第一行应该与页面的边距相同,这意味着我不需要更改任何内容。
2. 自定义volume为vol.、number为n.、page为p.、pages为pp。
在生成的.bst文件中,将会有以下函数(或类似下面写的内容):
FUNCTION {bbl.volume}
{ "volume" }
FUNCTION {bbl.nr}
{ "no." }
FUNCTION {bbl.pages}
{ "pages" }
FUNCTION {bbl.page}
{ "page" }
为了得到我想要的,只需将它们更改为
FUNCTION {bbl.volume}
{ "vol." }
FUNCTION {bbl.nr}
{ "n." }
FUNCTION {bbl.pages}
{ "pp." }
FUNCTION {bbl.page}
{ "p." }
1. 将所有参考块按照图中所示顺序排列
这是最难解决的问题。小吐槽:我终生都无法理解为什么有人会认为用逆波兰表示法(RPN)编写的代码是个好主意。
无论如何,makebst 程序创建了一个 .bst 文件,其中根据需要写入作者姓名,年份写在作者之后。但参考文献中缺少某些句号,“inproceedings”和“inbook”没有与原始书籍的名称一起输出,而出版商则与出版地点一起写入。我不得不分别更改每个 BibTex 条目类型以及每个信息出现的顺序。
我曾考虑过逐一检查我所做的修改,但那样会很麻烦,而且需要很长时间。相反,我将展示一个来自书内 BibTex 条目的前后引用示例。在理解(或接受)我所做的修改后,人们可能可以单独更改其他条目。
我将使用以下 BibTex 条目作为示例:
@inbook{Ramm1981,
pages = {63--89},
title = {Strategies for Tracing the Nonlinear Response Near Limit Points},
publisher = {Springer-Verlag},
year = {1981},
author = {E Ramm},
editor = {Wunderlich, W. and Stein, E. and Bathe, K. J.},
address = {Berlin, Heidelberg},
booktitle = {Nonlinear Finite Element Analysis in Structural Mechanics},
doi = {10.1007/978-3-642-81589-8_5},
isbn = {978-3-642-81589-8},
url = {https://doi.org/10.1007/978-3-642-81589-8_5},
}
然后对使用 makebst 生成的 .bst 文件所得到的参考输出进行修改,如“2. 自定义体积为体积...”所示,参考输出如下所示。
.bst 文件中用于 inbook 类型引用的代码是
FUNCTION {inbook}
{ output.bibitem
author empty$
{ format.editors "author and editor" output.check
editor format.key output
}
{ format.authors output.nonnull
crossref missing$
{ "author and editor" editor either.or.check }
'skip$
if$
}
if$
format.date "year" output.check
date.block
format.btitle "title" output.check
crossref missing$
{
format.bvolume output
format.chapter.pages "chapter and pages" output.check
new.sentence
format.number.series output
format.publisher.address output
}
{
format.chapter.pages "chapter and pages" output.check
new.sentence
format.book.crossref output.nonnull
}
if$
format.edition output
format.pages "pages" output.check
format.note output
fin.entry
}
首先,我在任何引用类型之前创建了一个额外的函数:
FUNCTION {format.publisher}
{ publisher
}
所以我可以添加不需要地址的发布者。
然后我将 inbook 函数修改如下:
FUNCTION {inbook}
{ output.bibitem
author empty$
{ format.editors "author and editor" output.check
editor format.key output
}
{ format.authors output.nonnull
crossref missing$
{ "author and editor" editor either.or.check }
'skip$
if$
}
if$
format.date "year" output.check
date.block
format.title "title" output.check
%%%% ADDED THIS %%%%
new.sentence % Finishes last block with a period
format.editors output % Outputs editors
word.in swap$ * % Adds an "in" before the editors
format.booktitle "title" output.check % Add book title
%%%%%%%%%%%%%%%%%%%%
crossref missing$
{
format.bvolume output
format.chapter.pages "chapter and pages" output.check
new.sentence
format.number.series output
format.publisher.address output
}
{
format.chapter.pages "chapter and pages" output.check
new.sentence
format.book.crossref output.nonnull
}
if$
% format.edition output % I don't need this
format.pages "pages" output.check
%%%% ADDED THIS AS WELL %%%%
new.sentence % end last reference block with period
format.publisher output % output publisher
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% format.note output % I don't need this
fin.entry
}
但是请注意,我甚至没有触及代码的交叉引用部分,因为我没有必要这样做,而且如果我尝试这样做,我将需要再浪费几个小时来理解 RPN 编码方法。
3- 最后的困难
我通过以下方式修复了我的花哨的标题和标题问题
\renewcommand{\bibsection}{\subsection*{REFERENCES}}
在定义参考书目样式和插入参考书目之前,就像 Golar Ramblar 在某个 TSE 问题的最后一个答案中所做的那样,他将他的答案归功于论坛(latex dot org/forum/viewtopic.php?t=4089)。
注意:我没有足够的声誉点来适当地显示所有链接。
最后的评论
有哪位 LateX 专家能为参考书目样式创建一个“.noobbst”文件吗?其中 RPN不是用过吗?RPN 编码似乎把一切都搞得太复杂了。要么这样做,要么制作一个智能的“makebst”代码,它可以获取用简单的 LateX 编写的用户定义样本参考并生成适当的 .bst 文件。干杯。