![BibTex:修改 MR 编号周围的标点符号](https://linux22.com/image/374376/BibTex%EF%BC%9A%E4%BF%AE%E6%94%B9%20MR%20%E7%BC%96%E5%8F%B7%E5%91%A8%E5%9B%B4%E7%9A%84%E6%A0%87%E7%82%B9%E7%AC%A6%E5%8F%B7.png)
我使用 BibTeX,使用类 amsart,对于参考书目样式,我使用 amsplain。此外,我从 Mathematical Reviews 下载引文。
我的问题如下:目前,在参考文献末尾,BibTeX 在 MR 编号前添加一个句号,后面不添加任何内容。但是,我更喜欢在 MR 编号前添加逗号,在 MR 编号后添加句号。因此,不要使用例如:
Michael B. Green、John H. Schwarz 和 Edward Witten,《超弦理论》。第 1 卷,第二版,《剑桥数学物理专著》,剑桥大学出版社,剑桥,1988 年,导言。MR952374
我希望有:
Michael B. Green、John H. Schwarz 和 Edward Witten,《超弦理论》。《剑桥数学物理专著》第 1 卷,第二版,剑桥大学出版社,剑桥,1988 年,简介,MR952374。
我尝试修改 amsplain,但只收到错误消息。我应该使用什么代码才能获得所需的效果?
在我的 BibTeX 文件(test.bib)中,我有以下条目:
@book {MR952374,
AUTHOR = {Green, Michael B. and Schwarz, John H. and Witten, Edward},
TITLE = {Superstring theory. {V}ol. 1},
SERIES = {Cambridge Monographs on Mathematical Physics},
EDITION = {Second},
NOTE = {Introduction},
PUBLISHER = {Cambridge University Press, Cambridge},
YEAR = {1988},
PAGES = {x+470},
ISBN = {0-521-35752-7},
MRCLASS = {81-02 (81E30 81Exx 83-02 83E30 83Exx)},
MRNUMBER = {952374},
}
在我的 .tex 文件中,我有以下内容:
\documentclass[11pt,reqno]{amsart}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[english]{babel}
\begin{document}
\cite{MR952374}
\bibliographystyle{amsplain}
\bibliography{test}
\end{document}
在此先感谢您的帮助。
答案1
这个相当棘手(阅读:乐趣)。
(部分)解决问题的一种方法是重新定义\MR
用于amsplain
排版MR
数字的宏:
\long\def\MR#1{%
\relax
\ifhmode
\unskip
\spacefactor 3000
\space
\fi% ↓ dot added here
MR~\MRhref{#1}{#1}.}
(与原始定义相同,但末尾带有句号)。
这种方法的问题在于引用的结尾将被排版为:
Press, Cambridge, 1988, Introduction. MR952374.
如果您不介意“简介”后面的句号,那么这就是要走的路。下一种方法有点混乱……
TeX 不提供(据我所知 --- 如果我错了请告诉我)可能性联合国-写点什么,所以如果数字存在,就无法删除“介绍”后面的逗号MR
。所以我们必须改变 BeaST!
在第 300 行左右amsplain.bst
我们有两个函数:
FUNCTION {output.nonempty.mrnumber}
正如其名称所示,它将输出一个非空MR
数字,并且:
FUNCTION {fin.entry}
这样就完成了每个参考书目条目。我们需要更改两件事:
制作
fin.entry
不是在条目末尾写一个句号。如果有或没有数字
output.nonempty.mrnumber
则写入。, MR<number>.
.
MR
修改后的功能为:
FUNCTION {output.nonempty.mrnumber}
{ duplicate$ missing$
{ pop$ "" }
'skip$
if$
duplicate$ empty$
{ pop$ "." write$ }
{ ", \MR{" swap$ * "}." * write$ }
if$
}
FUNCTION {fin.entry}
{ write$
mrnumber output.nonempty.mrnumber
newline$
}
您只需将 复制amsplain.bst
到您的工作目录并替换output.nonempty.mrnumber
为fin.entry
上述版本即可。
现在引用已正确排版,并且在没有MR
数字时也能正常工作: