amsrefs 似乎无法处理 .ltb 文件中的 xref 条目

amsrefs 似乎无法处理 .ltb 文件中的 xref 条目

我天真地以为 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

相关内容