Зачем нужен BiBTeX и как его использовать

Этот пост является частью большой статьи
"Как оформить диплом в LaTeX?",
которую написал virens,
ведущий блога "Записки дебианщика"

В этом посте уже говорилось о том, что такое BiBTeX и как его использовать. Судя по поступившим комментариям, это немного не очевидно - поэтому приведу простой пример использования единой библиографической базы BiBTeX в нескольких документах. Естественно, предполагается, что все необходимые программы (tetex, jabref, java) установлены и работают.


BiBTeX or not BiBTeX?
Чтобы ответ на этот вопрос стал более нагляден и очевиден, я приведу примеры документов с его использованием и без. Особенно ярко это проявляется тогда, когда кусок документа с цитированием литературных источников вставляется в другой документ - и это сейчас будет продемонстрировано.

BibTeX не используется
Итак, создан простенький документ, в нём несколько ссылок на литературу, причём эти ссылки должны нумероваться в порядке упоминания. Вот как выглядит исходный код документа:

\documentclass[a4paper,12pt,oneside]{article}
\usepackage[T2A]{fontenc}
\usepackage[koi8-r]{inputenc}
\usepackage[english,russian]{babel}
\usepackage{amssymb,amsfonts,amsmath,mathtext,cite,enumerate,float}

\begin{document}

<.....>

Метод Голда\cite{gold} получен из метода ван Циттерта\cite{gold-cittert},
но с предположением, что действует он только для положительных чисел.
Восстанавливает по следующему алгоритму


<.....>


\newpage
\begin{thebibliography}{00} % Список литературы
\bibitem{blind}
S. M. Jefferies and J. C. Christou. Restoration of astronomical images by iterative
blind deconvolution. Astrophysical Journal, 415:862+, October 1993.
\bibitem{cittert}
Van CITTERT, P. H. : Zum Einfluss der Spaltbreite auf die
Intensittverteilung in Spektralinien II, Zeitschrift f\"ur Physik 69
(1933), 298.
\bibitem{cittert-convergence}
N.R. Hill, G.E. Ioup: J. Opt. Soc. Am. 66 (1976) 487
\bibitem{gold}
GOLD, R. : An Iterative Unfolding Method for Matrices, Tech.
Rep. ANL-6984, Argonne National Laboratory, Argonne, Illinois,
1964.
\bibitem{gold-cittert}
Journal of Electrical Engineering, Vol. 56, NO. 5-6, 2005, 141--145
Multidimensional FFT Based Positive
Definite Gold Deconvolution Algorithm
Miroslav Morh\'a\v{c} -- Vladislav Matou\v{s}ek
\bibitem{lucy}
L.B. Lucy. An iteration technique for the rectification of observed distributions.
Astronomical Journal, 79:745--754, 1974.
\bibitem{holmes}
Holmes, T.J. 1992. Blind deconvolution of
quantum-limited imagery: maximum likelihood
approach. J. Opt. Soc. Am. A 9:1052-
1061.
\bibitem{jansson}
P.A. Jansson, R.H. Hunt, and E.K. Peyler. Resolution enhancement of spectra.
Journal of the Optical Society of America, 60:596--599, 1970.
\end{thebibliography}
\end{document}
Разумеется, показан не весь документ, а лишь его часть. Ещё раз: ссылки \cite{} будут пронумерованы в том порядке, в котором они упомянуты в окружении \begin{thebibliography} .... \end{thebibliography} а не в порядке упоминания в тексте!

А вот как выглядит набранный документ:

Метод Голда [4] получен из метода ван Циттерта [5], но с предположени-ем, что действует он только для положительных чисел. Восстанавливает последующему алгоритму

<...>
Список литературы:

<...>
[4] GOLD, R. : An Iterative Unfolding Method for Matrices, Tech. Rep. ANL-
6984, Argonne National Laboratory, Argonne, Illinois, 1964.

