Author-year citation style is assumed.
If a bibliography is prepared manually it is as easy as to precede
each entry with say \bibAst
command. Example:
\newcommand\bibAst{\leavevmode\hbox to0pt{\hss$^\ast$}} \harvarditem[Bagozzi and Dholakia]{Bagozzi and Dholakia}{2006}{bagozzidholakia06} \bibAst\textsc{Bagozzi, R.~P., {\small and} U.~M. Dholakia} (2006): ``Open Source Software User Communities: A Study Of Participation In {L}inux {U}ser {G}roups,'' \emph{Management Science}, 52(7), 1099--1115.
If one insists on using BiBTeX one has to mark records which are to
be highlighted. It can be done
with an extra field (named highlight
in the example below):
@Article{bagozzidholakia06, title = "Open Source Software User Communities: A Study Of Participation In {L}inux {U}ser {G}roups", author = "Bagozzi, Richard P. and Dholakia, Utpal M.", journal = j-msci, pages = "1099--1115", number = "7", volume = "52", year = "2006", highlight = "Y" }
Fields unknown to BiBTeX's particular style are omitted, so highlight
cause no harm when processed with standard BiBTeX style.
One need to modify BiBTeX style now. This is a two-step procedure.
First one has to add highlight
to the body of ENTRY function:
ENTRY { ... highlight }
Next one has to modify format.authors
function. Exact
form of a format.authors
function is style-dependent.
In case of apalike
the code looks like:
%FUNCTION {format.authors} %{ author empty$ % { "" } % { author format.names } % if$ %} % change to: FUNCTION {format.authors} { author empty$ { "" } { highlight empty$ { author format.names } { "{\bibAst}" author format.names * } if$ } if$ }
BTW: the meaning of some BiBTeX expressions are as follows: S1 S2 * denotes S1 S2 strings concatenation; L F1 F2 if$ denotes logical if (execute F1 if L is true otherwise execute F2).
The contents of highlight
is irrelevant. Sole existence of
highlight
denotes that the record is highlighted.
NOTE: the style should be more elaborate if some BiBTeX entries starts with something other than authors names.
Używam pakietu natbib
ograniczając się do poleceń:
\citet
, \citealt
,
\citep
, \citealp
,
\citeyearpar
oraz
\citetext
.
Poniższy hak powoduje,
że odsyłacze wewnątrz \citet
będą odzielone przecinkiem,
a wewnątrz \citep
-- średnikiem.
(,,Standardowy'' natbib
stosuje jeden ,,globalny'' znak separującego kolejne odsyłacze.)
\documentclass[a4paper]{article} \usepackage{polski} \usepackage[authoryear]{natbib} %%&--- %% http://tex.stackexchange.com/questions/3125/a-comma-separator-for-citet-and-a-semicolon-separator-for-citep-simultaneou \usepackage{etoolbox} \makeatletter \newcommand\bibstyle@comma{\bibpunct(),a,,} \newcommand\bibstyle@semicolon{\bibpunct();a,,} \makeatother \pretocmd\citet{\citestyle{comma}}\relax\relax \pretocmd\citealt{\citestyle{comma}}\relax\relax \pretocmd\citep{\citestyle{semicolon}}\relax\relax \pretocmd\citealp{\citestyle{semicolon}}\relax\relax \begin{document} ...
Sposoby użycia ilustrują poniższe przykłady:
Przeciętna wariancja wyodrębniona (\emph{average variance extracted}, AVE) jest definiowana następująco~\citetext{por.~\citealp[s.~612]{HairetAl98}; \citealp{sztemberg-lewandowska2008}; \citealp[s.~1213--1214]{FornellLarcker81}}:
Przeciętna wariancja wyodrębniona (average variance extracted, AVE) jest definiowana następująco (por. Hair i inni, 1998, s. 612; Sztemberg-Lewandowska, 2008; Fornell i Larcker, 1981, s. 1213--1214):
Tendencje przedstawione przez Orlikowski i~Baroudiego potwierdzają inne przeglądy, por.~\citet{AbareshiMartin2008,RungtusanathamChoiHollingworth2003,NewstedHuffMunro98} oraz \citet{PinsonneaultKraemer1993}.
Tendencje przedstawione przez Orlikowski i Baroudiego potwierdzają także inne przeglądy, por. Abareshi i Martin (2008), Rungtusanatham i inni (2003), Newsted i inni (1998) oraz Pinsonneault i Kraemer (1993).
Model Akceptacji Technologii [...] i~akceptację systemów informacyjnych w~praktyce badawczej informatyki ekonomicznej~\citep{VenkateshEtAl03,VenkateshDavis00}.
Model Akceptacji Technologii (Technology Acceptance Model, TAM) jest najczęściej wykorzystywaną teorią objaśniającą wykorzystanie i akceptację systemów informacyjnych w praktyce badawczej informatyki ekonomicznej (Venkatesh i inni, 2003; Venkatesh i Davis, 2000).
Praktyka badawcza [...] oceniania w~pracach Hensleya~\citeyearpar{Hensley1999} oraz Malhotry i~Grovera~\citeyearpar{MalhotraGrover1998}, a~w~obszarze informatyki ekonomicznej w~pracach: \citet{StraubBoudreauGefen2004,RaiLangWelker2002,BoudreauGefenStraub2001,Straub89} oraz~\citet{NewstedHuffMunro98,GefenStraub2005} a~także \citet{Segars1997}
Praktyka badawcza ustalania trafności w dziedzinie nauk o zarządzaniu jest z kolei oceniania w pracach Hensleya (1999) oraz Malhotry i Grovera (1998), a w obszarze informatyki ekonomicznej w pracach: Straub i inni (2004), Rai i inni (2002), Boudreau i inni (2001), Straub (1989) oraz Newsted i inni (1998), Gefen i Straub (2005) a także Segars (1997).
Konwencję sobie przyjąłem, że pole tp:keywords
zawiera
moje słowa kluczowe. Czemu tak? Ano temu, że moja baza bibtexa
zawiera wpisy skopiowane z różnych repozytoriów; wpisy te zawierają
pole keywords
, tyle że nie ma żadnych reguł odnośnie
tego co jest zawartością tego pola. Zawartość pola tp:keywords
jest (przynajmniej w założeniu)
słownikiem ustalonym (controlled vocabulary) pojęć. Podobnie
pole tp:comment
zawiera mój, krótki opis zawartości pozycji
bibliograficznej. W szczególności pola te pomagają posortować/wyciągnąć
pozycje bibliograficzne, relewantne z punktu widzenia określonej
dziedziny zastosowań. Używam do tego narzędzia bibtool
:
bibtool -- 'select {tp:keywords "OSS" }' tph.bib
Powyższe oznacza: wypisz wszystkie rekordy z pliku
tph.bib
, które zawierają napis OSS
w polu tp:keywords
. Napis "OSS"
jest traktowany
jako wyrażenie regularne (regex 0.12):
bibtool -- 'select {tp:keywords "OSS\|UTAUT" }' tph.bib
Powyższe oznacza: wypisz wszystkie rekordy z pliku
tph.bib
, które zawierają napis OSS
lub napis UTAUT
w polu tp:keywords
.
Wyrażenie regularne może zawierać inne metaznaki:
.
, +
,
*
, itd. Jest znak sumy (a lub b) ale nie ma
iloczynu (a i b). Jeżeli chcemy wyciągnąć rekordy
zawierająca łącznie pewne napisy, to można wykorzystać mechanizm
potoku:
bibtool -- 'select {tp:keywords "#Prio" }' tph.bib |\ bibtool -- 'select {tp:keywords "OSS" }' | \ bibtool -- 'select {tp:keywords "SEM" }'
Powyższe oznacza: wypisz wszystkie rekordy z pliku
tph.bib
, które zawierają napisy OSS
,
SEM
oraz #Prio
(w dowolnym porządku) w polu
tp:keywords
. Słowo kluczowe #Prio
to moja konwencja na oznaczenie ważnych wpisów.
Innymi słowy powyższe oznacza: wypisz ważne pozycje literatury
dotyczące (łącznie) OSS i SEM.
Do zamiany plików bibtexa na xhtml używam
narzędzia
bib2xhtml
.
Ten pakiet jest niestandardowy -- z tego co pamiętam -- trzeba go ściągnąć i zainstalować
samodzielnie...
Moja baza bibtexa zawiera kilkaset wpisów, dotyczących różnych dziedzin i o różnym stopniu ważności (od merytorycznie istotnych do słabych; słabe też trzeba gromadzić--np. jako przykłady). Stąd powyższe pomysły, żeby trochę nad tym wszystkim zapanować...
Modyfikując bib2xhtml
, który jest programem napisanym w Perlu,
zmarnowałem trochę czasu usiłując
dodać konwersję (brakujących) polskich znaków diakrytycznych.
Otóż bib2xhtml
zakłada iż plik jest kodowany w notacji LaTeXa (7 bitowe ASCII), przy czym nie
są zaimplementowane znaki zawierające ogonek. Proste wpisanie:
s/\\k\{a\}/ą/g;
Nie chciało zadziałać. Po bliższym obejrzeniu skryptu się okazało, że każdy wiersz pliku jest wstępnie zamieniany poprzez wykonanie następującego polecenia:
## fragment jest wykonywany wew. pętli, `iterującej' po wszystkich wierszach pliku: { local ($c, $l, $z) = (0, 0, ()); s/([\{\}])/join("","\001",($1 eq "\{" ? $z[$l++]=$c++ : $z[--$l]),$1)/ge; ## ge oznacza, globalnie+extended mode, dzięki czemu powyższe ma charakter pętli ## wykonywanej dla każdego znaku { oraz } }
W rezultacie każda sekwencja {...}
zostanie zamieniona na
\nnn{...\nnn}
, gdzie \nnn
jest znakiem o kodzie nnn
.
Przykładowo jeżeli wiersz zawiera:
{abc} {def} {ghi} jkl... => \001{abc\001} \002{def\002} \003{ghi\003} jkl...
Dzięki czemu każda para { ... }
jest teraz jednoznacznie identyfikowana.
Dokładnie nie wiem po co jest taka sztuczka robiona. Ale teraz
zamiana przykładowo \k{a}
, tj.~polskiego ą
w notacji LaTeXa, wymaga zapisu:
s/\\k(\001\d+)\{a\1\}/ą/g;
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:
natbib
,
hyperref
z opcją breaklinks
, oraz
\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.
Opisany wcześniej skrypt
uruchamiam ,,spod'' Emacsa działającego w trybie BibTeX
.
Konkretniej poniższa funkcja bibtex-adjust-pdf-filename
pobiera wartości pól author
,
title
, year
oraz tp:keywords
, a następnie
przekazuje te wartości w postaci argumentów ww. skryptu uruchamianego jako
polecenie systemowe.
Mam nadzieję dzięki temu mieć większy porządek w przechowywanych dokumentach pobranych
z różnych archiwów elektronicznych.
(defun bibtex-adjust-pdf-filename (file) "Dla bieżącego rekordu bibtexa modyfikuje plik zawierający relewantny dokument PDF (dodaje co trzeba do słownika Info oraz modyfikuje nazwę). Oryginalna nazwa pliku PDF jest podana z minibufora. Modyfikacja jest dokonywana przez zewnętrzny skrypt. Cała ta procedura jest po to żeby można łatwiej później odszukać plik na dysku...." (interactive "fNazwa pliku: ") (save-excursion (bibtex-beginning-of-entry) (let* ( (author (bibtex-text-in-field "author")) (year (bibtex-text-in-field "year")) (keywords (bibtex-text-in-field "tp:keywords")) (title (bibtex-text-in-field "title")) (command (format "%s -rename -f \"%s\" -t \"%s\" -a \"%s\" -k \"%s\" -y \"%s\"" (executable-find "pdf_set_info.pl") ;; script name (expand-file-name file) title author keywords year)) ) (progn (shell-command command) (previous-line) (beginning-of-line) (insert (concat "%% patched with pdf_set_info.pl %%" ))))))
Przy okazji namiar na bloga anonimowego użytkownika Emacsa zawierającego parę ciekawych rzeczy.