使用 amsalpha 在 bibtex 中查找 19 世纪的参考资料

使用 amsalpha 在 bibtex 中查找 19 世纪的参考资料

我的标准参考书目设置是使用 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}

在此处输入图片描述

相关内容