![如何修改.bst 文件(sn-aps.bst)](https://linux22.com/image/453637/%E5%A6%82%E4%BD%95%E4%BF%AE%E6%94%B9.bst%20%E6%96%87%E4%BB%B6%EF%BC%88sn-aps.bst%EF%BC%89.png)
我的代码:
\documentclass{book}
\bibliographystyle{sn-aps}
\begin{document}
\def\bibcommenthead{}
This is for test
\nocite{*}
\bibliography{test}
\end{document}
测试.bib
@article{Hirt1974,
author = "Hirt, C. W. and Amsden, A. A. and Cook, J. L.",
title = "An arbitrary Lagrangian-Eulerian computing method for all flow speeds",
year = "1974",
journal = "J. Comput. Phys.",
volume = "14",
number = "3",
pages = "227--253"
}
@article{Liska2010,
author = "Liska, R. and Shashkov, M. and Vachal, P. and Wendroff, B. and Author, A. B. and Author, B. B. and Author, C. C.",
title = "Optimization-based synchronized flux-corrected conservative interpolation (remapping) of mass and momentum for arbitrary {L}agrangian-{E}ulerian methods",
year = "2010",
journal = "J. Comput. Phys.",
volume = "229",
number = "5",
pages = "1467--1497"
}
当前输出为:
但预期的输出应该是这样的(例如,结束句点应该位于每个条目的末尾,空格应该位于首字母之间,等等):
请建议如何实现它,而且任何人建议如何修改文件都是有帮助的,.bst
因为我对修改.bst
文件完全陌生......
提前致谢...
另外,有人可以建议哪个.bst
文件适合所需的输出吗?请...
答案1
准备
以下文件是我用来测试和编辑的sn-aps.bst
文件此 Overleaf 链接。bst 文件有 1531 行。我不会在这里复制它,我会不断引用它的行。
平均能量损失
\documentclass{book}
\bibliographystyle{sn-aps}
\def\bibcommenthead{}
\begin{document}
\nocite{*}
\bibliography{test.bib}
\end{document}
bib文件
请注意,我添加了书籍条目以及url
所有条目的字段。
@article{Hirt1974,
author = "Hirt, C. W. and Amsden, A. A. and Cook, J. L.",
title = "An arbitrary Lagrangian-Eulerian computing method for all flow speeds",
year = "1974",
journal = "J. Comput. Phys.",
volume = "14",
number = "3",
pages = "227--253",
url = "url"
}
@article{Liska2010,
author = "Liska, R. and Shashkov, M. and Vachal, P. and Wendroff, B. and Author, A. B. and Author, B. B. and Author, C. C.",
title = "Optimization-based synchronized flux-corrected conservative interpolation (remapping) of mass and momentum for arbitrary {L}agrangian-{E}ulerian methods",
year = "2010",
journal = "J. Comput. Phys.",
volume = "229",
number = "5",
pages = "1467--1497",
url = "url"
}
@book{Book1974,
author = "Book, C. W. and Buch, A. A. and Livro, J. L.",
title = "The title of the book",
year = "2022",
publisher = "J. Comput. Phys.",
pages = "100",
url = "url"
}
让我们编辑 BeaST
如何进行必须编辑 bst。
.bst
话虽如此。让我们继续了解 bst 的工作原理。如需快速参考,请查看Tame the BeaST 文档中的第 15 节文件的结构。
最后会有一组指令,包括 READ、EXECUTE、ITERATE 和其他一些指令。它们实际上是“执行工作”的指令,也就是说,这是调用 bst 文件后面的内容的部分,对于我们这里的海豚来说,就是函数。
FUNCTION 通常与 ENTRY 相关,但并非严格相关。在此示例中,我们将查找FUNCTION {article}
,其中有一个 article 的 ENTRY,这意味着此 bst 识别 article(article 是最常见的,例如,phdthesis 并不常见)。
在 中sn-aps.bst
,FUNCTION {article}
位于第 1117 行。它的第二条指令读取format.authors "author" output.check
。
FUNCTION {format.authors}
位于第 495 行,但它并没有做太多事情,它调用另一个函数来格式化作者的姓名。
FUNCTION {format.names}
位于第 450 行(您是否意识到我们一直在倒退?每个函数只能依赖于先前定义的函数。)在这里,我们可以识别出一些有趣的名称,例如duplicate
第461 行的nameptr
,(名称指针)format.name
以及第 467 行的一个非常重要的", " *
名称和"," *
——这些是名称之间的逗号以及姓氏之前的逗号。
例如,我编辑了", AA " *
", BB" *
,结果是
继续。仍然在这个函数上,我们找到了逗号插入代码,缩写的点必须位于第 467 行之前。它恰好位于第 460 行,即"{f{.}.~}{vv~}{ll}{, jj}"
之前的那行format.name
。
对于我们的第一个测试,让我们傻傻地写下:"{f{. +}.~}{vv~}{ll}{, jj}"
,
对于我们真正的海豚,我们只需添加一个空格:"{f{. }.~}{vv~}{ll}{, jj}"
。如果您需要不同大小的空格,您可以在那里进行编码。
快速说明:记得编译 latex 和 BibTeX 以便更新结果。
下一期,每个参考块末尾的句点。
再次,让我们关注FUNCTION {article}
。第 1130 行有:format.date "year" output.check
。可以合理地猜测该指令(YYYY)
在引用块中写入。更重要的是,这不是该 FUNCTION 的最后一条指令。在不失一般性的情况下,让我添加url = "url"
到您的每个 bib 条目中。
现在的结果是:
这很有趣。我不会编辑format.date
,我会添加一条指令,在整个块的末尾写一个句点FUNCTION {article}
。最后一条指令是,但是你看,插入的每种字段类型之间fin.entry
都有。如果我在第 1130 行注释,我们会在和之间得到一个逗号而不是句点。new.block
% new.block
(YYYY)
URL
所以我有几个选择:
- 更改
fin.entry
为new.block
,但这意味着对每个格式化条目的功能都执行此操作,我应该对FUNCTION {book}
(第 1148 行)、FUNCTION {booklet}
(第 1184 行)等重复该过程。对于像我这样的懒人来说,这似乎太费力了。 - 为什么不在
FUNCTION {fin.entry}
第 123 行进行编辑?
- 编辑第 124 行:
{ "\!\!." * duplicate$ empty$
。它正确地计算了第一个参考块的周期,但错误地计算了第二个参考块的周期。哪里\!
是负空间。不优雅,也不完全正确。
- 编辑第 124 行:
{ add.period$ duplicate$ empty$
。它保留了之前的问题。
到底发生了什么?第 1143 行有一条指令add.blank
,仅用于FUNCTION {article}
,它添加了一些空格,只有在format.primaryClass
使用 时才需要。我不喜欢添加负空格,所以我更喜欢评论add.blank
和编辑,FUNCTION {fin.entry}
因为它将应用于此 bst 文件中识别的所有其他类型的 bib 条目。
因此,让我们add.blank
在第 1143 行进行注释,并将第 124 行更改为:
{ add.period$ duplicate$ empty$
或{ "." empty$
,因为两者对 都有相同的效果FUNCTION {fin.entry}
。
为了得到更完整的示例,我在 bib 文件中添加了一个书籍条目,以便测试最后一个句点。它非常有效。
笔记
关于您可能需要的其他可能的编辑。
如果需要改变字段内容的置换顺序,请在相应的FUNCTION中更改顺序,但不应将其作为标准程序。
纠正这个或那个小细节(例如逗号、斜体、粗体数字等)是可以接受的,因为创建样式的人可能错过了它。将连词更改and
为您的本地语言也是一种非常可接受的版本。
改变字段呈现的整个顺序是相当奇怪的,基本上告诉我们风格您正在使用不是风格你应该使用。如果是这种情况,您应该寻找能够真正创建所需样式的正确 BibTeX 样式。如果没有,则 (1) 根据需要编辑最接近的 bst,或 (2) 采取“两公斤的耐心和奔跑 makebst
“。
关于这个答案。
我真诚地希望这个答案能够帮助您和未来进入这个论坛的人们了解如何对 bst 文件进行小修改,以及如何思考和在寻找正确的更改位置时寻找什么。
编辑 bst 文件总是很复杂,很乱,需要花时间去理解别人的工作。我在 2015 年学到了这一点,因为我需要一种由标准提供的样式,而该标准最接近的 bst 已经过时,没有人负责维护它,而且我联系的人都不知道如何编辑 bst 文件。