我对 LaTeX 还比较陌生,我曾经用它编写过一些文档,但现在我正在用它编写一份需要带注释的参考书目的正式学校报告。
我现在的问题是,如果我想显示我的注释,引用键现在不再是数字。如果我改变了我的风格,我的键是数字的,但我的注释不会显示。
这是我的bibfile.bib
:
@MISC{tJung11,
author = {Jungblut, Thomas},
title = {Ant Colony Optimization for TSP Problems},
month = Aug,
year = {2011},
howpublished = {url: http://codingwiththomas.blogspot.co.uk/2011/08/ant-colony-optimization-for-tsp.html},
note = {Accessed: 26-01-2015},
annotate = {This Blog posted by Thomas Jungblut covers mutliple topics which are of high interest to the projects research.
The information contained in the blog covers items like capitalising on multi-threading opportunities and how to efficiently do so.
The underling calculations and evaluation procedures for each agent are also discussed. This is useful for modeling and
designing the algorithm itself.}
}
以下是我尝试过的造型:
\nocite{*}
\bibliographystyle{annotate}
\bibliography{bibfile}
生成结果:
并且只是一个简单的朴素风格:
\nocite{*}
\bibliographystyle{annotate}
\bibliography{bibfile}
结果是:
我想要两者的结合,这样注释就会显示出来,而关键[1]
不是[Jun11]
我曾尝试查找以下网站:http://www.cs.stir.ac.uk/~kjt/software/latex/showbst.html但我似乎找不到解决方案。
有人有什么建议吗?
答案1
如果plain
您希望修改参考书目样式以使其能够打印字段的内容annotate
,您可以按以下步骤操作:
在你的 TeX 发行版中找到该文件
plain.bst
。复制此文件,并将副本命名为plainannotate.bst
。(不要直接从 TeX 发行版编辑文件。)在文本编辑器中打开文件
plainannotate.bst
。你用来编辑 tex 文件的编辑器就可以了。首先,您必须告知
plainannotate
它应该识别名为的字段annotate
。在文件的最顶部附近,找到名为的结构ENTRY
。在“address”和“author”之间插入一个空白行,并在新行中插入单词“annotate”。其次,您必须告知书目样式(和 BibTeX)在被告知处理字段内容时该做什么
annotate
。找到函数的定义format.authors
(在我的文件副本中大约第 215 行)。在此函数之后(函数之前format.editors
),插入以下代码行:FUNCTION {format.annotate} { annotate empty$ { "" } { " \begin{quotation}\noindent " annotate * " \end{quotation} " * } if$ }
如果您好奇此代码的作用:它首先检查
annotate
字段是否为空。如果是,则不打印任何内容(""
)。如果不为空,则启动环境,写出字段quotation
的内容,然后关闭环境。annotate
quotation
第三,我们必须修改处理
article
、book
等类型条目的函数@article
、等@book
,并告诉它们应该format.annotate
在每个条目末尾调用新创建的函数。找到函数
article
。(如果你一直按照说明操作,它应该从第 550 行左右开始。)在 行之后fin.entry
插入两行新行:format.annotate write$ newline$
接下来,找到函数
book
。(它应该是紧跟 之后的函数article
。)猜猜看:在其最后一行(也是 )之后,再fin.entry
插入两行新行,内容与函数 相同article
:format.annotate write$ newline$
该功能也是如此
booklet
。对于大多数剩余的条目格式化函数,即,,,,,,,,,
inbook
和,只需在之后添加一行,即,incollection
inproceedings
manual
mastersthesis
phdthesis
proceedings
techreport
unpublished
fin.entry
format.annotate write$
唯一有点特殊的条目类型是 类型
@misc
,因为它是 BibTeX 的“万能”条目类型。(无法识别的条目类型,例如由于意外拼写错误,将自动被视为 类型@misc
。)查找函数misc
;它应该位于函数mastersthesis
和之间phdthesis
。请注意,此函数的最后两行是fin.entry empty.misc.check
(因为
@misc
是包罗万象的条目类型,所以如果其内容完全为空,则必须小心。)在这种情况下,在format.annotate write$
这两行之间的新空白行上插入指令,如下所示:fin.entry format.annotate write$ empty.misc.check
将文件保存
plainannotate.bst
在主 tex 文件所在的目录中,或保存在 BibTeX 搜索的目录中。如果选择后者,请务必更新 TeX 发行版的文件名数据库。通过提供说明开始使用“新”参考书目样式
\bibliographystyle{plainannotate}
。确保再运行 LaTeX、BibTeX 和 LaTeX 两次以传播所有更改。
下面是将所有内容放在一起的 MWE:
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents}{abcdef.bib}
@MISC{tJung11,
author = {Jungblut, Thomas},
title = {Ant Colony Optimization for {TSP} Problems},
month = Aug,
year = {2011},
howpublished = {\url{http://codingwiththomas.blogspot.co.uk/2011/08/ant-colony-optimization-for-tsp.html}},
note = {Accessed: 26-01-2015},
annotate = {This Blog posted by Thomas Jungblut covers mutliple topics which are of high interest to the projects research. The information contained in the blog covers items like capitalising on multi-threading opportunities and how to efficiently do so. The underling calculations and evaluation procedures for each agent are also discussed. This is useful for modeling and designing the algorithm itself.}
}
\end{filecontents}
\usepackage[numbers]{natbib}
\bibliographystyle{plainannotate}
\usepackage[hyphens]{url}
\begin{document}
\cite{tJung11}
\bibliography{abcdef}
\end{document}
答案2
我知道这个问题和答案四年前就已经完成了,但我认为这一点额外的信息可能会为其他人节省几个小时的烦恼。
我刚刚尝试了 Mico 的 plain.bst 修改并收到“您无法弹出一个空的文字堆栈进行输入”错误。
在解决了这个问题一段时间后,我发现我必须在修改后的 .bst 文件开头的 ENTRY 标签列表中添加“注释”才能使其正常工作......我希望这会有所帮助:)
ENTRY
{ address
annotate
author
booktitle
chapter
edition
editor
howpublished
institution
journal
key
month
note
number
organization
pages
publisher
school
series
title
type
volume
year
}
{}
{ label }