[5] Journal of Electrical Engineering, Vol. 56, NO. 5-6, 2005, 141-
145 Multidimensional FFT Based Positive Definite Gold Deconvolution
Algorithm Miroslav Morhac - Vladislav Matousek

Теперь, если переставить местами в окружении \begin{thebibliography} .... \end{thebibliography} ссылки \bibitem{gold} и \bibitem{gold-cittert}, то в тексте ссылки будут стоять так:

Метод Голда [5] получен из метода ван Циттерта [4], но с предположением, что действует он только для положительных чисел. Восстанавливает последующему алгоритму
что не есть правильно. Особенно это будет прискорбно в большом документе и совсем грустно - в составленном из нескольких. Единственное исключение из этого правила - некоторые научные журналы (вроде Optics Letters и Optics Express), которые явно требуют вставлять библиографические ссылки в текст статьи в окружении \begin{thebibliography} .... \end{thebibliography} - их системы BiBTeX не переваривают. Обходится это очень просто: создаётся ещё один документ со статьёй, которому указывается библиографическая база данных BiBTeX. Файл компилируется, после чего берётся содержимое файла bbl и вставляется в финальную версию статьи.


Включаем BibTeX
Для этого не нужно особых телодвижений: нужно вбить источники литературы в базу через удобную графическую оболочку Jabref, кинуть на каталог базы симлинк, явно указать в документе использование BibTeX-овской базы и задать в преамбуле стиль библиографии.

Всё по порядку: вбиваем источники литературы в базу при помощи графический оболочки JabRef, копируем в каталог с документом. Теперь симлинк будет указывать на каталог, где находится база - таким образом, множество документов будут использовать одну и ту же базу.

penta4@penta4rce:~/documents/matlab/litobzor$ ls -lh
итого 512K
lrwxrwxrwx 1 penta4 penta4 40 2008-01-02 15:06 biblio -> /home/penta4/matlab/docus/topics/biblio/
-rw-r--r-- 1 penta4 penta4 49K 2007-12-05 11:23 Lit_obzor.pdf
-rw-r--r-- 1 penta4 penta4 208K 2007-12-05 11:23 Lit_obzor.ps
-rw-r--r-- 1 penta4 penta4 9,4K 2007-12-12 17:50 Lit_obzor.tex
...........
Готово, теперь поправим наш документ: вместо окружения \begin{thebibliography} .... \end{thebibliography} используем \bibliography{biblio/my} если ваша база называется my.bib (расширение не указывается). Кроме того, в преамбулу добавляем несортированный стиль библиографии (номера - в порядке упоминания в тексте) \bibliographystyle{unsrt}

Вот как это выглядит всё вместе:


\documentclass[a4paper,12pt,oneside]{article}
\usepackage[T2A]{fontenc}
\usepackage[koi8-r]{inputenc}
\usepackage[english,russian]{babel}
\usepackage{amssymb,amsfonts,amsmath,mathtext,cite,enumerate,float}

\bibliographystyle{unsrt} %Стиль библиографических ссылок БибТеХа


\begin{document}

<.....>

Метод Голда\cite{gold} получен из метода ван Циттерта\cite{gold-cittert},
но с предположением, что действует он только для положительных чисел.
Восстанавливает по следующему алгоритму


<.....>

\newpage 
\bibliography{biblio/my}
\end{document}

Как и обещалось, вы работаете с текстом в ЛаТеХе, как и прежде, только вместо явного прописывания источников литературы вы заставляете этим заниматься ЛаТеХ. Машина работает, вы - отдыхаете. И это правильно.


Несколько замечаний по BiBTeX
Надеюсь, крутизна BiBTeX прочувствована и вы уже с увлечением набиваете свою библиографическую базу. Однако есть пара тонких моментов, которые мне хотелось бы осветить.

