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;