![amsrefs 似乎无法处理 .ltb 文件中的 xref 条目](https://linux22.com/image/464953/amsrefs%20%E4%BC%BC%E4%B9%8E%E6%97%A0%E6%B3%95%E5%A4%84%E7%90%86%20.ltb%20%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%20xref%20%E6%9D%A1%E7%9B%AE.png)
我天真地以为 amsrefs xref 条目即使位于主 .tex 文件外部的 .ltb 文件中也能正常工作。但这似乎并非事实。
测试3.tex
\documentclass{amsart}
\usepackage{hyperref}
\usepackage[lite]{amsrefs}
\usepackage{amsmath,amssymb,latexsym}
\begin{document}
\title{Xyz}
\author{Dale R. Worley}
\email{[email protected]}
\date{\today}
\maketitle
Reference to \cite{Fom1999}.
\section{References}
\begin{biblist}[\normalsize]*{labels={alphabetic}}
\bibselect{test4}
\end{biblist}
\end{document}
测试4.ltb
\documentclass{amsart}
\usepackage{hyperref}
\usepackage[lite]{amsrefs}
\usepackage{amssymb}
\newcommand{\foobar}{foobar}
\begin{document}
\title{Abc}
\author{Dale R. Worley}
\email{[email protected]}
\date{\today}
\maketitle
\section{Annotated bibliography}
\begin{biblist}[\normalsize]*{labels={alphabetic}}
\bib*{xref-Stan1999}{book}{
title = {Enumerative Combinatorics, Volume 2},
author = {Stanley, Richard P.},
date = {1999},
publisher = {Cambridge University Press},
address = {Cambridge},
series = {Cambridge Studies in Advanced Mathematics},
volume = {62},
}
\bib{Fom1999}{article}{
label = {Fom1999},
author = {Fomin, Sergey},
title = {Knuth Equivalence, Jeu de Taquin, and the Littlewood--Richardson Rule},
book = {
xref = {xref-Stan1999},
},
pages = {413--439},
}
\end{biblist}
\end{document}
无论我重新运行该处理多少次,都会生成消息“包 amsrefs 警告:Xref‘xref-Stan1999’在输入第 7 行未定义。”。
test3.bbl 仅包含:
\bib{Fom1999}{article}{
label={Fom1999},
author={Fomin, Sergey},
title={Knuth Equivalence, Jeu de Taquin, and the Littlewood--Richardson Rule},
book={ xref = {xref-Stan1999}, },
pages={413--439},
}
在我看来,如果将所有 \bib* 条目复制到 .bbl 文件中,即使参考书目包含在 \bibselect 中,也可以解决这个问题。
答案1
看来,通过在 .tex 文档的 \begin{document} 之前添加以下补丁,可以修复此问题。它将 \ReadBibData@a 定义中注释掉的一行替换为其后的行。结果是所有 \bib* 条目都被复制到 .bbl 文件中。此外,将此补丁添加到 .ltb 文件似乎不会影响它生成的(完整)参考书目。
\makeatletter
\def\ReadBibData@a{%
\ProvidesFile{\@filef@und}\relax
\begingroup
% \let\star@bibdef\defer@bibdef
\let\star@bibdef\copy@bibdef@a
\ReadBibLoop
\endgroup
\closein\bib@dbfile
}
\makeatother