Prosty makefile dla LaTeX

Make, jak wiadomo, potrafi zautomatyzować wiele operacji związanych głównie z kompilowaniem oprogramowania. Ale nie tylko. Make (z pewnymi zgrzytami) można wykorzystać do budowania dokumentacji LaTeX.

Cały problem polega na specyfice make, które rekompiluje projekt w oparciu o daty modyfikacja jego składowych (gdy są nowsze niż końcowy plik). No i trochę na specyfice LaTeX, które generuje mnóstwo plików pomocniczych nie będących bezpośrednio zależnościami.

Bez owijania w bawełnę:

OPTS=-recorder -file-line-error -halt-on-error -interaction=errorstopmode -shell-escape 
PDFLATEX=@nice -n 19 pdflatex

default: all

clean:
        @rm -vf *.toc *.idx *.out *.aux *.ind *.ilg *.pdf *~ *.log *.fls *.rtf *.dvi
        @echo "CLEAN"

%.pdf : %.tex 
        ${PDFLATEX} ${OPTS} $< 
        ${INDEX} $* 
        @echo "pass2" 
        ${PDFLATEX} ${OPTS} $< 
        @echo "pass3"
        ${PDFLATEX} ${OPTS} $< 

moje_testy: plik1.pdf plik2.pdf

dokumentacja: dokumentacja.pdf testy.pdf

all: dokumentacja moje_testy

Jak się tego używa? Po pierwsze musimy ustalić jak nazywa się nasz plik dokumentacji. Dajmy na to że jest to plik.tex. pdflatex zrobi z niego plik.pdf. Robimy do pliku wpis

plik : plik.pdf

i ... w sumie tyle :] Teraz wystarczy tylko

make plik

i tworzy się dokumentacja.

Resztą zajmie się regułka zapisana w liniach

%.pdf : %.tex 
${PDFLATEX} ${OPTS} $<
${INDEX} $*
@echo "pass2"
${PDFLATEX} ${OPTS} $<
@echo "pass3"
${PDFLATEX} ${OPTS} $<


Która robi kolejno :


  • pdflatex na pliku .tex

  • makeindex na pliku .ind

  • dwa razy pdflatex na pliku .tex

Dlaczego trzy razy pdflatex ? Jest to konieczne w sytuacji gdy używamy tabelek w dokumentacji oraz indeksu (generowanego przez makeindex z pliku utworzonego po pierwszym przebiegu pdflatex), konieczne jest kilka przebiegów pdflatex.

Aby sobie oszczędzić dodatkowe 0.5 sekundy wysiłku można zmodyfikować linijkę :

all: plik

co poskutkuje tym, że po wpisaniu samego make (bez parametrów) zrobi nam "plik.pdf" .

prosty problem z sql, a jakie schody

Nie tak dawno miałem prosty problem : wypisanie kolumn z wybranych tabel wraz z typami i ew. dodatkowymi informacjami (czy da sie nullowac) :
Wiem ze na oracle mozna sobie w pl/sql developer puscic describe na tabelce, a w psql wpisac \d tabelka i szybko dostac wynik. Mi chodzi o rozwiazanie reczne ktore mozna
- wykonac na ~150 tabelach w krotkim czasie
- sformatowac recznie (kolejnosc kolumn itp)
- wykorzystac jako podzapytanie

postgresql:

SELECT 
        n.nspname||'.'|| c.relname as tabela, 
        a.attname as kolumna,
        pg_catalog.format_type(a.atttypid, a.atttypmod) as typ,
        a.attnotnull as null
    FROM 
        pg_catalog.pg_attribute a,
        pg_catalog.pg_class c
    LEFT JOIN 
        pg_catalog.pg_namespace n
    ON 
        n.oid = c.relnamespace
    WHERE
        c.relname = lower('TABELKA') AND 
        pg_catalog.pg_table_is_visible(c.oid) and 
        a.attrelid = c.oid AND 
        a.attnum > 0 AND 
        NOT a.attisdropped
    ORDER BY a.attnum 

oracle :

SELECT t.tablename,t.columnname,c.comments,
case
when t.datatype like '%CHAR%' then
t.data
type || '(' || t.datalength || ')'
when
t.data
type like '%DATE%' then
t.datatype
else
t.data
type || '(' || t.dataprecision || '.' || t.datascale || ')'
end as typ
from usertabcols t, usercolcomments c
where t.tablename=c.tablename
and t.columnname=c.columnname
and t.table_name ='tabela'

Wersja postgresql pokazuje poza nazwą, schematem i typem czy kolumna moze byc null, za to wersja oracle pokazuje komentarze do kolumn. Schemat inny niz public w wersji postgresql (jeszcze) nie działa :)

Pisanie pierwszego skryptu zajęło ponad godzinę. Drugiego - ~20 minut.

Postgresql jest szalenie skomplikowany w tym nieszczególnie wymyślnym przypadku, bo trzeba przebic sie przez mnostwo niskopoziomowych (i niezbyt obszernie opisanych) procedur, aby osiagnac cel. I tak dobrze, ze chociaz takie pgcatalog.formattype istnieje, inaczej już dawno bym się poddał . I tak podejrzewam że znajdzie się ktoś kto zrobi to w 3 linijkach, prościej i bardziej elegancko :]

