DVI (plik TeX)
DVI (ang. device independent) – format pliku wynikowego w programie wydawniczym TeX. W przeciwieństwie do plików ze znacznikami TeX, pliki DVI nie są przeznaczone do czytania przez użytkownika; zawierają dane binarne opisujące wizualny układ dokumentu w sposób niezależny od specyficznego formatu graficznego, monitora czy drukarki.
Pliki DVI są przetwarzane przez sterownik DVI (DVI driver) na format graficzny akceptowany przez urządzenia wyjściowe. Dla przykładu, większość pakietów TeX zawiera program do podglądu plików DVI na monitorze komputera – program taki jest sterownikiem (ang. driver). Sterowniki są też używane do przetworzenia DVI na popularne formaty dokumentów (np. PostScript, PDF, HTML) i do drukowania. Wikipedie używają sterownika PNG do generowania plików graficznych z matematycznych formuł używanych w artykułach.
Pliki DVI opisują dwa rodzaje monochromatycznych obiektów graficznych: znaki oraz wypełnione prostokąty. Jednakże istnieje możliwość osadzania w DVI dowolnych danych binarnych, za interpretację których odpowiada sterownik; w ten sposób na przykład dodawane są kolory do tekstu, informacje o odnośnikach (wykorzystywane przy tworzeniu dokumentów PDF i HTML), fragmenty kodu Postscriptu i inne. W systemie TeX istnieje specjalna instrukcja pozwalająca autorowi umieszczać tego typu dane – nie są potrzebne żadne dodatkowe programy.
DVI nie jest szyfrowany i znaczniki TeX mogą być przynajmniej częściowo odtworzone z plików DVI za pomocą inżynierii wstecznej, jednak proces ten nie daje gwarancji idealnie wiernego odtworzenia pierwotnych znaczników, zwłaszcza gdy użyte zostały rozszerzenia TeX wysokiego poziomu, jak LaTeX. Wydawcy, którzy opierają się na systemach TeX, oprócz DVI wymagają zwykle także dostarczania plików źródłowych ze znacznikami.
Struktura DVI
Format został zaprojektowany tak, aby zarówno tworzenie plików, jak i odczyt były łatwe do zaprogramowania, samo zaś tworzenie obrazu polega na interpretacji poleceń bardzo prostej maszyny wirtualnej wykonującej działania na liczbach całkowitych. Rozmiar pliku DVI zawsze jest wielokrotnością 4 bajtów.
Zdefiniowane jest 25 instrukcji, z czego większość występuje w kilku formach, w zależności od rozmiaru argumentu liczbowego. Instrukcje są zakodowane w jednym bajcie, natomiast liczby mogą być 1-, 2-, 3- i 4-bajtowe (zawsze zapisywane w porządku big endian, jeśli ujemne – zapisane w kodzie uzupełnień do 2).
Najprostszy sterownik DVI wymaga niewielkiej liczby struktur danych:
Aktualne parametry maszyny to 6 liczb:
- bieżący punkt (H, V) – odległość od lewego górnego rogu strony (H – ang. horizontal, V – ang. vertical)
- X – przyrost w osi X
- W – przyrost w osi X
- Y – przyrost w osi Y
- Z – przyrost w osi Y
Lista instrukcji
- rysowanie:
fnt_deflista argumentów – definicja fontu – sterownik ładuje wskazany font i przypisuje mu identyfikator liczbowyfnt_numidentyfikator – ustawia bieżący font (podawany jest identyfikator uprzednio zdefiniowanego fontu)put_charnumer znaku – stawia na pozycji (H,V) znak z bieżącego fontu; ponieważ numer może być 32-bitową liczbą naturalną, więc liczba różnych znaków w jednym foncie jest ograniczona do 4 miliardówset_charnumer znaku – jw., dodatkowo przesuwa w prawo bieżący punkt o szerokość postawionego znakuput_rulewysokość, szerokość – wypełnia prostokąt o wskazanych wymiarach na pozycji (H,V)set_rulewysokość, szerokość – jw., dodatkowo przesuwa w prawo bieżący punkt o szerokość prostokątaxxxliczba bajtów, dane binarne – dodatkowe dane, których interpretacja zależy od sterownika DVI (ostatecznie mogą zostać całkowicie zignorowane)
- przesuwanie bieżącego punktu w osi X:
rightliczba – dodaje do H liczbęw0– dodaje do H parametr Wx0– dodaje do H parametr Xwliczba – ustawia nową wartość W, dodaje ją również do Hxliczba – ustawia nową wartość X, dodaje ją również do H
- przesuwanie bieżącego punktu w osi Y:
downliczba – dodaje do V liczbęy0– dodaje do V parametr Yz0– dodaje do V parametr Zyliczba – ustawia nową wartość Y, dodaje ją również do Vzliczba – ustawia nową wartość Z, dodaje ją również do V
- pozostałe:
push– zapamiętuje parametry na stosiepop– odtwarza parametry ze stosubop– znacznik początku strony (stos jest pusty, wszystkie parametry są zerowane, nie ma ustawionego fontu)eop– znacznik końca stronynop– nic nie robi
- dokument:
pre– preambuła dokumentu, w której podawane są: jednostka strony, współczynnik powiększenia oraz komentarzpost– epilog dokumentu; za tym znacznikiem znajduje się lista wszystkich fontów zdefiniowanych w całym dokumencie – dzięki temu interpreter może od razu załadować je wszystkie i ewentualnie poinformować użytkownika o brakujących fontach, bez konieczności przetwarzania całego dokumentupost_post– znacznik końca listy fontów za znacznikiempost
Linki zewnętrzne
- Opis formatu DVI. math.umd.edu. [zarchiwizowane z tego adresu (2009-06-28)].