Вопрос: А где теперь мои процитированные литературные источники?
Ответ: Они теперь в файле имядокумента.bbl, который можно открыть, посмотреть и при необходимости скопировать в другой документ. В этом примере он выглядит так:

\begin{thebibliography}{1}

\bibitem{lucy}
L.B. Lucy.
\newblock An iteration technique for the rectification of observed
distributions.
\newblock {\em Astronomical Journal}, 79:745--754, 1974.

\bibitem{cittert}
Van~Cittert P.H.
\newblock Zum einfluss der spaltbreite auf die intensittverteilung.
\newblock {\em Spektralinien II, Zeitschrift f\"ur Physik}, 69:298, 1933.

\bibitem{cittert-convergence}
N.R. Hill.
\newblock G.e. ioup.
\newblock {\em J. Opt. Soc. Am.}, 66:487, 1976.

\bibitem{jansson}
E.K.~Plyler P.A.~Jansson, R.H.~Hunt.
\newblock {\em J. Opt. Soc. Am.}, 60:596, 1970.

\bibitem{gold}
R.~GOLD.
\newblock An iterative unfolding method for matrices.
\newblock {\em Tech.Rep. ANL-6984, Argonne National Laboratory, Argonne,
Illinois,}, 1964.

\bibitem{gold-cittert}
{Miroslav Morh\'a\v{c}} and {Vladislav Matou\v{s}ek}.
\newblock Multidimensional fft based positive definite gold deconvolution
algorithm.
\newblock {\em Journal of Electrical Engineering}, Vol. 56, \No. 5-6:141--145,
2005.

\bibitem{holmes}
{T.J.~Holmes}.
\newblock Blind deconvolution of quantum-limited imagery: maximum likelihood
approach.
\newblock {\em J. Opt. Soc. Am. A}, 9:1052--1061, 1992.

\end{thebibliography}

Вопрос: Как переопределить в преамбуле, чтобы список литературы был через точку?
Ответ: Для этого в преамбуле (до \begin{document}) прописываем:
\makeatletter
\bibliographystyle{unsrt}
\renewcommand{\@biblabel}[1]{#1.}
\makeatother
И всё, теперь в списке литературы источники будут идти как 1. 2. ... N.


Вопрос: Можно ли в одном документе использовать не одну базу, а несколько?
Ответ: Да, можно, тогда их имена указываются через запятую без пробелов. Например, так: \bibliography{biblio/my,biblio/filosofy}

В следующем посте приведу пример использования стилей оформления литературы в BiBTeX.

22 комментариев: |высказаться!| RSS-лента дискуссии.|
Анонимный комментирует...

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

Миша.

virens комментирует...

2 Миша
А как в бибтехе обстоят дела с поддержкой кириллицы?
Превосходно они обстоят, никогда проблем не испытывал.

Мне несколько лет назад, когда я набирал диссертацию, пришлось прикручивать кодировку cp1251
У меня КОИ8, и всё работает на ура. Даже не слышал о проблемах с кириллицей.

unixfun комментирует...

Из рассмотренных оболочек (jabref,kbibtex,kbib) мне больше всего понравился kbib -- нативное kde приложение, в последних версиях умеет делать поиск по библ. базам журналов и google scholar
Хотя, конечно, это дело вкуса

virens комментирует...

2 unixfun пишет...

Из рассмотренных оболочек (jabref,kbibtex,kbib) мне больше всего понравился kbib
Да, но в стейбле его нет, а при сборке он просит поставить кучу библиотек и хидеров :-)

jabref использую исключительно из инерционных соображений (попробовал - устраивает - ну и ладно :-))

умеет делать поиск по библ. базам журналов и google scholar
Обычно нужно просто добавить или найти библиографическую ссылку.

Хотя, конечно, это дело вкуса
Кстати, о kbib я не знал. Так что спасибо, что зашли и поделились.

Unknown комментирует...

referencer тоже приятная утилита.

Анонимный комментирует...

А насколько это вобще оправдано. Пока будешь все это настраивать, статью можно написать.

Анонимный комментирует...

Очень оправданно.
Для создания bib файлов я пользуюсь каталогизатором Tellico, из категории kde-misc(gentoo). Суть полезной для меня части данного приложения: после прочтения (ознакомления) статьи добавляю её в базу (занимает меньше минуты), добавляю какие-то свои комментарии, если надо. В итоге когда надо обратиться к статье под руками база в достаточно удобном виде с достаточно мощным поиском по ней. А при необходимости командой file->export создаётся bib файл.
О том, как просто можно вставить его в TeX документ уважаемый virens уже написал.

Борис

Анонимный комментирует...

Молодец, что jabref упомянул!

Недавно его попробовал — классная штука. До этого набирал .bib-файлы вручную. Большая разница.

Анонимный комментирует...

Только один вопрос: случайно не знаешь способа «подружить» BiBTeX с UTF-8?

Именно из-за того, что bibtex с utf-8 нормально не работал, мне пришлось набирать в своё время диссер в однобайтной кодироке…

Может уже починили?

virens комментирует...

2 Alexey пишет...
referencer тоже приятная утилита.
Спасибо, глянем.

2 Анонимный пишет...
А насколько это вобще оправдано.
Для документов больше 10-15 страниц со ссылками на литературу - BibTeX это стандарт. Иначе сразу в петлю.

Пока будешь все это настраивать, статью можно написать.
Так ничего настраивать не нужно. Читаем это до просветления.

2 Борис пишет...
Для создания bib файлов я пользуюсь каталогизатором Tellico
Надо тоже будет посмотреть. А то JabRef со своей явой уже надоедает тормозить :-)

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

