Эта статья написана для тех, кто уже имеет некоторое представление о работе в системе LaTeX.
В системе должен быть установлен TeX и графические оболочки для комфортной работы. Я использую Texmaker, TeXstudio и Emacs (все мои статьи, опубликованные здесь, набраны и скомпилированы в нём). В TeXstudio после установки необходимо сделать русским интерфейс: также в программах Texmaker и TeXstudio надо настроить проверку орфографии (для настройки проверки орфографии придётся скачивать, помещать в соответствующую папку программы и подключать соответствующие словари); Emacs в Linux устанавливается легко, а вот в Windows придётся повозиться. Я работаю с классом memoir, но и для остальных классов большинству моих наработок найдётся применение.
Одним из важнейших аспектов работы с TeX/LaTeX является умение создавать и настраивать библиографию. Её можно сделать несколькими способами:
1. С помощью окружения
\begin{thebibliography}
\end{thebibliography}
Этот подход хорош для небольших документов с уже подобранным списком литературы, так как позволяет все записи делать вручную. Однако данный метод не годится в том случае, если ссылок много, и они время от времени изменяются.
2. С помощью созданной базы данных. Я лично предпочитаю создавать её вручную, используя текстовый редактор Emacs. Кто-то привык пользоваться специальными программами вроде JabRef, Mendeley или Zotero, но от них, на мой взгляд, больше проблем, чем пользы; да и копаться в настройках нет никакого желания. Для формирования базы данных может использоваться либо BibTeX (он применяется преимущественно в случае использования кодировок CP1251 и KOI8-R), либо BibLaTeX. Он имеет преимущества перед BiBTeX в том плане, что работает с кодировкой UTF-8. Он использует для работы с .bib-файлами утилиту Biber. Необходимо указать в настройках Texmaker и TeXstudio путь к ней вот как:
Texmaker: Настройка → Настроить Texmaker → Команды и в строке Bib(la)tex написать biber %
TeXstudio: Параметры → Конфигурация → TeXstudio → Компиляция и в строке Библиография по умолчанию выбрать txs:///biber
Вначале создаём пустой файл primer.bib и открываем его в Emacs. Начинаем заполнять базу данных:
@BOOK{NozhNN,
author = {Наерман, Моисей Соломонович and Наерман, Яков Моисеевич},
title = {Руководство для подготовки шлифовщиков},
address = {М.},
publisher = {Высш.~шк.},
year = {1989},
pagetotal = {279},
language = {russian},
langid = {russian},
keywords = {rus}
}
@BOOK{Uzel2,
author = {Ashley Clifford, Warren},
title = {The Ashley book of knots},
address = {New York},
publisher = {Doubleday},
year = {1993},
isbn = {0-385-04025-3},
origyear = {1944},
pagetotal = {620},
language = {english},
langid = {english},
hyphenation = {english},
keywords = {rus}
}
@BOOK{UzelLNS,
author = {Скрягин, Лев Николаевич},
title = {Морские узлы},
address = {М.},
publisher = {Транспорт},
year = {1994},
edition = {3},
pagetotal = {128~с.;~ил.},
language = {russian},
langid = {russian},
keywords = {rus}
}
@BOOK{Ximi,
author = {Скурихин, Игорь Михайлович and Нечаев, Алексей Петрович},
title = {Все о пище с точки зрения химика},
subtitle = {справ. издание},
address = {М.},
publisher = {Высш.~шк.},
year = {1991},
pagetotal = {288},
language = {russian},
langid = {russian},
keywords = {rus}
}
@Collection{Marochnik,
editor = {В. Г. Сорокина},
editortype = {geneditor},
title = {Марочник сталей и сплавов},
location = {М.},
publisher = {Машиностроение},
year = {1989},
pagetotal = {640},
language = {russian},
langid = {russian},
keywords = {rus}
}
@BOOK{NozhIH,
author = {Ингерлейб, Михаил Борисович and Хорев, Валерий Николаевич},
title = {Твой нож},
subtitle = {Самый полный справочник},
address = {М.},
publisher = {АСТ: Астрель: Полиграфиздат},
year = {2010},
series = {Серия «Бойцовский клуб» },
edition = {4},
pagetotal = {256},
language = {russian},
langid = {russian},
keywords = {rus}
}
@BOOK{Uzel13,
author = {Хопкинс, Ричард},
title = {Искусство завязывать узлы},
subtitle = {100 самых надёжных верёвочных соединений для любителей и профессионалов},
address = {М.},
publisher = {Эксмо},
year = {2007},
pagetotal = {256~с.;~ил.},
translator = {М. Авданиной},
origlanguage = {english},
language = {russian},
langid = {russian},
keywords = {rus}
}
@Collection{trk,
title = {Традиционная русская кухня},
editor = {Т. М. Воробьева and Т. А. Гаврилова},
editortype = {{авт-сост.}},
year = {2008},
publisher = {Эксмо},
pagetotal = {528},
location = {М.},
language = {russian},
langid = {russian},
keywords = {rus}
}
@Online{INozhForma,
title = {Особенности заточки ножей},
media = {eresource},
url = {http://knifehacker.ru/osobennosti-zatochki-nozha/},
language = {russian},
langid = {russian},
keywords = {int}
}
@Online{MWF,
author = {Миловидов, Владимир Фёдорович},
title = {О заточке клинков},
media = {eresource},
url = {https://www.youtube.com/watch?v=6ANOFS2N2xw},
language = {russian},
langid = {russian},
keywords = {int}
}
@Online{IMorusel,
title = {Морские узлы},
media = {eresource},
url = {https://морякам.рф/practice/53-morskie-uzly.html},
language = {russian},
langid = {russian},
keywords = {int}
}
После записи последнего поля запятую, как правило, не ставят, но я никакой разницы в поведении biblatex не заметил: что она есть, что её нет. Некоторые делают одну большую БД на все случаи жизни; другие предпочитают использовать несколько мелких для разных документов. Ключи лучше давать с осмысленными названиями; одинаковых ключей быть НЕ ДОЛЖНО! О типах записей и полях смотрите подробнее документацию (ссылка ниже); отмечу только две вещи — если издательств несколько, перечисляем их через двоеточие и поля, нуждающиеся в защите от автоматического исправления, заключаем в фигурные скобки:
publisher = {АСТ: Астрель: Полиграфиздат},
editortype = {{авт-сост.}},
Пакет cite был загружен ещё до этого:
\usepackage{cite}
Теперь в преамбуле исходника загружаем пакет csquotes для оформления сложных блоков цитирования:
\usepackage[autostyle]{csquotes}
После него пакет biblatex с необходимыми опциями:
\usepackage[backend=biber,bibencoding=utf8,language=auto,autolang=other,sorting=ntvy,babel=other,maxbibnames=99,maxcitenames=2,sorting=ntvy, style=gost-numeric]{biblatex}
и добавляем путь ка базе данных:
\addbibresource{/home/dnt/bib/primer.bib}
Значение параметров загрузки biblatex:
backend=biber (движок)
bibencoding=utf8 (кодировка bib файла)
sorting=ntvy (настройка сортировки списка литературы — имя, заглавие, том/книга/часть/выпуск, год); в стиле gost-numeric эта опция и так включена по умолчанию, но на всякий случай лучше пусть будет;
language=auto (получение языка из babel/polyglossia)
autolang=other (многоязычная библиография)
maxbibnames=99 (печатает полный список имён)
maxcitenames=2 (количество авторов в цитатах)
style=gost-numeric (стиль цитирования и библиографии (по ГОСТ)). Наиболее подходящий для российских стандартов. Разрабатывается Олегом Домановым. Документация находится в пакете, установленном в дистриве, либо на сайте CTAN:
https://www.ctan.org/pkg/biblatex-gost
На GitHub можно найти небольшую, но очень полезную вики с советами:
https://github.com/odomanov/biblatex-gost/wiki/
С преамбулой разобрались (пока что), переходим к документу. Там, где нужно, начинаем библиографию с новой страницы:
\clearpage
\nocite{*}
\printbibliography
Команда nocite* выводит все записи из базы данных primer.bib; можно также вывести отдельные записи, перечисляя их ключи через запятую в скобках вместо звёздочки. Если этой команды нет, то выводятся только книги, на которые имеются ссылки в документе:
\cite{key}
\cite{key1,key2}
Проводим компиляцию:
1 Pdflatex
2 Biblatex
3 Pdflatex
4 Pdflatex
Возможно, понадобится запустить Pdflatex ещё один раз. Смотрим, что получилось:
Выглядит не очень презентабельно. Мне не нравятся следующие вещи:
1) Перед разделяющим двоеточием пробел. Ну и кому понадобилось так испортить ГОСТ? Пора бы уже законодательно запретить такие действия.
2) ФИО авторов курсивом;
3) Книги на английском стоят перед книгами на русском;
4) URL печатается моноширинным шрифтом
5) URL, содержащий в названии кириллицу (5. Морские узлы…), испорчен;
6) ISBN в первой записи, который здесь не нужен;
7) Ссылки на электронные ресурсы расположены вперемешку с книгами:
8) Заголовок по умолчанию не очень хорош;
9) При открытии библиографии из содержания или панели закладок открывается не заголовок, а первая строка;
10) URL разорван и располагается на двух строчках.
ПЕРЕД КАЖДЫМ ИЗМЕНЕНИЕМ БИБЛИОГРАФИИ НЕОБХОДИМО УДАЛИТЬ ВСЁ ИЗ ПАПКИ ПРОЕКТА! ОСТАВЛЯЕМ ТОЛЬКО ИСХОДНИК (наш файл в формате .tex), НУ И ПАПКУ С ГРАФИКОЙ. ТАКЖЕ ПРОВЕРЬТЕ ПАПКУ НА ПРИСУТСТВИЕ СКРЫТЫХ ФАЙЛОВ (вроде .tex с тильдой в конце расширения); УДАЛИТЕ ТОЖЕ! (понятно, что весь процесс компиляции приходится проводить с самого начала).
Начнём ликвидировать эти недочёты:
1. Сделаем ФИО прямым шрифтом — поставим в преамбуле после добавления библиографии следующее:
\makeatletter
\renewcommand*{\mkgostheading}[1]{\mkbibnormal{# 1}} % # и 1 пишем без пробела, это здесь у меня написать не получается.
\makeatother
2. Поставим русскоязычные записи перед англоязычными:
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldset=langid, fieldvalue={tempruorder}]
}
\map[overwrite]{
\step[fieldsource=langid, match=russian, final]
\step[fieldsource=presort, match=\regexp{(.+)}, replace=\regexp{aa$1}] %$
}
\map{
\step[fieldsource=langid, match=russian, final]
\step[fieldset=presort, fieldvalue={az}]
}
\map[overwrite]{
\step[fieldsource=langid, notmatch=russian, final]
\step[fieldsource=presort, match=\regexp{(.+)}, replace=\regexp{za$1}] %$
}
\map{
\step[fieldsource=langid, notmatch=russian, final]
}
\map{
\step[fieldsource=langid, match={tempruorder}, final]
\step[fieldset=langid, null]
}
}
}
3. Сделаем ссылки URL нормальным шрифтом (загрузим пакет url перед пакетом csquotes и изменим шрифт):
\usepackage{url}
\renewcommand\UrlFont{\rmfamily}
4. Уберём ISBN:
Это можно сделать двумя способами:
4.1. При загрузке biblatex добавить опцию isbn=false;
\usepackage[backend=biber,bibencoding=utf8,language=auto,autolang=other,babel=other,maxbibnames=999,maxcitenames=2,sorting=ntvy,isbn=false, style=gost-numeric]{biblatex}
4.2. Более жестокий вариант — поставим в преамбуле после добавления библиографии вот что:
\DeclareSourcemap{
\maps[datatype=bibtex, overwrite]{
\map{
\step[fieldset=isbn, null]
}
}
}
В обоих случаях результат один и тот же.
5. Уберём пробел перед разделяющим двоеточием.
5.1. Первый способ — вставим в документе перед командой
\printbibliography
следующую строку:
\renewcommand*{\addcolondelim}{\addcolon\space}
5.2. Второй способ — вставим в преамбуле после подключения библиографии вот что:
\makeatletter
\renewcommand*{\addcolondelim}{%
\begingroup%
\def\abx@colon{%
\ifdim\lastkern>\z@\unkern\fi%
\abx@puncthook{:}\space}%
\addcolon%
\endgroup}
\renewcommand*{\addsemicolondelim}{%
\begingroup%
\def\abx@semicolon{%
\ifdim\lastkern>\z@\unkern\fi%
\abx@puncthook{;}\space}%
\addsemicolon%
\endgroup}
{}
\makeatother
Этот макрос удаляет пробел перед разделяющим двоеточием (или перед точкой с запятой). О данном способе я узнал, загрузив архив проекта со страницы на GitHub:
https://github.com/AndreyAkinshin/Russian-Phd-LaTeX-Dissertation-Template
Автор — Андрей Акиньшин. Нужный нам файл biblatex.tex находится в папке biblio (взятый оттуда вышеприведённый макрос я слегка переделал, так как он был в черновом варианте — на титульном листе слева вверху вылезало вот что: =0). Кроме этого, там много и других полезных сведений.
6. Переименуем библиографию — вставим в документе перед командой
\printbibliography
следующую конструкцию:
\renewcommand\bibname{Библиография}
7. Сделаем кириллические ссылки читабельными. Для этого изменим запись
@Online{IMorusel,
title = {Морские узлы},
media = {eresource},
url = {https://морякам.рф/practice/53-morskie-uzly.html},
language = {russian},
langid = {russian},
keywords = {int}
}
вот так:
@Online{IMorusel,
title = {Морские узлы},
media = {eresource},
addendum = {{URL: \url{https://морякам.рф/practice/53-morskie-uzly.html}}},
language = {russian},
langid = {russian},
keywords = {int}
}
Поле addendum нам ещё будет достаточно интересно. Оно в библиографической записи выводится последним и может использоваться для различных комментариев, а также для других действий, с которыми мы ещё ознакомимся. Близко к нему по функциям поле note, но оно последним не выводится. После этого изменим преамбулу для использования движка Xelatex вместо Pdflatex и проведём компиляцию:
1 Xelatex
2 Biblatex
3 Xelatex
4 Xelatex
Возможно, понадобится запустить Xelatex ещё один раз. Смотрим, что получилось:
А вообще лучше избегать таких записей в библиографии. Способ работы я показал, а в дальнейшем я эту запись удалю: Xelatex компилирует документ намного медленнее, чем Pdflatex, и тратить время мне не сильно хочется.
Пока достаточно. Продолжим позже.