\bibentry 错误,其参考书目样式将宏放入 bbl 文件中

\bibentry 错误,其参考书目样式将宏放入 bbl 文件中

以下示例运行良好。但是,如果\bibliographystle{plainnat}替换为\bibliographystle{te}te.bst样式在哪里可用http://econtheory.org/technical/te.bst,则会产生两个错误:“未定义的控制序列。Hotelling, Harold (1929), \enquote ...” 和“未定义的控制序列。...ding, Massachusetts。\bibAnnoteFile ...”。

问题似乎是需要\enquote\bibAnnoteFile来格式化参考文献,但没有及时提供。(bibliographystyle 将它们的定义放在 bbl 文件中。)

有简单的解决办法吗?

\begin{filecontents}{mytestbib.bib}
@article{HotellingEJ1929,
  author = {Hotelling, Harold},
  title = {Stability in competiton},
  journal = {Economic Journal},
  year = {1929},
  volume = {39},
  pages = {41-57}
}

\end{filecontents}
\documentclass{article}
\usepackage{filecontents}
\usepackage{natbib}
\usepackage{bibentry}

\begin{document}

\nobibliography{mytestbib}

A full in-text cite of \bibentry{HotellingEJ1929}.

A regular citation of \cite{HotellingEJ1929}.

\bibliographystyle{plainnat}

\end{document}

答案1

根据我对这个问题的理解(这远非完美),文件中使用的每个宏都bibitems需要在代码中调用后者时bbl可用bibentry。我能够做到这一点的方法是Tex使用 明确地使它们在文件中全局化\global\def

但是,对于\enquote,情况有所不同,因为命令是bbl直接在 中定义的,正如您所指出的,这会导致“\enquote 已定义”错误。为了避免此问题,如 @ChristianHupfer 所述,您可以注释掉文件中的以下两行te.bst

%  write$ newline$
%  "\newcommand{\enquote}[1]{``#1''}"

\enquote并在文档的序言中明确添加的定义Tex(正如您在之前的评论中所说的那样)。

这是您的 MWE 的修改版本,它在我的系统上运行没有错误(文件中注释了上面列出的两行te.bst):

\begin{filecontents}{mytestbib.bib}
@article{HotellingEJ1929,
  author = {Hotelling, Harold},
  title = {Stability in competiton},
  journal = {Economic Journal},
  year = {1929},
  volume = {39},
  pages = {41-57}
}

\end{filecontents}

\documentclass{article}
\usepackage{filecontents}
\usepackage{natbib}
\usepackage{bibentry}

\bibliographystyle{te}
\newcommand{\enquote}[1]{``#1''}
\global\def\bibAnnoteFile{}

\begin{document}

\nobibliography*

\noindent A full in-text cite of \bibentry{HotellingEJ1929}.

\bibliography{mytestbib}

\end{document}

其结果是:

在此处输入图片描述

答案2

我在使用 BST 文件时也遇到了类似的问题,并发现可以成功将BST 文件中的\newcommand宏更改为。而不是:\providecommand

write$ newline$
"\newcommand{\enquote}[1]{``#1''}"

尝试:

write$ newline$
"\providecommand{\enquote}[1]{``#1''}"

我无法很好地解释为什么一个有效而另一个无效,但这似乎是一个比破解文件更为强大的解决方法main.tex

相关内容