Найти тему

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

Среди базовых стилей Biblatex есть один очень красивый — reading.
Попробуем поработать с ним.
База данных:

@BOOK{NozhNN,
  author    = {Наерман, Моисей Соломонович and Наерман, Яков Моисеевич},
  title        = {Руководство для подготовки шлифовщиков},
  address      = {М.},
  publisher    = {Высш.~шк.},
  year         = {1989.},
  pagetotal    = {279~с},
  language     = {russian},
  langid       = {russian},
  keywords     = {rus},
}
@Collection{Marochnik,
  editor       = {В. Г. Сорокина},
  editortype   = {geneditor},
  title        = {Марочник сталей и сплавов},
  location     = {М.},
  publisher    = {Машиностроение},
  year         = {1989},
  pagetotal    = {640},
  language     = {russian},
  langid       = {russian},
  keywords     = {rus},
}
@Online{INozhForma,
  title        = {Особенности заточки ножей},
  media        = {eresource},
  url          = {http://knifehacker.ru/osobennosti-zatochki-nozha/},
  language     = {russian},
  langid       = {russian},
  keywords     = {int},
  annotation   = {Рассмотрены основные формы поперечных сечений клинков},
}
@Online{MWF,
  author       = {Миловидов, Владимир Фёдорович},
  title        = {О заточке клинков},
  media        = {eresource},
  url          = {https://www.youtube.com/watch?v=6ANOFS2N2xw},
  language     = {russian},
 langid       = {russian},
  keywords     = {int},
}
@BOOK{UzelLNS,
  author       = {Скрягин, Лев Николаевич},
  title        = {Морские узлы},
  address      = {М.},
  publisher    = {Транспорт},
  year         = {1994.},
  edition      = {3},
  pagetotal    = {128~с.;~ил.},
  language     = {russian},
  langid       = {russian},
  annotation   = {Одна из лучших русскоязычных книг на тему вязания узлов},
  abstract     = {Изображения качественные и понятные},
  addendum     = {Первое издание было в 1982 г},
  keywords     = {rus},
}

Преамбула:

\usepackage[autostyle]{csquotes}
\usepackage[defernumbers=true,backend=biber,bibencoding=utf8, language=auto,autolang=other,sorting=ntvy,babel=other,
maxbibnames=99,maxcitenames=2,movenames=false,dropdates=true, style=reading]{biblatex}
\addbibresource{/home/dnt/bib/primer0fc.bib}

Документ:

\clearpage
\nocite{*}
\renewcommand*{\bibfont}{\small} % уменьшим размер шрифта
\renewcommand\bibname{Библиография}
\printbibliography

Посмотрим на результат компиляции:

и на цитаты:

-2

Начнём исправлять недочёты…
1. Изменим базу данных:

@Online{MWF,
  author       = {Миловидов, В.,Ф.},
  title        = {О заточке клинков},
  media        = {eresource},
  url          = {https://www.youtube.com/watch?v=6ANOFS2N2xw},
  language     = {russian},
  langid       = {russian},
  keywords     = {int},
  shorttitle   = {Заточка ножей},
}
@Collection{Marochnik,
  editor       = {Сорокин, В.,Г.},
  title        = {Марочник сталей и сплавов},
  location     = {М.},
  publisher    = {Машиностроение},
  year         = {1989},
  pagetotal    = {640},
  language     = {russian},
  langid       = {russian},
  keywords     = {rus},
  shorttitle   = {Маркировка сталей},
}
@Online{sait95,
  title        = {Особенности заточки ножей},
  media        = {eresource},
  url          = {http://knifehacker.ru/osobennosti-zatochki-nozha/},
  abstract     = {Статья содержит информацию об основных формах поперечных сечений клинков},
  language     = {russian},
  langid       = {russian},
  keywords     = {int},
  shorttitle   = {Профили клинков},
}
@BOOK{UzelLNS,
  author       = {Скрягин, Л.,Н.},
  title        = {Морские узлы},
  address      = {М.},
  publisher    = {Транспорт},
  year         = {1994.},
 edition      = {3},
  pagetotal    = {128~с.;~ил.},
  language     = {russian},
  langid       = {russian},
  annotation   = {Одна из лучших русскоязычных книг на тему вязания узлов},
  abstract     = {Изображения качественные и понятные},
  addendum     = {Первое издание было в 1982 г},
  keywords     = {rus},
  shorttitle   = {Вязание узлов},
}
@BOOK{NozhNN,
  author       = {Наерман, М.,С. and Наерман, Я.,М.},
  title        = {Руководство для подготовки шлифовщиков},
  address      = {М.},
  publisher    = {Высш. шк.},
  year         = {1989},
  pagetotal    = {279},
  language     = {russian},
  langid       = {russian},
  keywords     = {rus},
  shorttitle   = {Абразивы},
}

2. Настроим опции biblatex (с ними будем разбираться по ходу пьесы):

\usepackage[defernumbers=true,giveninits=true,terseinits=true,firstinits=true,backend=biber,bibencoding=utf8,language=auto,autolang=other,sorting=ntvy,babel=other,maxbibnames=99,movenames=false,entrykey=false, dropdates=true,style=reading,citestyle=numeric]{biblatex}

Опция citestyle=numeric служит для того, чтобы изменить оформление цитат. Ставим её ПОСЛЕ загрузки стиля:

-3

3. Уменьшим расстояние между записями; ставим после загрузки пакета biblatex

\makeatletter %расстояние между записями; я уменьшил с 2 до 1
\patchcmd{\bbx@item@full}
  {\itemsep2\bibitemsep}
  {\itemsep1\bibitemsep}
  {}
  {}
\makeatothe

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

-4

4. Изменим записи над линией. Слева стоят автор и название. Всё это дублирует содержимое записи. Лучше добавим номер.
Справа выводится идентификационный ключ…
— Кому он нужен?
— Никому.
— Зачем он нужен?
— Низачем.
Ставим в преамбулу после предыдущего макроса:

\renewbibmacro*{entryhead:full}{%поля, отображённые над чертой
  \printfield{labelnumber}\adddot%
  \hfill
  \printfield{labeltitle}} %будет напечатано поле shorttitle

Здесь нужна опция entrykey=false, чтобы идентификатор не печатался.

-5

В дальнейших записях везде между знаком # и цифрой пробела нет! Мне приходится его делать, так как на этом сайте иначе нельзя!
5. Название книги прямым шрифтом:

\DeclareFieldFormat{title}{\normalfont{# 1}} % название прямым шрифтом

Шрифт стал прямым.

-6


6. Переопределим поля аннотации и абстракт-текста. Уберём названия этих полей:

\DeclareFieldFormat{annotation}{# 1}
\DeclareFieldFormat{abstract}{ # 1}

Названия убрались.

-7

Или сделаем свои названия:

\DeclareFieldFormat{annotation}{Описание\addcolon\space # 1}
\DeclareFieldFormat{abstract}{Резюме\addcolon\space # 1}

Названия изменились.

-8

7. URL с новой строчки:

\newbibmacro*{bbx:parunit}{% поля doi, eprint, url с новой строки
  \ifbibliography
    {\setunit{\bibpagerefpunct}\newblock
     \usebibmacro{pageref}%
     \clearlist{pageref}%
     \setunit{\adddot\par\nobreak}}
    {}}
\renewbibmacro*{doi+eprint+url}{%
  \usebibmacro{bbx:parunit}% Added
  \iftoggle{bbx:doi}
    {\printfield{doi}}
    {}%
  \iftoggle{bbx:eprint}
    {\usebibmacro{eprint}}
    {}%
  \iftoggle{bbx:url}
    {\usebibmacro{url+urldate}}
    {}}
\renewbibmacro*{eprint}{%
  \usebibmacro{bbx:parunit}% Added
  \iffieldundef{eprinttype}
    {\printfield{eprint}}
    {\printfield[eprint:\strfield{eprinttype}]{eprint}}}
\renewbibmacro*{url+urldate}{%
  \usebibmacro{bbx:parunit}% Added
  \printfield{url}%
  \iffieldundef{urlyear}
    {}
    {\setunit*{\addspace}%
      \printtext[urldate]{\printurldate}}}

Электронный адрес теперь начинается с новой строчки.

-9

8. Ну и наконец-то наводим порядок с инициалами. За это отвечают опции
giveninits=true — фамилия инициалы

\DeclareNameAlias{default}{last-first} % фамилия инициалы
\DeclareNameAlias{sortname}{last-first}
\DeclareNameAlias{author}{last-first}
\DeclareNameAlias{editor}{last-first}
\DeclareNameAlias{translator}{last-first}

terseinits=true,firstinits=true — убрать запятую после фамилии

\renewbibmacro*{name:family-given}[4]{%удалить запятую между фам. и им.
    \ifuseprefix
    {\usebibmacro{name:delim}{# 3# 1}%
    \usebibmacro{name:hook}{# 3# 1}%
    \ifcapital
        {\mkbibnameprefix{\MakeCapital{# 3}}\isdot}
    {\mkbibnameprefix{# 3}\isdot}%
    \ifpunctmark{’}{}{\bibnamedelimc}}%
    \mkbibnamelast{# 1}\isdot
    \ifblank{# 4}{}{\bibnamedelimd\mkbibnameaffix{# 4}\isdot}%
    \ifblank{# 2}{}{\bibnamedelimd\mkbibnamefirst{# 2}\isdot}}
%remove \addcomma
    {\usebibmacro{name:delim}{# 1}%
    \usebibmacro{name:hook}{# 1}%
    \mkbibnamelast{# 1}\isdot
    \ifblank{# 4}{}{\bibnamedelimd\mkbibnameaffix{# 4}\isdot}%
           \ifblank{# 2 # 3}{}{\space}  %пробел между именем и отчеством
    \ifblank{# 2}{}{\bibnamedelimd\mkbibnamefirst{# 2}\isdot}%
    \ifblank{# 3}{}{\bibnamedelimd\mkbibnameprefix{# 3}\adddot}}}

Вот картинка, как выглядит на самом деле:

-10

Замена предлога «и»  на запятую между авторами:

\renewcommand*{\multinamedelim}{\adddot}
\renewcommand*{\finalnamedelim}{\addcomma\space}

Основные настройки завершены.

-11

Если библиография состоит из нескольких частей,

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

то находящиеся над линией записи можно сделать таким образом:

\renewbibmacro*{entryhead:full}{
  \printfield{labelprefix}\!  %команда \! нужна для уменьшения промежутка
  \printfield{labelnumber}\adddot%
  \hfill
  \printfield{labeltitle}}

Поле media напечатать так и не удалось. Добавил его оформление и содержимое в поле title:

@Online{sait95,
  title        = {Особенности заточки ножей  [Электронный ресурс]},
  media        = {eresource},
  url          = {http://knifehacker.ru/osobennosti-zatochki-nozha/},
  abstract     = {Статья содержит информацию об основных формах поперечных сечений клинков},
  language     = {russian},
  langid       = {russian},
  keywords     = {int},
  shorttitle   = {Профили клинков},
}

Вот результат:

-12

На этом сегодня завершим деятельность.