Zgryźliwość kojarzy mi się z radością, która źle skończyła.









Rozdział 17.
groff









E:\Moje dokumenty\HELION\Linux Unleashed\Indeks\17.DOC              313









Rozdzia³ 17. ¨ groff              313

Tim Parker

W tym rozdziale:

u                                             Osadzanie poleceń             

u                                             Określanie wyglądu znaków             

u                                             Makropolecenia             

u                                             Zestaw makropoleceń mm             

groff to wersja GNU programów nroff i troff, które są językami przeznaczonymi do formatowania tekstów, używanymi od lat w systemach UNIX-owych. System groff zawiera wersje programów troff, nroff, eqn, tbl i innych programów UNIX-owych służących do formatowania tekstu. Język groff używany jest głównie do kompilowania stron man zapisanych w formacie groff/nroff do postaci, w której mogą być one drukowane lub wyświetlane na ekranie terminala.

Język nroff był pierwotnie zaprojektowany do obsługi drukarek pracujących w trybie tekstowym, natomiast troff – do składu graficznego. Polecenia dostępne w obu tych językach są takie same, choć niektóre z nich (te, które nie mogą być obsłużone przez drukarkę tekstową) są ignorowane przez nroff. Zwykle nie używa się programów nroff i troff bezpośrednio, ale za pośrednictwem odpowiednio spreparowanych makropoleceń.

W większości zastosowań programy te zostały wyparte przez mające o wiele większe możliwości edytory i systemy składu tekstów. Ich głównym (o ile nie jedynym) zastosowaniem pozostała obsługa stron man.

Zarówno nroff jak i troff udostępniają wiele poleceń, których nigdy nie będziesz potrzebował. W tym rozdziale przyjrzymy się podstawowemu podzbiorowi poleceń tych dwóch języków. Jeśli chcesz używać ich „na poważnie”, powinieneś sięgnąć do jednej z książek poświęconych temu tematowi.

Osadzanie poleceń

Tekst po przetworzeniu przez program groff niekoniecznie będzie miał taką formę, w jakiej został wpisany, na przykład połączone zostaną wszystkie wiersze. Plik zawierający tekst:

 

To bardzo ciekawe.
Przyjrzenie się temu bliżej
zajmie mi kilka godzin.

składa się z trzech wierszy, ale po sformatowaniu programem groff może wyglądać tak:

 

To bardzo ciekawe. Przyjrzenie się temu bliżej zajmie mi kilka godzin.

Podziały wierszy zależą tylko od układu strony. Dzięki takiemu rozwiązaniu nie trzeba przejmować się tym, czy w pliku źródłowym wszystko zostało prawidłowo sformatowane. Oczywiście wadą tego rozwiązania jest fakt, że tak naprawdę nigdy nie wiesz, co otrzymasz, dopóki tego nie zobaczysz.

Rzut oka na dowolny plik źródłowy programu groff pozwala stwierdzić, że jest to zwykły plik ASCII, zawierający tekst, który ma być wyświetlany, oraz polecenia zaczynające się od kropki, na przykład tak:

 

To tekst, który zostanie wyświetlony.

To jeszcze więcej tekstu.

.ps 14

Powyższy wiersz jest poleceniem programu groff,
ponieważ jej pierwszym znakiem jest kropka.

Większość poleceń języka groff zajmuje osobny wiersz, ale kilka z nich można osadzić w dowolnym miejscu, również wewnątrz wiersza tekstu. Takie polecenia zaczynają się od znaku \ (podobne rozwiązanie zastosowane jest w interpreterach poleceń powłoki). Oto przykład użycia poleceń osadzonych:

 

Ten \fBwiersz\fR zawiera dwa osadzone \fIpolecenia\fR jezyka groff.

Choć czasem użycie tego typu poleceń jest konieczne, większość poleceń zaczyna się od kropki w nowym wierszu.

Określanie wyglądu znaków

Język groff posiada kilka poleceń pozwalających kontrolować sposób, w jaki znaki zostaną wydrukowane czy wyświetlone. Są to polecenia dotyczące rozmiaru i typu czcionki oraz odstępów między wierszami.

Rozmiar czcionki i odstępy między wierszami

Rozmiar czcionki i odstępy między wierszami nie mają większego znaczenia, kiedy dokument jest wyświetlany na ekranie terminalu tekstowego. Ich użycie ma sens dopiero w przypadku dokumentacji drukowanej (albo oglądanej na ekranie graficznym). Rozmiar czcionki można ustalić za pomocą polecenia .ps (ang. point size):

 

To jest domyślna czcionka – 10 punktów.

.ps 14

To jest czcionka o rozmiarze czternaście punktów.

.ps 20

To rozmiar 20.

.ps 6

A to mała czcionka – rozmiar 6.

 

