Найти в Дзене

Некоторые особенности работы с Biblatex. Часть III.

Сегодня продолжим работать с библиографией. Как видно, в библиографии книги и электронные ресурсы расположены вперемешку. Создадим две библиографии. Опции загрузки biblatex таковы:
\usepackage[backend=biber,bibencoding=utf8,language=auto,autolang=other,sorting=ntvy,babel=other,maxbibnames=99,maxcitenames=2,
movenames=false,dropdates=true,url=false,style=gost-numeric]{biblatex}
Я забыл ранее

Сегодня продолжим работать с библиографией. Как видно, в библиографии книги и электронные ресурсы расположены вперемешку. Создадим две библиографии. Опции загрузки biblatex таковы:

\usepackage[backend=biber,bibencoding=utf8,language=auto,autolang=other,sorting=ntvy,babel=other,maxbibnames=99,maxcitenames=2,
movenames=false,dropdates=true,url=false,style=gost-numeric]{biblatex}

Я забыл ранее сказать про опцию movenames=false. Её функция — не менять местами заголовок и список авторов, если авторов больше четырех. Ставим затем в преамбулу после загрузки пакета biblatex вот что:

\DeclareBibliographyCategory{Biblio}
\addtocategory{Biblio}{Uzel2,NozhNN,UzelLNS,Marochnik,NozhIH,}

А в документе в месте печати библиографии

\clearpage
\nocite{*}
\renewcommand*{\addcolondelim}{\addcolon\space}
\renewcommand\bibname{Литература}
\printbibliography[category=Biblio]
\renewcommand\bibname{Электронные ресурсы}
\printbibliography[notcategory=Biblio]
\clearpage

В квадратных скобочках помещаем принцип сортировки. Сортировать записи можно много по каким показателям — категориям, типу записи и т. д. Сейчас будем сортировать по категориям.

Вообще-то я предпочитаю сортировку по ключевым словам. Уберём из преамбулы

\DeclareBibliographyCategory{Biblio}
\addtocategory{Biblio}{Uzel2,NozhNN,UzelLNS,Marochnik,NozhIH,}

А в месте вывода библиографии поставим это:

\printbibliography[heading=bibintoc,keyword={rus},title={КНИГИ}]
\printbibliography[heading=bibintoc,keyword={int},title={САЙТЫ}]

Параметр heading=bibintoc добавит библиографию в содержание и в боковую панель.

-2

Номера в библиографиях выводятся не так, как надо. Можно, конечно, выбрать стиль, не печатающий номера, но лучше создать отдельную нумерацию в каждую библиографию. Добавим в опции загрузки пакета biblatex

\usepackage[defernumbers=true,backend=biber,bibencoding=utf8, language=auto,autolang=other,sorting=ntvy,babel=other,maxbibnames=99, maxcitenames=2,movenames=false,url=false,style=gost-numeric]{biblatex}

Функция параметра defernumbers=true: перезагрузка нумерации; нумерация проставляется после двух компиляций, зато позволяет выцеплять библиографию по ключевым словам и нумеровать не из большего списка. A в месте вывода библиографии поставим это:

\printbibliography[heading=bibintoc,keyword={rus},resetnumbers=true,title={КНИГИ}]
\printbibliography[heading=bibintoc,keyword={int},resetnumbers=true,title={САЙТЫ}]

-3

Вообще-то несколько библиографий мне не нравятся; лучше разделить библиографию на два подраздела. Есть много способов сделать это.
1. В документе — там, где печатается библиография — поставим такое:

\nocite{*}
\renewcommand*{\addcolondelim}{\addcolon\space}
\phantomsection
\chapter*{БИБЛИОГРАФИЯ}
\addcontentsline{toc}{chapter}{БИБЛИОГРАФИЯ}
\printbibliography[heading=subbibintoc,keyword={rus},resetnumbers=true,title={КНИГИ}]
\printbibliography[heading=subbibintoc,keyword={int},resetnumbers=true,title={САЙТЫ}]
\clearpage

-4

Всё хорошо,

-5

но если в главах есть минисодержание, то разделы библиографии будут отображаться в minitoc предыдущей главы, имеющий минисодержание:

-6

Чтобы этого не было, сделаем так:

\phantomsection
\chapter*{БИБЛИОГРАФИЯ}
\addcontentsline{toc}{chapter}{БИБЛИОГРАФИЯ}
\noindent
\makebox[1.0\textwidth]{
{\begin{minipage}{\dimexpr\textwidth-3\mboxsep-1\mboxrule\relax}
\centering
\setlength\columnsep{10mm}
\begin{multicols}{2}
\startcontents[chapters]
\end{multicols}\\
\phantom{123}\\
\vspace{-10pt}
\end{minipage}}
}
\phantom{\lipsum[101]}
\vspace{-18mm}
\printbibliography[heading=subbibintoc,keyword={rus},resetnumbers=true,title={КНИГИ}]
\printbibliography[heading=subbibintoc,keyword={int},resetnumbers=true,title={САЙТЫ}]

То есть как бы добавим minitoc в библиографию, но выводить на печать не будем.

-7

2. В преамбуле:

\usepackage[defernumbers=true,backend=biber,bibencoding=utf8, language=auto,autolang=other,sorting=ntvy,babel=other,maxbibnames=99, maxcitenames=2,movenames=false,dropdates=true,url=false, style=gost-numeric]{biblatex}

В документе:

\nocite{*}
\renewcommand*{\addcolondelim}{\addcolon\space}
\renewcommand\bibname{}
\phantomsection
\chapter*{Библиография}
\addcontentsline{toc}{chapter}{Библиография}
\phantomsection
\section*{Литература}
\addcontentsline{toc}{section}{Литература}
\printbibliography[heading=nobibintoc,keyword={rus},resetnumbers=true,title={}]
\phantomsection
\section*{Электронные ресурсы}
\addcontentsline{toc}{section}{Электронные ресурсы}
\printbibliography[heading=nobibintoc,keyword={int},resetnumbers=true,title={}]

Компилируем и смотрим:

-8

А в содержании появился косяк

-9

Откуда он взялся? Дело в том, что класс memoir добавляет в содержание библиографию по умолчанию. Чтобы этого не было, ставим в преамбулу команду

\nobibintoc

хоть перед загрузкой biblatex, хоть после.

-10

Всем способ хорош — даже разделы библиографии открываются на заголовке, а не на первой строке — но если глава имеет какое-то навороченное декоративное офориление, то этот способ даст сбой. Чтобы всё было как надо, сделаем библиографию таким образом:
3. Ещё один способ:

\nocite{*}
\renewcommand*{\addcolondelim}{\addcolon\space}
\renewcommand\bibname{Библиография}
\printbibheading
\addcontentsline{toc}{chapter}{Библиография}
\newrefcontext[labelprefix=1.]
\printbibliography[heading=subbibintoc,keyword={rus},resetnumbers=true,title={Литература}]
\newrefcontext[labelprefix=2.]
\printbibliography[heading=subbibintoc,keyword={int},resetnumbers=true,title={Электронные ресурсы}]

-11

Как видим, команда

\newrefcontext[labelprefix=1.]

печатает префикс перед номером (а то одинаковые номера в разных библиографиях при цитировании будут выглядеть странно).

-12

А что делать, если нужно вставить какой-либо знак после номера? Сколько я не пытался, сделать автоматическую расстановку пока не удалось. Ну что же, не получилось по хорошему, сделаем по плохому. Прогоним компиляцию, запомним, на каком месте какая запись находится, а после добавим в базу данных поле shorthand, куда и выставим нужные нам значения:

@BOOK{INozhForma,
  title        = {Особенности заточки ножей},
  media        = {eresource},
  url          = {http://knifehacker.ru/osobennosti-zatochki-nozha/},
  language     = {russian},
  langid       = {russian},
  keywords     = {int},
  shorthand    = {2$’$}
}
@BOOK{MWF,
  author       = {Миловидов, Владимир Фёдорович},
  title        = {О заточке клинков},
  media        = {eresource},
  url          = {https://www.youtube.com/watch?v=6ANOFS2N2xw},
  language     = {russian},
  langid       = {russian},
  keywords     = {int},
  shorthand    = {1$’$}
}

Это поле будет выводиться вместо номера. Компилируем и смотрим:

-13

В прошлый раз я говорил о вставке русских аннотаций к иностранным книгам. При использовании первого способа (когда редактируем .bbl-файл), если использовать префиксы перед цифрами, то запись вообще не будет выводиться. В этом случае либо пользуйтесь полем shorthand, либо вообще отключите перезагрузку нумерации. При использовании второго способа никаких нареканий нет.

-14

На сегодня достаточно.