## DVIDVI

autor: Maciej Głowacki

`DVIDVI` jest programem sygnowanym przez Radical Eye Software (co w praktyce oznacza autorstwo Tomasa Rokickiego). Program ten, operując na pliku typu DVI wybiera strony, zmienia ich wzajemne położenie i pozycjonuje na arkuszu druku.

### Format:

    d:p1[(x1,y1)][,p2[(x2,y2)]]...[,pn[(xn,yn)]] fi fo

gdzie:

  nawiasy kwadratowe oznaczają nieobowiązkowe użycie tego co zawierają;
  odstępy, nawiasy okrągłe i przecinki są konieczne w kontekście;
`d`
  dzielnik (modulo); liczba dodatnia z zakresu 1 do 32, określająca rozmiar porcji (w stronach), na jakie zostanie podzielony plik wejściowy;
`p`
  pozycja; liczba określająca pozycję strony w ramach porcji (pierwsza strona w porcji jest określana liczbą 0, a więc najwyższa możliwa pozycja to `d`-1); gdy liczba ta jest poprzedzona znakiem '-', w przetwarzaniu brane będą pod uwagę porcje w odwrotnej kolejności, czyli począwszy od ostatniej (nie znaczy to że liczba jest ujemna!); w szczególności więc możliwy jest zapis '-0' znaczący co innego niż '0'; można określić pozycje tylko niektórych stron, można też powtarzać specyfikacje tych samych stron (wtedy w pliku wyjściowym te strony pojawią się wielokrotnie);
`x` i `y`
  współrzędna pozioma i pionowa lewego górnego rogu strony z pliku wejściowego na arkuszu pliku wyjściowego; specyfikacja -- tak jak w TeX-u1; gdy `x` i `y` są równocześnie zerowe, można je wraz z nawiasami pominąć;
`fi`
  nazwa pliku wejściowego; rozszerzenie (`.dvi`) można pominąć;
`fo`
  nazwa pliku wyjściowego; w podpowiedzi przy wywołaniu programu z błędnymi parametrami czytamy, że parametr ten można pominąć; jest to nieprawda przynajmniej w używanej przeze mnie wersji 0.5 -- gdy nie zostanie podany ten parametr, pierwsza próba zapisu do tego pliku kończy się zawieszeniem programu, czyli koniecznością restartu systemu (sic!).

### Opis działania

- Program czyta plik wejściowy i dzieli go na porcje o `d` stronach (ewentualnie ostatnia porcja jest uzupełniana pustymi stronami). Następnie zaczyna budować arkusze, tworząc plik wyjściowy.
- Dla każdego tworzonego arkusza zostaje raz użyta każda grupa parametrów `p(x,y)`; kolejność grup w wywołaniu nie ma znaczenia. Arkuszy powstanie tyle, ile zostało utworzonych porcji.
- Dla pierwszego arkusza zostają pobrane -- określone przez kolejne `p` z wywołania -- strony z pierwszej porcji (gdy przed `p` jest '-', to z ostatniej) i umieszczone w pierwszym arkuszu, w miejscu określonym przez odpowiadające im `(x,y)`.
- Dla każdego następnego arkusza pobrane zostają strony z następnej (lub poprzedniej gdy przed `p` jest '-') porcji. I te deum.

### Ograniczenia:

- Program z całego dostępnego pliku produkuje jedną zszywkę. Chcąc więc utworzyć więcej zszywek, należy najpierw plik wejściowy podzielić na mniejsze (o ilości stron takiej, jak pojemność jednej zszywki). Nie znam sposobu, w jaki mógłby to zrobić `DVIDVI`.
- Przy tworzeniu arkuszy zawierających piętrowo umieszczone strony, program nie potrafi ich obracać włosami w dół, a jest to potrzebne gdy trzeba arkusz falcować2, a potem dopiero przycinać; można temu zaradzić na trzy sposoby: --> pociąć najpierw arkusze na poziome pasy o wysokości jednej strony, a potem dopiero falcować; --> wydrukować częściowo strony, obrócić o 1800 i wydrukować resztę po tej samej stronie kartek, jednak wtedy trudno (szczególnie na drukarce laserowej) uzyskać powtarzalność pozycjonowania; --> (najmniej fizyczny) sprzęg z TeX-em: można w obsłudze procesu zrzutu stron (output routine) oprogramować obrót wybranych stron. Oczywiście w każdym z tych trzech przypadków trzeba przygotować inne parametry dla programu `DVIDVI`.

### Przykłady:

- Ekstrakcja:
  `dvidvi` 30:6 we wy (różne od `dvidvi` 5 we wy)
  z pliku `we` do pliku `wy` zostanie przeniesiona 7 strona, pod warunkiem, że ilość stron w pliku `we` nie jest większa niż suma obu użytych w wywołaniu liczb.
- Panie na lewo, panowie na prawo:
  `dvidvi 2:0 we wy1`
  `dvidvi 2:-1 we wy2`
  Jeśli założymy, że plik wejściowy zawierał 27 lub 28 stron, to program poprzestawia je następująco (strzałki unaoczniają machinacje programu `DVIDVI`):

  w pliku `wy1` znajdą się strony nieparzyste, a w `wy2` parzyste, ale w odwrotnej kolejności. W przypadku korzystania z drukarki laserowej wystarczy wypuścić arkusze zadrukowane jednostronnie zawartością pliku `wy1` do odbiornika drukiem w górę (na ogół służy do tego tacka z przodu drukarki), i nie odwracając (tak, by ostatnio wydrukowany arkusz stał się pierwszym drukowanym z drugiej strony) podstawić pod druk zawartości pliku `wy2` (także drukiem w górę).

- Broszurka w A53:
  `dvidvi 4:-3,0(5.5in,0in) we wy1`
  `dvidvi 4:1,-2(5.5in,0in) we wy2`

  Przy założeniu, że na wejściu było od 37 do 40 stron, zostaną one poprzemieszczane i połączone jak niżej (strzałki kropkowane łączą przeciwne strony kartki przyszłej książeczki):

  Jeśli więc w pliku `we` znajdą się strony w formacie A5, to w pliku `wy1` zostaną umieszczone ,,prawe'' strony arkuszy formatu A4, a w `wy2` --- w tej samej kolejności arkuszy --- ,,lewe''. Tym razem należy w pierwszym przebiegu wypuścić arkusze do odbiornika drukiem w dół, po czym cały pakiet odwrócić ,,na grzbiet'' wzdłuż osi równoległej do krótszego boku kartek i tak podstawić do druku z drugiej strony. Dodatkowo po zakończeniu drukowania trzeba arkusze odpowiednio potasować.
- Po tym co napisano powyżej, uważny TeX-nik nie potrzebuje już chyba wyjaśnienia (ewentualnie warto to sobie rozrysować):
  `dvidvi 8:-7,0(4.12in,0in),-5(0in,5.8in),2(4.12in,5.8in) we wy1`
  `dvidvi 8:1,-6(4.12in,0in),3(0in,5.8in),-4(4.12in,5.8in) we wy2`

### Przypisy

1 Z tą zgodnością z TeX-em nie jest tak radośnie. Na przykład nie można pominąć w liczbie cyfry '0' przed kropką dziesiętną. W ogóle p. Rokicki sprawia wrażenie jakby się trochę dąsał na TeX-a --- np. TeX numeruje strony od '1' --- `DVIDVI` od '0'. Natomiast gdy dla TeX-a nie ma jednostki domyślnej, to w `DVIDVI` są aż dwie: jedna to cal, a druga --- mocniejsza --- taka, jakiej użyto wcześniej.

2 Podobno po polsku mówi się: złamywać, ale są także w użyciu słowa: załamywać, składać.

3 Podane w tym i następnym przykładzie wielkości współrzędnych oczywiście ściśle zależą od lokalnych cech środowiska systemowego i parametrów drukarki.

Zredagował: Włodzimierz Macewicz