2 sovety пишет...
Молодец, что jabref упомянул!
Так я ж им только и пользуюсь. Хотя вот выше в комментариях упоминают другие утилиты. Надо будет их попробовать на досуге.

До этого набирал .bib-файлы вручную. Большая разница.
Это сурово :-) Хотя и не намного, но набивать базу в программе быстрее. И куда удобнее.

Только один вопрос: случайно не знаешь способа «подружить» BiBTeX с UTF-8?
Не знаю. Я придерживаюсь старой поговорки "не сломалось - не чини". У меня исторически везде КОИ8, и менять пока не собираюсь.

Может уже починили?
Дебианщики клялись, что Этч весь в доску ЮТФ8. Скорее всего, в texlive починили. Но я до сих пор сижу в танк.. на tetex и потому не в курсе :-)

Анонимный комментирует...

В России всё же `\bibliographystyle{gost71s}` :-)

С UTF-8 там можно сработать — `bibtex8 -B ${DOCNAME}`

Magik комментирует...

2virens

Настоятельнейшим образом советую попробовать http://www.citeulike.org. Это место для хранения ссылок в онлайне. Причём не только ссылок но и пдэфок статей. Для импорта и экспорта записей используется бибтексовский формат.
Очень радует способ добавления статей в базу - переходишь на сайт издателя, выбираешь статью и жмёшь на букмарклет для файрфокса - статья в твоей базе :)

Simon Zambrovski комментирует...

После того как ссылки написаны в BiBTeX формате, есть куча приложений как их можно использрвать. Нароимер для Wordpress-а и для Dokuwiki есть замечательные плагины, которые я использую так http://simon.zambrovski.org/research/

Анонимный комментирует...

Кажется, gost71u не работает с UTF-8: в bbl-файле получается \BibEmph{Фамилия~[не UTF-8 символ вместо инициалов]}; с KOI8-R все нормально. Может кто-нибудь знает, где взять исправленную версию (желательно под Debian/Ubuntu)?

Не подскажете, как unsrt заставить печатать "стр." вместо "pages" (в bib-файле pages = {1-101}, language={russian}, но проверки языка в unsrt.bst просто нет)?

