我如何告诉 BibTeX 打印“@book”类型条目的“页面”字段?

我如何告诉 BibTeX 打印“@book”类型条目的“页面”字段?

我想引用一本书。我从 MathSciNet 获得了以下书目信息:

@book {Brylinski,
AUTHOR = {Brylinski, Jean-Luc},
TITLE = {Loop spaces, characteristic classes and geometric
quantization},
SERIES = {Progress in Mathematics},
VOLUME = {107},
PUBLISHER = {Birkh\"{a}user Boston, Inc., Boston, MA},
YEAR = {1993},
PAGES = {xvi+300},
ISBN = {0-8176-3644-7},
MRCLASS = {57Rxx (18G50 55P35 58F06)},
MRNUMBER = {1197353},
MRREVIEWER = {Daniel S. Freed},
DOI = {10.1007/978-0-8176-4731-5},
URL = {https://doi.org/10.1007/978-0-8176-4731-5},}

不幸的是,格式化的书目条目不显示页数(存储在条目的pages字段中)。它显示为

Jean-Luc Brylinski。环路空间、特征类和几何量化,《数学进展》第 107 卷。Birkhäuser Boston, Inc.,马萨诸塞州波士顿,1993 年。

我应该做哪些更改才能让它也提到页数?

最小工作示例是

\documentclass[12pt,reqno,a4paper]{amsart}
%\usepackage[utf8]{inputenc} % not needed with up-to-date TeX systems
\usepackage[english]{babel}

\usepackage{amsmath,amsthm,amsfonts,amssymb}
\usepackage{mathtools}
\usepackage{color}

\usepackage{mathrsfs}
\usepackage[all]{xy}
\usepackage{tikz-cd}
\usepackage[normalem]{ulem} % do you *really* need it?
\usepackage{datetime}

\usepackage{hyperref}

\theoremstyle{definition}

\newtheorem{theorem}{Theorem}[section]
\newtheorem{construction}{Construction}[section]
\newtheorem{corollary}{Corollary}[section]
\newtheorem{lemma}{Lemma}[section]
\newtheorem{definition}{Definition}[section]
\newtheorem{remark}{Remark}[section]
\newtheorem{proposition}{Proposition}[section]
\newtheorem{example}{Example}[section]
\newtheorem*{question}{Question}
\newtheorem*{solution}{Solution}
\newtheorem{exercise}{Exercise} 

\newcommand{\mc}{\mathcal}
\newcommand{\mf}{\mathfrak}
\newcommand{\xra}{\xrightarrow}
\newcommand{\ra}{\rightarrow}

\pagestyle{myheadings}

\textheight 9.3in 
\textwidth 6.5in
\calclayout

% metadata

%\date{\today}

\title{****}
\author{***} 

\begin{document}
    %\today
\bibliography{****}
\bibliographystyle{plain}
\end{document}

自包含的 MWE(需要安装现代 LaTeX 才能使用该[overwrite]功能)

\documentclass[12pt,reqno,a4paper]{amsart}

\begin{filecontents}[overwrite]{sample.bib}
@book {Brylinski,
AUTHOR = {Brylinski, Jean-Luc},
TITLE = {Loop spaces, characteristic classes and geometric
quantization},
SERIES = {Progress in Mathematics},
VOLUME = {107},
PUBLISHER = {Birkh\"{a}user Boston, Inc., Boston, MA},
YEAR = {1993},
PAGES = {100-3010},
ISBN = {0-8176-3644-7},
MRCLASS = {57Rxx (18G50 55P35 58F06)},
MRNUMBER = {1197353},
MRREVIEWER = {Daniel S. Freed},
DOI = {10.1007/978-0-8176-4731-5},
URL = {https://doi.org/10.1007/978-0-8176-4731-5},}
\end{filecontents}


%\usepackage[utf8]{inputenc} % not needed with up-to-date TeX systems
\usepackage[english]{babel}

\usepackage{amsmath,amsthm,amsfonts,amssymb}
\usepackage{mathtools}
\usepackage{color}

\usepackage{mathrsfs}
\usepackage[all]{xy}
\usepackage{tikz-cd}
\usepackage[normalem]{ulem} % do you *really* need it?
\usepackage{datetime}

\usepackage{hyperref}

\theoremstyle{definition}

\newtheorem{theorem}{Theorem}[section]
\newtheorem{construction}{Construction}[section]
\newtheorem{corollary}{Corollary}[section]
\newtheorem{lemma}{Lemma}[section]
\newtheorem{definition}{Definition}[section]
\newtheorem{remark}{Remark}[section]
\newtheorem{proposition}{Proposition}[section]
\newtheorem{example}{Example}[section]
\newtheorem*{question}{Question}
\newtheorem*{solution}{Solution}
\newtheorem{exercise}{Exercise} 

\newcommand{\mc}{\mathcal}
\newcommand{\mf}{\mathfrak}
\newcommand{\xra}{\xrightarrow}
\newcommand{\ra}{\rightarrow}

\pagestyle{myheadings}

\textheight 9.3in 
\textwidth 6.5in
\calclayout

% metadata

\begin{document}

\nocite{*}

\bibliography{sample}
\bibliographystyle{plain}
\end{document}

答案1

我建议您按如下方式进行:

  • 在你的 TeX 发行版中找到该文件plain.bst。复制此文件并将副本命名为 。plain-bookpages.bst(不要直接编辑 TeX 发行版中未重命名的原始文件。)

  • 在文本编辑器中打开文件plain-bookpages.bst。你用来编辑 tex 文件的程序就可以了。

  • 在文件中plain-bookpages.bst,找到 BibTeX 函数book。在我的文件副本中,该函数从第 557 行开始。

  • 之前此函数中,插入以下代码块,其中包含两个 BibTeX 函数 --bibinfo.checkformat.book.pages

    FUNCTION {bibinfo.check}
    { swap$ duplicate$ missing$
        { pop$ pop$ "" }
        { duplicate$ empty$
            { swap$ pop$ }
            { swap$ pop$ }
          if$
        }
      if$
    }
    FUNCTION {format.book.pages}
    { pages "pages" bibinfo.check
      duplicate$ empty$ 'skip$
        { " " * "pages" * }   
      if$
    }
    
  • book函数中找到以下行:

          publisher "publisher" output.check
    

    之前在此行中插入以下行:

          format.book.pages output
    
  • 将文件保存plain-bookpages.bst在包含主 tex 文件的文件夹中或 BibTeX 搜索的文件夹中。如果选择第二个选项,请确保适当更新 TeX 发行版的文件名数据库。如果前面的句子听起来像胡言乱语,我建议您选择第一个选项。

  • 在您的主 tex 文件中,将指令更改\bibliographystyle{plain}\bibliographystyle{plain-bookpages}并执行完整的重新编译循环 - LaTeX、BibTeX 和 LaTeX 两次 - 以完全传播所有更改。

祝您 BibTeX 愉快!

顺便说一句,我认为错误的MathSciNet 将有关其条目的出版商和出版商地址的信息合并在一个字段中;最好跟踪单独的publisheraddress字段。我还认为 mathscinet 将字段中的大多数单词小写是错误的title

以下是使用新创建的 bib 样式的完整 MWE(最小工作示例)的输出plain-bookpages

在此处输入图片描述

plain为了进行比较,如果采用参考书目样式,条目的格式如下:

在此处输入图片描述

最后一点:我不得不说,几乎所有的书目样式都是这样设置的,这是有充分理由的。忽略pages类型条目中的字段。@book您可能会问,这是什么原因?嗯,这是因为pages类型条目中的字段@book几乎肯定不会引起读者的兴趣。书目信息应该帮助读者从图书馆(实体或电子)或书店获得感兴趣的书目条目的副本。这就是为什么publisher字段与 类型的条目相关。相比之下, 字段@book的内容没有可比的用途。pages

\documentclass{article}
\begin{filecontents}[overwrite]{mybib.bib}
@book{Brylinski,
    AUTHOR    = {Brylinski, Jean-Luc},
    TITLE     = {Loop Spaces, Characteristic Classes and Geometric Quantization},
    SERIES    = {Progress in Mathematics},
    VOLUME    = {107},
    PUBLISHER = {Birkh{\"a}user},
    address   = {Boston~MA},
    YEAR      = {1993},
    PAGES     = {xvi+300},
    ISBN      = {0-8176-3644-7},
    MRCLASS   = {57Rxx (18G50 55P35 58F06)},
    MRNUMBER  = {1197353},
    MRREVIEWER= {Daniel S. Freed},
    DOI       = {10.1007/978-0-8176-4731-5},
    URL       = {https://doi.org/10.1007/978-0-8176-4731-5},
}
\end{filecontents}

\usepackage{cite}
\bibliographystyle{plain-bookpages}

\begin{document}
\nocite{Brylinski}
\raggedright
\bibliography{mybib}
\end{document}

相关内容