我的标准参考书目设置是使用 amsalpha 样式的 bibtex。参考文献通过标签显示,标签包含几个与作者相关的字母,后面跟着两位数的出版年份。这基本上没问题,但偶尔在包含历史参考文献时,日期似乎有点混乱,例如
“对这个问题的研究可以追溯到 [G20];有关最近的调查,请参见 [B21]”。
有没有办法让某个日期(比如 1900 年)之前的年份的引用以全部四位数字显示,而之后的引用则以通常的两位数字显示?
因此在上面的例子中,假设 [B21] 是由 Joe Bloggs 于 2021 年编写的,而 [G20] 是由 Gauss 于 1720 年编写的,我希望它读作:
“对这个问题的研究可以追溯到 [G1720];有关最近的调查,请参见 [B21]”。
我想继续使用 amsalpha 样式,但会考虑改用修改后的 myamsalpha.bst 文件。(这是 chatGPT 建议的,但它要求我添加的各行代码导致了错误,而修复又导致了更多错误等等。只能说结局很糟糕。)
添加:一个工作示例。
\documentclass[12pt,reqno]{amsart}
\usepackage{amssymb,amsmath,amsfonts,amsthm}
\begin{document}
"The study of this question goes back to~\cite{Gauss}; for a recent survey see~\cite{Bloggs}.
\bibliographystyle{amsalpha}
\bibliography{Working}
\end{document}
bib 文件如下:
@misc {Gauss,
AUTHOR = {Gau\ss , Carl Friedrich},
TITLE = {Important Stuff},
YEAR = {1821},
}
@misc{Bloggs,
Author = {Joe Bloggs},
Title = {Notes {I} just wrote},
Year = {2021},
}
答案1
该amsalpha.bst
样式拒绝字段中任何非数字的内容year
,仅采用最后两位数字。
如果此类条目不太多,您可以手动修复它们。
\begin{filecontents*}[overwrite]{\jobname.bib}
@misc {Gauss,
author = {Gau{\ss}, Carl Friedrich},
title = {Important Stuff},
year = {1821},
}
@misc{Bloggs,
author = {Joe Bloggs},
title = {Notes {I} just wrote},
year = {2021},
}
\end{filecontents*}
\documentclass[12pt,reqno]{amsart}
\NewCommandCopy\latexbibitem\bibitem
\ExplSyntaxOn
\RenewDocumentCommand{\bibitem}{O{}m}
{
\lullaby_bibitem:en { \lullaby_bibitem_check:n { #1 } } { #2 }
}
\cs_new_protected:Nn \lullaby_bibitem:nn { \latexbibitem[#1]{#2} }
\cs_generate_variant:Nn \lullaby_bibitem:nn { e }
\cs_new:Nn \lullaby_bibitem_check:n
{
\str_case:nnF { #1 }
{
{Gau21}{Gau1821}
% other entries to fix
}
{ #1 }
}
\ExplSyntaxOff
\begin{document}
The study of this question goes back to~\cite{Gauss}; for a recent survey see~\cite{Bloggs}.
\bibliographystyle{amsalpha}
\bibliography{\jobname}
\end{document}
我filecontents*
只是为了使示例自成一体,将您的.bib
文件用于生产版本。
重新定义的\bibitem
命令检查可选参数是否在异常列表中,您可以按照我对高斯论文所做的方式填写该列表。
以下代码修改适用于 2018 年以后的所有 TeX Live 版本。替换
\NewCommandCopy\latexbibitem\bibitem
和
\ifdefined\NewCommandCopy
\NewCommandCopy\latexbibitem\bibitem
\else
\let\latexbibitem\bibitem
\usepackage{xparse}
\fi
答案2
如果您切换到biblatex
,您可以shorthand
全年使用您想要的 bibitems。
此代码从 TeX Live 2019 开始有效。
\begin{filecontents*}[overwrite]{\jobname.bib}
@misc {Gauss,
author = {Gau{\ss}, Carl Friedrich},
title = {Important Stuff},
year = {1821},
shorthand={Gau1821},
}
@misc{Bloggs,
author = {Joe Bloggs},
title = {Notes {I} just wrote},
year = {2021},
}
\end{filecontents*}
\documentclass[12pt,reqno]{amsart}
\usepackage{etoolbox}
\usepackage[style=alphabetic]{biblatex}
\addbibresource{\jobname.bib}
\begin{document}
The study of this question goes back to~\cite{Gauss}; for a recent survey see~\cite{Bloggs}.
\printbibliography
\end{document}