piątek, 27 lutego 2009

Cytowanie według schematu autor-rok z użyciem Bibtexa i pakietu natbib

Przywołania bibliograficzne to odsyłacze do wykazu literatury [w odróżnieniu od przypisów bibliograficznych, czyli przypisów zawierających podstawowe elementy identyfikujące przywoływany dokument. Przypisy są ,,modne'' w tekstach humanistycznych i prawnych oraz wśród ,,akademickich moherów'' z innych branż]. W LaTeXu standardowym sposobem cytowania jest ,,poprzez numer'', pod którym dana pozycja jest umieszczona w zestawieniu literatury.

W wielu dziedzinach nauk obowiązującym zwyczajem jest oznaczanie przywołań przy pomocy umieszczonego w nawiasach okrągłych lub kwadratowych nazwiska autora/autorów oraz roku wydania, np. (Knuth 1985). Aby przestawić LaTeXa na taki sposób tworzenia przywołań bibliograficznych należy:

  • dołączyć pakiet natbib,
  • dołączyć pakiet hyperref z opcją breaklinks, oraz
  • Dołączyć odpowiednie polecenie \bibliographystyle.

\usepackage{natbib}
\usepackage[breaklinks]{hyperref}
\bibliographystyle{papalike} %% spolonizywany style apalika.bst
\begin{document} %% albo standardowy \bibliographystyle{plainnat}

Bez breaklinks LaTeX nie złamie wiersza w obrębie przywołania, co w przypadku dużej ich liczby będzie skutkować dużą liczbą sterczących na prawym marginesie fragmentów nieprzeniesionego prawidłowo tekstu.

Polecenie \bibliographystyle{papalike} określa styl bibliograficzny. Tu jest problem, bo większość stylów nie jest spolonizowana. Wyżej podany papalike, to ,,na szybko'' spolszczony plik apalike (Dostępny tutaj). Teraz należy uruchomić poniższy wiersz (dla pewności dwa razy:-):


pdflatex plik.tex && bibtex plik

Z rozpędu dodałem opcję definiowania przywołań bibliograficznych do wzmgr.

A jeżeli publikacja nie ma daty wydania, np. strona WWW bez daty publikacji, to zgodnie z zaleceniami APA: The initials n.d. should be listed if there is no date. Po polsku zamiast n.d. wstawiam bdw (brak daty wydania), np. (Ajzen, bdw).

Dopisane 28 Lutego 2009: Pakiet hyperref można wywołać z opcją backref, albo pagebackref co skutkuje tym, iż w spisie literatury pojawią się przy każdej tzw. pozycji literaturowej numery stron, na których owa pozycja jest przywoływana (przydatne na etapie pisania pracy oraz w przypadku dokumentu w wersji elektronicznej (przykład -- zobacz spis literatury w pliku mgr-main.pdf)).

Teraz uwaga: powyższe nastawy nie zawsze działają. Nie rozgryzłem tematu do końca ale: klasy Marcina Wolińskiego wydają się nie być kompatybilne z natbib. Kompilacja kończy się błędami `\inaccessible' na etapie przetwarzania spisu literatury. W google jest coś na rzeczy tutaj. Wprawdzie większość wątku jest mało konkretna, ale sugestia J. Kew wydaje się prawdopodobna: I think there's an incompatibility between your use of \leftmark in the header, and whatever (the bibliography style?) is supposed to be producing the \mark's.

Pakiet natbib testowany z innym tekstem spowodował też inny błąd: w przypadku podzielenia przywołania pomiędzy stronami link z strony poprzedniej nie kończy się na brzegu ostatniego wiersza ale obejmuje także ewentualne przypisy, ew. paginę dolną oraz paginę górną następnej strony (Oczywiście usunięcie breaklinks z listy opcji pakietu hyperref usunęłoby problem ale wprowadziło inny jednocześnie.)

Najśmieszniejsze, że mam dwa wydaje się identyczne dokumenty, w których w jednym taki błąd występuje a w drugim jest OK. Już nie jest śmiesznie -- dodałem więcej tekstu do dokumentu, który był OK i stał się KO (por. strona 17 w pliku mgr-main.pdf). Coś mi dzwoni, że tego typu efekt może wynikać z ograniczeń TeXa, który najpierw składa akapity a potem łamie strony. Skąd biedak ma wiedzieć, że akurat w tym wierszu skończy mu się strona... Anyway -- zadałem pytanie na GUST-l bo może się mylę.

Dopisane 2 Marca 2009: Limitation of pdfTeX napisał Heiko Oberdiek w odpowiedzi na moje pytanie na comp.text.tex. Niestety to potwierdza, że mi dobrze dzwoniło...

Dopisane 6 Kwietnia 2010: O jednej rzeczy w tym wszystkim zapomniałem. Mianowicie polecenie składające zawartość \cite{...} wygląda następująco (plik latex.ltx):


\def\@citex[#1]#2{\leavevmode
\let\@citea\@empty
\@cite{\@for\@citeb:=#2\do
{\@citea\def\@citea{,\penalty\@m\ }%
\edef\@citeb{\expandafter\@firstofone\@citeb\@empty}%
\if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi
\@ifundefined{b@\@citeb}{\hbox{\reset@font\bfseries ?}%
\G@refundefinedtrue
\@latex@warning
{Citation `\@citeb' on page \thepage \space undefined}}%
{\@cite@ofmt{\csname b@\@citeb\endcsname}}}}{#1}}

Ostatni wiersz jest istotny. Magiczne \@cite@ofmt jest zdefiniowane trochę dalej jako:


\let\@cite@ofmt\hbox

Co oznacza, że każde odesłanie bibliograficzne ,,jest brane'' w pudełko i nie ma szans, żeby się odsyłacz przełamał nawet z aktywną opcją breaklinks. Wystarcz jednak wpisać:


\let\@cite@ofmt\relax

Żeby odsyłacz nie był składany w pudełku (ze wszystkimi tego konsekwencjami, negatywnymi też). Albo mam za starego/błędnego hyperrefa, albo jest jakaś opcja, której nie znam albo jeszcze coś innego. U mnie samo wywołanie pakietu hyperref z opcją breaklinks nie przełamuje odsyłaczy, z wyżej opisanego powodu.

Brak komentarzy:

Prześlij komentarz