Punkt to 1/72 cala, więc czcionka o rozmiarze 32 jest wysoka na pół cala (ok. 1,27cm). Najczęściej używana czcionka o rozmiarze 12 punktów ma wysokość 1/6 cala (ok. 0,42cm). Różne wersje programu groff obsługują różne wielkości czcionek, ale większość z nich poprawnie drukuje i wyświetla czcionki o rozmiarach 6, 7, 8, 9, 10, 11, 12, 14, 16, 20, 24, 28 i 36 punktów. Jeśli wartość podana jako parametr polecenia .ps nie jest obsługiwana, jest ona zaokrąglana do najbliższej obsługiwanej. Domyślnie czcionka ma rozmiar 10 punktów. Polecenie .ps bez parametru powoduje przywrócenie poprzednio używanego rozmiaru czcionki.

W środku zdania rozmiar czcionki może zostać zmieniony poleceniem \s, po którym następuje liczba określająca nowy rozmiar:

 

To jest 10 punktów, a \s20to jest dwadzieścia, \s10to jest z powrotem 10.

Polecenie \s0 powoduje powrót do poprzednio używanego rozmiaru. Obsługiwane są również zmiany względne, można więc osadzać polecenia typu \s+2 czy \s-2, choć możliwe jest podanie tylko jednej cyfry, z czego wynika że w ten sposób nie da się zmienić rozmiaru czcionki o więcej niż 9 punktów.

Odstępy pomiędzy wierszami nie są wiązane automatycznie z rozmiarem czcionki, dlatego jeśli rozmiar czcionki został zmieniony, należy również odpowiednio skorygować odstępy. Odstępy pomiędzy wierszami powinny być o ok. 20% większe od wysokości czcionki. Domyślnie jest to 11 punktów.

Odstępy między wierszami kontrolowane są za pomocą polecenia .vs (ang. vertical spacing). W poniższym przykładzie zmieniony został rozmiar czcionki oraz wielkość odstępów między wierszami, tak by poszczególne wiersze nie nakładały się na siebie:

 

To jest czcionka 10 punktów, odstęp miedzy wierszami – 11.

.ps 12

.vs 14

To jest czcionka 12 punktów, odstęp miedzy wierszami – 14.

Polecenie .vs bez parametrów powoduje przywrócenie poprzednio używanej wielkości odstępu.

Jeśli chcesz z jakiegoś powodu wymusić odstęp pomiędzy blokami tekstu, użyj polecenia .sp (ang. space). Użyte bez argumentów, polecenie to powoduje wstawienie pustego wiersza. Może również przyjmować jeden argument – wielkość odstępu, podaną w calach (przyrostek i) lub w punktach (przyrostek p):

 

To standardowa czcionka 10p z odstępami miedzy wierszami 11p

.sp

Powyżej jest pusty wiersz.

.sp 3.5i

Nad tym wierszem jest 3.5 cala odstępu.

Jak widać w powyższym przykładzie, w większości poleceń języka groff można używać ułamków dziesiętnych.

Czcionki

Zmiana rodzaju czcionki wymaga użycia polecenia .ft (ang. font type). W pierwszych latach istnienia systemu groff dostępne były tylko cztery rodzaje czcionek: Roman, Roman wytłuszczona (ang. bold), Roman kursywa (ang. italic) i zestaw znaków specjalnych. Inne czcionki musiały być specjalnie ładowane do maszyny do składu. Z tego powodu domyślną czcionką jest czcionka Roman.

Aby zastosować czcionkę wytłuszczoną (ang. bold), użyj polecenia .ft B. Polecenie .ft I powoduje, że tekst będzie pisany kursywą (ang. italic). Do zwykłej czcionki wrócić można wydając polecenie .ft R, choć w większości systemów wystarczy samo polecenie .ft:

 

To zwykła czcionka Roman.

.ft B

To czcionka wytłuszczona.

.ft I

To kursywa.

.ft

A to znów zwykła czcionka.

Można przełączać się pomiędzy różnymi rodzajami czcionki również w obrębie jednego wiersza, za pomocą polecenia \f, po którym następuje litera I, B lub R:

 

To zwykła czcionka, \fBto wytłuszczona, \fIkursywa \ftRa to znów zwykła åczcionka.

Ponieważ dawniej większość drukarek nie obsługiwała podkreśleń, tekst podkreślony był zamieniany na kursywę. Dlatego polecenie podkreślenia .ux (ang. underline) powoduje, że x następnych wierszy pisanych będzie kursywą.

Ponieważ dziś mamy do dyspozycji również czcionki inne niż Roman, musi być jakaś możliwość zmiany kroju pisma. Służy do tego polecenie .fp, które wymaga podania jednego parametru – liczby oznaczającej pozycję, na której czcionka została zainstalowana w maszynie do składu (to rozwiązanie pochodzi z bardzo zamierzchłych czasów). Przykładowo, jeśli czcionka Helvetica była zamontowana na trzeciej pozycji i odnosiliśmy się do niej przez literę H, polecenie

 

.fp 3 H

