Как мне указать 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). Выходит так

Жан-Люк Брилински. Пространства петель, характеристические классы и геометрическое квантование, том 107 Progress in Mathematics. 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 (для этой [overwrite]функции требуется современная установка LaTeX)

\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

Я предлагаю вам действовать следующим образом:

  • Найдите файл plain.bstв вашем дистрибутиве TeX. Сделайте копию этого файла и назовите копию, скажем, plain-bookpages.bst. (Не редактируйте исходный, неименованный файл вашего дистрибутива TeX напрямую.)

  • Откройте файл plain-bookpages.bstв текстовом редакторе. Программа, которую вы используете для редактирования tex-файлов, подойдет.

  • В файле plain-bookpages.bstнайдите функцию BibTeX book. В моей копии файла эта функция начинается на строке 557.

  • Непосредственно передэтой функции вставьте следующий фрагмент кода, содержащий две функции BibTeX — bibinfo.checkи format.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 объединяет информацию об издателе записи и адрес издателя в одном поле; лучше отслеживать отдельные поля publisherи address. Я также думаю, что неправильно со стороны mathscinet писать большинство слов в titleполе строчными буквами.

Вот вывод полного 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}

Связанный контент