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
当使用文件输入参考资料时,对我来说似乎有效的是以下内容:
- 我将缩写插入到文件顶部
.ltb
; - 我
\bib*
为任何将出现在条目中的、、和条目book
创建单独的条目,然后将它们作为交叉引用插入。partial
translation
reprint
\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}
}