instruowało maszynę, by przełączyła się na font Helvetica w pozycji trzeciej. Język groff nadal trzyma się tej archaicznej składni.

Wcięcia i długość wiersza

Domyślnie wiersze tekstu mają długość 6,5 cala. Aby zmienić tę wartość, należy użyć polecenia .ll (ang. line lenght) pobierającego jeden argument. Przykładowo, polecenie

 

.ll 7i

powoduje, że wiersze będą miały długość 7 cali. Maksymalna akceptowana długość to zwykle ok. 7,5 cala, więc jeśli chcesz użyć szerszego papieru, musisz odpowiednio przesunąć lewy margines za pomocą polecenia .po (ang. page offset). Polecenie .po 0 ustawia lewy margines najdalej jak się da.

Do ustawiania wcięć służy polecenie .in (ang. indent), również pobierające jeden argument, który określa wielkość wcięcia, wyrażoną w calach lub punktach:

 

Tekst bez wcięcia.

.in 0.75i

Tekst wcięty o trzy czwarte cala.

Aby przesunąć prawy margines, dzięki czemu można uzyskać efekt wyróżnienia bloku tekstu, powinieneś zastosować omówione wcześniej polecenie .ll.

 

To zwykły tekst, który jest wystarczająco długi
żeby osiągnąć koniec wiersza.
.in 1i
.ll –1i
Ten tekst jest wcięty jeden cal od lewej,
natomiast prawy margines jest przesunięty
o cal w prawo w porównaniu do standardowych ustawień.
.in –1i
.ll +1i
A to znowu zwyczajne ustawienia. Poprzedni blok został
wyróżniony z całego tekstu.

W tym przykładzie użyte zostały względne wartości przesunięć. Dzięki temu można osiągnąć zamierzony efekt bez znajomości rozmiaru strony. Aby powrócić do poprzednich ustawień, można również użyć poleceń .ll i .in bez argumentów.

Raz ustawione rozmiary wcięcia i długość wiersza pozostają w mocy aż do następnego polecenia zmieniającego je. Często jednak zdarza się, że trzeba wciąć tylko jeden wiersz tekstu. Do tego celu służy polecenie .ti (ang. temporary indent):

 

To koniec akapitu, po którym nastąpi nowy akapit. Można go wyróżnić wcinając
pierwszy wiersz.
.ti 2i
To jest nowy akapit, którego pierwszy wiersz jest wcięty o cal w lewo, ale
następne już nie.

Tabulatory używane są wtedy, gdy tekst ma być wyświetlany w kolumnach. Domyślnie są one ustawione co pół cala. Rozmieszczenie tabulatorów można zmienić wydając polecenie .ta (ang. tab)

 

.ta 1i 2i 3i 4i 5i 6i

Powyższe polecenie ustawia tabulatory co jeden cal, od lewej do prawej – podobnie jak w maszynie do pisania. Jeśli jednak chcesz sformatować tabelę, o wiele lepiej do tego celu nadają się makropolecenia gtbl, które zostaną omówione w następnym rozdziale.

Inne polecenia

System groff udostępnia jeszcze wiele poleceń pozwalających na ustawianie wielkości pojedynczych znaków, wstawianie równań i liter greckich itp. Ponieważ jednak mało prawdopodobne jest, by ktoś chciał używać go do tego typu zadań, pominiemy te zagadnienia. Jeśli jesteś zainteresowany tymi możliwościami, przejrzyj strony man dotyczące programu groff lub poszukaj jakiejś książki poświęconej w całości temu tematowi.

Makropolecenia

Makropolecenie to skrócony zapis zestawu poleceń (lub znaków). Wiele poleceń wykorzystywanych do tworzenia stron man to makropolecenia. Oto praktyczny przykład ich zastosowania: załóżmy, że każdy akapit ma zaczynać się od pustego wiersza, a pierwszy wiersz tekstu ma być wcięty o pół cala. Polecenia pozwalające na uzyskanie takiego efektu mają postać:

 

.sp
.ti +0.5i

Zamiast wpisywać je na początku każdego akapitu, można zdefiniować makropolecenie (którego nazwa może być nawet jednoliterowa) i używać go.

Makropolecenie definiuje się poleceniem .dd, po którym następuje jego nazwa. Definicja makropolecenia z powyższego przykładu może mieć więc następującą postać (powinna znaleźć się gdzieś na początku pliku źródłowego):

 

.de PP
.sp

.ti +0.5i
..

Ostatni wiersz, składający się z dwóch kropek, oznacza koniec definicji makropolecenia. Od tej chwili użycie polecenia .PP będzie powodowało wykonanie skojarzonego z nim makropolecenia.

 

Upewnij się, że nazwa makropolecenia nie jest jedną z nazw zarezerwowanych dla poleceń groff; w przeciwnym przypadku makropolecenie nie zostanie wykonane.

Makropolecenia mm

Pakiet mm (ang. ...

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • hannaeva.xlx.pl