btw. pierwszy wpis w nowym roku ;)

Dlaczego otwarte sterowniki graficzne są potrzebne - nowy powód

Niektorzy zapewne wiedza ze producenci kart graficznych "podkrecaja" swoje sterowniki tak, aby jak najkorzystniej wypadly w testach porownawczych z modelami konkurencji. Jest to im zarzucane bardzo często.

Wczoraj dowiedzialem sie jednak czegos co mnie kompletnie zaskoczylo. Jeden z programistów otwartego sterownika dla kart ati, pracującego nad nowym kodem 3d dla tych kart; opartym na Gallium, napisal ze karty radeon serii r500 (generalnie modele x1xx) nie maja pelnego wsparcia dla opengl 2.0.

Generalnie wszyscy piszą o tym że karty te oferują wsparcie dla opengl 2.0 (a nawet czasami 2.1)

KLIK

Dave, Nicolai, and I, talked about NPOT. In a nutshell, we can do rectangles but not NPOT, which technically means that full HW-accelerated GL 2.0 is not possible on r500. So, why does fglrx advertise it anyway? Simple. fglrx lies and advertises GL 2.0 (for the GLSL entrypoints) without actually advertising the NPOT extension. Bad fglrx, bad. Jakob and I are thinking that we'll either write out fallbacks in the state tracker, or we'll just lie like fglrx. One of the two.

W skrócie oznacza to że sterownik (przynajmniej ten linuksowy) napisany przez ati zgłasza obsługę funkcji 3d których sprzęt nie potrafi obsłużyć. Funkcje te należą do standardu opengl 2.0.

Ciekawe ile jeszcze takich niespodzianek kryją sterowniki dla innych rodzajów sprzęŧu? Sam mam taką kartę grafiki i prawdę mówiąc czuję się lekko oszukany.

kazdy chce być hardkorem

Tak każdy chce być hardkorem. Dlatego spróbowałem po swojemu i zainstalowałem sobie gentoo na amd64, bez multilib.

Czytaj dalej...

Kodak Easyshare c180 a linux

Niedawno mój inwentarz domowej elektroniki wzbogacił się o tanią i prostą cyfrówkę z tytułu. Mam ją dopiero ~tydzień a już dała mi wycisk.

Ale po kolei

Czytaj dalej...

moje boje z ac97

mam w pracy bardzo specyficzny komputer. na którym jest zintegrowana karta audio. Niby nic dziwnego, ale ta karta jest, że tak powiem, "zero-jedynkowa" - albo audio jest (max. głośność) albo go nie ma. Nie da się ustawić np na 50% głośności.

Czytaj dalej...

pomysłowy trolling na lkml

http://lkml.org/lkml/2009/6/1/301 – rozumiem że na każdej mailingliście trafia się spam, albo troll. Albo jakiś świr. Ale to co tutaj znalazłem to klasa sama w sobie :]


Podejrzewam że to kolejna odsłona wojenki linux – openbsd :]

Libre.fm

Od wczoraj zaczalem kombinowac ze stroną libre.fm.

W sumie jest to strona o takim samym przeznaczeniu co last.fm. Z wyjątkiem tego że jest darmowe, w stanie alpha, oraz wykorzystuje ten sam protokół scrobblowania utworów. No i cały kod strony jest otwarty i dostępny – w ten sposób każdy może postawić sobie własną stronę tego typu, mając serwer z php oraz bazą danych.

Na razie udało mi się scrobblować dane na stronę klientem mpdas. Efekt widać tutaj

Dostęp do strony na razie jest poprzez zaproszenie (które jest obecnie zablokowane), ale myślę że to się wkrótce zmieni.

Pandoc – narzedzie do konwersji plików tekstowych

Dzisiaj przypadkiem odkryłem programik o nazwie pandoc. Potrafi on konwertować pliki z różnych formatów między sobą, np latex, markdown, html, „goły” txt, w praktycznie każdej kombinacji.


Szczególnie ciekawa jest możliwość łatwego skonwertowania gołego tekstu do latex lub, coraz bardziej mnie interesującego formatu Markdown.


Link do strony projektu – KLIK. Z tego co widzę programik jest dostępny w AUR archlinuksa, być może dla innych dystrybucji też się znajdzie.


Niestety takie konwertery na ogół wykładają się na „ambitniejszych” konstrukcjach w LaTeX (jak niektóre stosowane u mnie), więc przydatne będą dla ludzi piszących prostszą dokumentację lub krótkie notki. Programik na pewno przyda się początkującym użytkownikom Markdown lub LaTeX, oraz tym którzy nigdy nie pamiętają jak się pisze podstawowy nagłówek dokumentu (ja też nigdy nie pamiętam).

Zakładam tu, że pandoc jest w miarę stabilny na prostych plikach, bo przetestowałem tylko kilka prostych przykładów.

dwie klawiatury – dwa układy klawiszy

Czesi mają przesrane. Ich układ klawiatury jest taki, że zamiast 1234567890 na górnym rządku klawiszy wychodzą ich czeskie znaczki. W przypadku gdy komputer z czeskim układem klawiatury korzysta z czytnika kodów kreskowych – pojawia się wyzwanie dla kogoś kto taki komputer konfiguruje.

Czytaj dalej...