当使用 AMSRefs 从 .ltb 文件导入参考书目项目时,我应该将命令 \DefineName、\DefinePublisher、\DefineJournal 放在哪里?

当使用 AMSRefs 从 .ltb 文件导入参考书目项目时,我应该将命令 \DefineName、\DefinePublisher、\DefineJournal 放在哪里?

AMSRefs允许分别使用命令\DefineName\DefinePublisher和定义名称、出版商和期刊的缩写\DefineJournal(参见用户手册)。AMSRefs 允许三种方式输入参考书目(请参阅用户手册): (1) 直接在 LaTeX 文档中,(2) 从外部 .ltb 文件导入项目,(3) 使用 BibTeX 从 .bib 文件导入项目。最后一种方法与我的问题无关。

当我使用方法(1)时,如果我将定义放在文档中参考书目项目之前的任何位置,则缩写就会被正确扩展。

但是,当我使用方法 (2) 时,我应该把定义放在哪里?我尝试将它们保存在 LaTeX 文档的序言中、正文中、.ltb 文件中、单独的 .ltb 文件中以及 .sty 文件中,并在序言中调用\usepackage,但似乎总是会出现一些错误 — 部分或全部缩写未展开。

有人能告诉我我做错了什么吗?我一般更喜欢使用方法 (2),因为这样更容易管理大型参考数据库。

平均能量损失
LaTeX 文件:

\documentclass{article}

\usepackage{amsrefs}

\DefineName{na}{Alon, Noga}
\DefinePublisher{cup}{Camb. Univ. Press}{Cambridge University Press}{Cambridge}
\DefineJournal{jcta}{0097-3165}{J. Comb. Theory, Ser.~A}{Journal of Combinatorial Theory. Series~A}


\begin{document}


\begin{bibdiv}
\begin{biblist}

\bibselect*{mybib}

\end{biblist}
\end{bibdiv}

\end{document}

mybib.ltb 文件:

\bib{AloKle90}{collection.article}{
    author={na},
    author={Kleitman, Daniel~J.},
    title={Sum-free subsets},
    book={
        title={A Tribute to Paul Erd{\H o}s},
        editor={Baker, Andrew},
        editor={Bollob{\'a}s, B{\'e}la},
        editor={Hajnal, Andr{\'a}s},
        publisher={cup},
        address={New York},
        date={1990},
        isbn={978-0-521-38101-7},
        isbn={978-0-521-06733-1}
    },
    pages={13\ndash 26}
}

\bib{AloYus95}{article}{
    author={na},
    author={Yuster, Raphael},
    title={The $123$ theorem and its extensions},
    journal={jcta},
    volume={72},
    date={1995-11},
    number={2},
    pages={322\ndash 331},
    doi={10.1016/0097-3165(95)90071-3}
}

当我编译 LaTeX 文件时,控制台显示以下警告:

Package amsrefs Warning: Abbreviation 'na' undefined on input line 7.


Package amsrefs Warning: Abbreviation 'na' undefined on input line 19.


Package amsrefs Warning: Abbreviation 'jcta' undefined on input line 19.

因此,出版商的缩写可以被识别,但其他的则不能。

如果我将定义放在 LTB 文件的顶部,那么我会收到以下警告:

Package amsrefs Warning: Abbreviation 'cup' undefined on input line 11.

所以,这次则相反。

答案1

您应该将\Define...命令放在外部 .ltb 文件中。当您这样做时,正如您所提到的,名称和期刊缩写会正确展开,但出版商缩写不会。这是因为这些\Define...命令会展开为\bib*命令,这些命令是专门用于交叉引用的特殊条目。这些\bib*条目会被扔进“延迟列表”——如果没有已知的引用键,其元素会被忽略。amsrefs 无法识别您示例中的出版商键,因为它隐藏在您的书籍键内。

您可以通过修改 amsrefs 的控制序列来解析这些内部键,从而让 amsrefs 识别这些内部键,本质上就是将它们变成可识别的键。尝试将这段代码添加到您的 LaTeX 文件的序言中:

\makeatletter
\def\output@inner@xref@#1{%
     \in@={#1}%
     \ifin@
     \RestrictedSetKeys{\modify@xref@fields}{bib}{\the\rsk@toks}{#1}%
     \else
     \output@xref@{#1}%
     \fi
}
\makeatother

答案2

.ltb当使用文件输入参考资料时,对我来说似乎有效的是以下内容:

  1. 我将缩写插入到文件顶部.ltb
  2. \bib*为任何将出现在条目中的、、和条目book创建单独的条目,然后将它们作为交叉引用插入。partialtranslationreprint\bib

执行这两件事似乎可以使缩写正常工作。以下是基于 OP 给出的示例的 MCVE:

文件.tex

\documentclass{article}

\usepackage{amsrefs}

\begin{document}

\begin{bibdiv}
\begin{biblist}

\bibselect*{mybib}

\end{biblist}
\end{bibdiv}

\end{document}

文件mybib.bib

\DefineName{na}{Alon, Noga}
\DefineJournal{jcta}{0097-3165}{J. Comb. Theory, Ser.~A}{Journal of Combinatorial Theory. Series~A}
\DefinePublisher{cup}{Camb. Univ. Press}{Cambridge University Press}{Cambridge}

\bib*{BakBolHaj90xref}{book}{
    title={A Tribute to Paul Erd{\H o}s},
    editor={Baker, Andrew},
    editor={Bollob{\'a}s, B{\'e}la},
    editor={Hajnal, Andr{\'a}s},
    publisher={cup},
    address={New York},
    date={1990},
    isbn={978-0-521-38101-7},
    isbn={978-0-521-06733-1}
}

\bib{AloKle90}{collection.article}{
    author={na},
    author={Kleitman, Daniel~J.},
    title={Sum-free subsets},
    book={BakBolHaj90xref},
    pages={13\ndash 26}
}

\bib{AloYus95}{article}{
    author={na},
    author={Yuster, Raphael},
    title={The $123$ theorem and its extensions},
    journal={jcta},
    volume={72},
    date={1995-11},
    number={2},
    pages={322\ndash 331},
    doi={10.1016/0097-3165(95)90071-3}
}

相关内容