错误:1 是整数文字,而不是字符串,用于输入

错误:1 是整数文字,而不是字符串,用于输入

我正在使用natbib软件包和自定义.bst文件。不幸的是,我对 LaTeX 不太熟悉。该文档能够编译并生成 PDF,但我不知道错误是什么意思。我正在使用 MiKTeX 和 TeXstudio。这是我的.bib条目:

@book{fysikbog,
title = {Physics for Scientists and Engineers, 7th edition},
author = {John W. Jewett and Raymond A. Serway},
year = {2008},
number = {ISBN: 0-495-11240-2},
series = {Paperback},
publisher = {Thomson Learning}
}

这是我的.bst文件:

https://gist.github.com/rmagni/86813d2eb62ccf6d36e497ac21d425e2

梅威瑟:

\documentclass[a4paper,11pt,fleqn,dvipsnames,twoside,openright]{memoir} 

\usepackage[english]{varioref}              
\usepackage{natbib} 

\bibpunct[,]{[}{]}{;}{a}{,}{,}              
\bibliographystyle{Harvard}         

\begin{document}

This is a citation. \citep{fysikbog}.

\begingroup
\raggedright
\bibliography{litteratur}                           
\endgroup

\end{document}

引发的错误:

1 is an integer literal, not a string, for entry fysikbog
while executing---line 1485 of file Harvard.bst
(There was 1 error message)

不确定这其中的相关部分是什么,但这是错误消息中提到的第 1485 行左右的部分:

EXECUTE {begin.bib}

EXECUTE {init.state.consts}

ITERATE {call.type$}

FUNCTION {end.bib}
{ newline$
  "\end{thebibliography}" write$ newline$
}

EXECUTE {end.bib}

希望有人知道这个错误意味着什么,谢谢!

答案1

.bst文件具有错误的函数定义 (ll.464-472

FUNCTION {format.year}
{ year duplicate$ empty$
    { "empty year in " cite$ * warning$
       pop$ "" }
    'skip$
  if$
  month empty$
    extra.label *
}

无缘无故地悬month empty$在那里,导致堆栈上出现 1,而文件的其余部分却没有预料到这种情况,从而导致了问题。

我认为预期的定义更接近于

FUNCTION {format.year}
{ year duplicate$ empty$
    { "empty year in " cite$ * warning$
       pop$ "" }
    'skip$
  if$
  extra.label *
}

此外,或所有调用format.year都应作为format.year output不是 format.year output.check.output.check需要另一个参数,但错误调用中不存在该参数。只需将所有出现的 替换为format.year output.check即可format.year output

我已经上传了修正版本,harvard-fixed.bst应该可以https://gist.github.com/moewew/170dd99835c17667456738937a5d59d6。您可以在修订记录

相关内容