Кстати, а можно ли как-нибудь самостоятельно использовать bibitem? Cкажем, сделать свой маленький независимый список "Рекомендуются для подробного изучения" внутри статьи?

Анонимный комментирует...

Отвечаю на первый свой вопрос (gost71u не работает с UTF-8) - вот такой патч позволяет работать с UTF-8:
--- gost71u.bst 2006-01-09 06:33:43.000000000 +0600
+++ gost71u-utf8.bst 2008-08-03 16:34:40.000000000 +0700
@@ -525,7 +525,7 @@
numnames 'namesleft :=
{ namesleft #0 > }
{ s nameptr
- "{vv~}{ll}{~jj}{~f.}" format.name$ 't :=
+ "{vv~}{ll}{~jj}{~ff}" format.name$ 't :=
nameptr #1 >
{
nameptr #4 =
@@ -562,12 +562,12 @@
numnames 'namesleft :=
{ namesleft #0 > }
{ s nameptr
- "{f.}{~vv}{~ll}{, jj}"
+ "{ff}{~vv}{~ll}{, jj}"
format.name$ 't :=
nameptr #1 >
{
nameptr #4 =

Zio комментирует...

давно в восторге от БибТеха. Единственное, что до сих пор не смог понять - есть ли "обновленные" стандартные типы записей. Лично мне не хватало типов "патент" и "электронный ресурс" - пришлось их под себя самому писать. И, естественно, обозначения элементов я вводил свои, соответственно, поделиться своей базой я уже с коллегами могу только вместе со стилевым файлом.

Может я заизобретался "велосипедов"?

Анонимный комментирует...

Есть вопрос, напрямую к БиБТеху не относящемуся.

Есть ссылка. Одна ссылка.

Когда пишу в русский журнал, выглядит так:
Пупкин. Статья. Журнал1.

А в иностранный:
Pupkin. Article. Journal1.

Так вот: как отразить такое. Вести разные базы. И подрубать одну для русских публикаций, а вторую для иностранных? Или можно в БиБТехе сделать title_en, title_ru, а при вставки библиографии флагами задавать, какой вариант использовать???

Unknown комментирует...

Начал использовать BibTeX. Для диплома библиография должна быть по ГОСТу. В gost71u нет правил для оформления патентов. Можно ли как-то решить эту проблему (другой стиль, допилить этот)?

Анонимный комментирует...

может кто встречался со следующей проблемой: в скомпонованном файле меняется порядок авторов статьи. Как с таким бороться? Спасибо.

Анонимный комментирует...

Доброе время суток! Проблема в следующем:
1. база данных библиографии набрана в UTF-8 (почти всё кириллица - русский+украинский);
2. стилевой файл библиографии - gost780uv с одной удалённой литерой "f" для правильного отображения инициалов авторов (база набиралась специально под этот стиль);
3. при компиляции ЛаТеХ-кода в PDF bibtex добавляет перед длинными тире в библиографии двойные кавычки

Система - Debian, версия ЛаТеХа - TeX Live 2009/Debian

Сергей комментирует...

Спасибо! Часто пользуюсь тем, что выучил на Вашем блоге и часто забываю поблагодарить! Спасибо за Ваш труд!

Unknown комментирует...

У меня была проблема с кириллицей при использовании класса G7-32, BiBTex вылетал с ошибкой. Решилось введением параметра language={russian} в bib-файле, тогда в bbl получалось поле \selectlanguageifdefined{russian} и все проходило. Кодировку надо действительно koi8-r.
Я использую не JabRef, а отличнейшую программу Citavi. Там можно комменты писать к статьям, да и не только. Ставится под wine, у меня осталась с винды подаренная лицензия, но есть и бесплатная, с ограничением на 100 источников, что ИМХО очень много.

virens, спасибо и будьте здоровы!

Отправить комментарий

Подписаться на RSS-ленту комментариев к этому посту.