1910


Rozdział 18.
geqn oraz gtbl


Tim Parker

W tym rozdziale:

Teraz, kiedy znasz już podstawy systemu groff, przyjrzymy się dwóm jego rozszerzeniom: geqn oraz gtbl. W tym rozdziale dowiesz się:

W poprzednim rozdziale pokazaliśmy, w jaki sposób używa się systemu groff do tworzenia sformatowanych dokumentów tekstowych nadających się zarówno do wydrukowania, jak i do oglądania na ekranie graficznym. Niestety, tworzenie bardziej skomplikowanych struktur w systemie groff, takich jak tabele czy równania, nie jest łatwe. Opracowano więc zestaw makropoleceń ułatwiających te zadania.

Programy gtbl i geqn są preprocesorami, co oznacza, że pliki źródłowe powinieneś tworzyć tak, jak robiłeś to nie używając tych programów. Można jednak wprowadzać do nich również polecenia programów gtbl i geqn, które zostaną rozwinięte w polecenia rozpoznawane przez groff. Pozostała część pliku źródłowego, nie zawierająca poleceń gtbl i geqn, jest bez zmian przesyłana do programu groff.

geqn

Preprocesor geqn jest zaprojektowany do formatowania złożonych równań i drukowania symboli specjalnych. Jego użycie jest potrzebne tylko w przypadku, gdy formatujesz tekst zawierający takie elementy.

Choć groff umożliwia formatowanie prostych równań, na pewno nie nadaje się do tworzenia równań zajmujących więcej niż jeden wiersz. geqn jest łatwy do opanowania, a w wielu sytuacjach wręcz niezastąpiony. Polecenia programu geqn są zwykle skrótami słów angielskich, dzięki czemu łatwiej je zapamiętać.

Uruchamianie geqn

Program geqn musi być wywołany przed programem groff. Zwykle dokonuje się tego poprzez wydanie polecenia:

geqn nazwa_pliku | groff

Powoduje ono przetworzenie pliku nazwa_pliku przez program geqn oraz przesłanie wyników jego działania na wejście programu groff. Polecenie

geqn plik1 plik2 plik3 | groff

powoduje przetworzenie kolejno wszystkich trzech plików.

Pamiętaj, że wiele terminali nie potrafi prawidłowo wyświetlać równań (muszą to być konsole graficzne lub umożliwiające użycie odpowiedniej czcionki). Możliwe, że aby obejrzeć efekty swojej pracy, będziesz musiał je wydrukować.

Równania

Równanie można wstawić informując program geqn w którym miejscu zaczyna się ono i kończy za pomocą poleceń .EQ (ang. equation) oraz .EN (ang. equation end). Tekst pomiędzy tymi poleceniami traktowany jest jako równanie. Polecenie:

.EQ
b=c*(d+x)
.EN

powoduje sformatowanie równania b=c*(d+x).

Jeśli wpiszesz wiersz b=c*(d+x) nie zaznaczając go jako równania, czyli w efekcie przekazując go bezpośrednio do programu groff, efekt wyjściowy będzie inny, ponieważ groff nie potrafi prawidłowo zinterpretować znaków wchodzących w skład równania.

Równania można numerować - często robi się to w tekstach technicznych - przez podanie odpowiedniego numeru po poleceniu .EQ, na przykład:

.EQ 15
b=c*(d+x)
.EN

powoduje umieszczenie przed równaniem numeru 15.

Indeks górny i dolny

Aby w równaniu zamieścić indeks górny lub dolny, należy użyć poleceń sup i sub. Słowa te muszą być z obu stron otoczone spacjami. Przykładowo, polecenie:

E=mc sup 2

daje na wyjściu słynne równanie Einsteina.

Aby zaznaczyć koniec tekstu, który ma być zawarty w indeksie, należy wstawić znak spacji lub tyldę (~). Na przykład polecenie:

x=(z sup 2)+1

daje na wyjściu:

x=(z2)+1

a prawdopodobnie nie o to chodziło. Zamiast tego, powinieneś wprowadzić któreś z poleceń:

x=(z sup 2 )+1
x=(z sup 2~)+1

Spacja lub tylda oznacza koniec indeksu górnego. Oba powyższe polecenia dają na wyjściu równanie:

x=(z2)+1

Możesz również uzyskać indeks górny w indeksie górnym oraz dolny w dolnym:

y sub x sub 3

lub zastosować oba indeksy równocześnie:

x sub 3 sup 18

Ponieważ spacja jest używana do oznaczania końca tekstu wchodzącego w skład indeksu górnego lub dolnego, może to spowodować drobne problemy w przypadku, gdy trzeba jej użyć do rozdzielenia symboli. Sposobem na obejście tych problemów jest zastosowanie nawiasów klamrowych, w których zawrzeć należy cały tekst należący do danego indeksu:

w sup {x alpha y}

Powyższy przykład ilustruje równocześnie możliwość wykorzystania liter greckich. Nawiasy klamrowe można zagnieżdżać:

omega sub { 2 pi r sup { 2 + rho }}

Wypróbuj sam te polecenia i obejrzyj efekty ich działania.

0x01 graphic

Choć może się wydawać, że litery greckie są przydatne tylko w skomplikowanych równaniach, często wygodnie jest ich używać również w prostych formułach. Warto wiedzieć, jak je uzyskać i jak wyglądają na papierze.

Ułamki

Do tworzenia prawidłowo sformatowanych ułamków służy polecenie over. geqn automatycznie dostosowuje długość linii oddzielającej licznik i mianownik. Na przykład polecenie

a=2b over {3c alpha}

da w wyniku równanie, po którego prawej stronie jest ułamek - tak, jakby zostało napisane na papierze.

Można oczywiście używać równocześnie indeksów i ułamków, co pozwala na uzyskanie bardziej złożonych równań:

{alpha + beta +gamma sup 3} over {3 sub {4 + alpha}}

W takim przypadku najpierw przetwarzane są polecenia sub i sup, a potem over, co daje zamierzony efekt.

Pierwiastek kwadratowy

Aby uzyskać symbol pierwiastka kwadratowego, należy użyć polecenia sqrt - geqn zadba o to, by symbol pierwiastka prawidłowo otaczał cały tekst, który ma znaleźć się „pod pierwiastkiem”. Bardzo duże pierwiastki (szczególnie o długości przekraczającej jeden wiersz tekstu) nie wyglądają jednak najlepiej po wydrukowaniu - w takim przypadku warto rozważyć zapisanie pierwiastka jako potęgi o wykładniku 0,5.

Polecenie sqrt jest łatwe w użyciu, poniższy przykład:

sqrt a+c -1 over sqrt {alpha + beta}

powoduje „nałożenie” pierwiastków na wyrażenia a+c oraz alpha + beta.

Sumy, teoria zbiorów i całki

Aby uzyskać symbol sumy, użyj poleceń sum, from i to (dwa ostatnie definiują granice sumowania). Użycie polecenia:

sum from x=1 to x=100 x sup 2

powoduje wstawienie symbolu sumy kwadratów liczby x dla x zmieniającego się od 1 do 100. Można również wydać polecenie:

sum from x=1 to {x= inf} x sup 2

dające podobne efekty, z tym, że górną granicą sumowania jest nieskończoność. Klamry zapewniają prawidłową interpretację polecenia. Jeśli któryś z elementów from lub to nie jest podany, nie jest on drukowany.

Używanie symbolu całki możliwe jest dzięki poleceniu int. Jego składnia jest taka sama jak składnia polecenia sum, np.:

int from x=1 to {x= inf} x sup 2

Drukowanie symbolu granicy możliwe jest za pomocą polecenia lim:

lim from n=1 xy sup 3 =9

Inne zarezerwowane słowa to union i inter, używane w teorii zbiorów (odpowiednio unia i przecięcie zbiorów).

Nawiasy i kolumny

Kiedy równania stają się bardziej skomplikowane, konieczne staje się użycie kilku poziomów nawiasów. Aby uzyskać taki efekt, należy zastosować polecenia left i right:

left { b over d+1 right } = left ( alpha over {beta+ gamma} right )

W powyższym przykładzie po lewej stronie równania znajdzie się ułamek w nawiasie klamrowym, a po prawej wyrażenie w nawiasach okrągłych. Można oczywiście zagnieżdżać nawiasy - geqn sam odpowiednio dostosuje ich wysokość. Nawiasy klamrowe i kwadratowe są zwykle większe niż okrągłe.

Oznaczenia sufitu i podłogi uzyskać można za pomocą poleceń left floor, right floor, left ceiling i right ceiling, na przykład:

left ceiling x over alpha right ceiling > left floor beta over 2 right floor

Aby uzyskać kolumnę elementów, należy użyć polecenia pile. Poniższy przykład daje kolumnę trzech elementów otoczoną dużymi nawiasami kwadratowymi:

X = left [ pile {a above b above c } right ]

Macierze

Tworzenie macierzy wymaga nieco więcej wysiłku. Mógłbyś prawdopodobnie zrobić to za pomocą polecenia pile, ale jeśli wysokości elementów są różne, nie znajdą się one w jednej linii. Z tego powodu należy używać polecenia matrix. Ogólnie jego składnia jest następująca:

matrix {
ccol { elementy }
ccol { elementy }
}

Polecenie to powoduje utworzenie macierzy, której elementy są wyśrodkowane. Jeśli chcesz dosunąć je do lewej lub prawej strony, użyj zamiast ccol słowa lcol lub rcol. Przykładowe polecenie:

matrix {
ccol { x sub 11 above x sub 12 }
ccol { x sub 21 above x sub 22 }
}

generuje macierz o wymiarach 2x2 o następującej postaci:

x11 x21
x12 x22

Wszystkie kolumny macierzy muszą składać się z takiej samej liczby elementów.

0x01 graphic

Niektóre pakiety matematyczne dopuszczają tworzenie macierzy z różną ilością elementów w kolumnach. Nie jest to podejście właściwe, ponieważ taki twór przestaje być macierzą. Wszystkie kolumny macierzy powinny składać się z takiej samej liczby elementów, podobnie jak wiersze

Cudzysłowy

Ciąg znaków umieszczony w cudzysłowie nie jest interpretowany przez geqn. Takie rozwiązanie

przydaje się, gdy zachodzi potrzeba wypisania tekstu będącego nazwą zastrzeżoną, np.:

italics "beta" = beta + gamma

W powyższym przykładzie zamiast greckiej litery beta przed znakiem równości pojawi się tekst beta.

Zmiana czcionki

Rodzaj i rozmiar czcionki można zmieniać bardzo podobnie jak w programie groff. Czcionką domyślną jest czcionka Roman o wysokości 10 punktów. Jeśli chcesz, aby litery były wytłuszczone, powinieneś wydać polecenie bold. Polecenie italic powoduje, że tekst będzie pisany kursywą.

x = y bold alpha

Polecenie fat powoduje drukowanie liter poszerzonych. Polecenia te dotyczą tylko tekstu następującego bezpośrednio po nich, więc jeśli chcesz zastosować je do większej partii tekstu, musisz umieścić ją w nawiasach klamrowych:

x = y*2 bold { alpha + beta }

Zmiana rozmiaru czcionki możliwa jest dzięki poleceniu size:

size 16 { alpha + beta }

Dopuszczalne są również zmiany względne, np. size +2.

Jeśli chcesz, aby zmiany dotyczyły całego równania, możesz na początku bloku równania użyć poleceń gsize (ang. global size)i gfont (ang. global font):

.EQ
gsize 14
gfont H
......

Dzięki temu łatwo sformatować równanie w wymagany sposób.

Używanie programu geqn

Jak widzisz, stosowanie programu geqn do formatowania równań nie jest szczególnie trudne, a daje bardzo dobre efekty. Powinieneś pobawić się chwilę tym systemem, aby nabrać wprawy. Oprócz przedstawionych tu najbardziej podstawowych poleceń, dostępnych jest jeszcze wiele innych. Ich opis znaleźć możesz na stronach man i w dobrych książkach omawiających system groff.

gtbl

Program gtbl został opracowany po to, by ułatwić formatowanie tabel i wyliczeń składających się z kilku kolumn. Jego polecenia nie są trudne w użyciu, ale wyglądają dość dziwacznie - najlepszą metodą zapoznania się z nimi jest przestudiowanie kilku przykładów.

Aby użyć gtbl, w pliku źródłowym powinieneś zawrzeć dwa specjalne polecenia: .TS (ang. table start) i .TE (ang. table end), a pomiędzy nimi dane dotyczące tabeli. Polecenia te zostaną następnie przetłumaczone przez program gtbl na postać rozpoznawaną przez groff.

Każda z tabel jest niezależna od innych, co oznacza, że dla każdej z osobna trzeba podać informacje dotyczące formatowania; nie można założyć, że zostaną użyte poprzednie wartości. Tabela musi zawierać trzy typy informacji: dane, które mają znaleźć się w tabeli, opcje kontrolujące zachowanie gtbl oraz polecenia formatujące tabelę. Ogólnie, składnia polecenia powodującego wstawienie do dokumentu tabeli jest następująca:

.TS
opcje;
format.
dane
.TE

Przyjrzyjmy się każdemu z elementów tego polecenia z osobna, by później połączyć je i utworzyć prawidłowo sformatowaną tabelę.

Uruchamianie programu gtbl

Ponieważ gtbl jest preprocesorem, należy go wywołać z argumentem określającym nazwę pliku źródłowego, zaś efekty jego działania przesłać na wejście właściwego programu formatującego:

gtbl plikzrodlowy | groff

Można również użyć obu preprocesorów geqn i gtbl równocześnie, na przykład tak:

geqn plikzrodlowy | gtbl | groff

Opcje

Po poleceniu .TS może wystąpić jeden wiersz zawierający opcje, które dotyczą całej tabeli. Jeśli podajesz więcej niż jedną opcję, musisz rozdzielić je spacjami, przecinkami lub tabulatorami, natomiast po ostatniej musi wystąpić średnik. gtbl obsługuje następujące opcje:

center powoduje wyśrodkowanie zawartości tabeli
(domyślnie - wyrównywanie do lewej),

expand poszerza tabelę do aktualnej długości wiersza,

box otacza tabelę ramką,

allbox otacza każdy element tabeli ramką,

doublebox otacza tabelę podwójną ramką,

tab (n) używa znaku n zamiast tabulatora jako separatora danych,

linesize (n) używa rozmiaru n punktów dla poszczególnych wierszy,

delim (mn) używa znaków m i n jako ograniczników równań.

Kiedy gtbl próbuje sformatować tabelę, stara się zmieścić ją na jednej stronie, nawet jeśli musi pozostawić poprzednią stronę częściowo pustą. Może to czasem być przyczyną problemów, ponieważ zdarza się, że gtbl źle oblicza rozmiar tabeli przed jej wygenerowaniem, szczególnie jeśli są w niej osadzone polecenia zmieniające rozmiar czcionki lub odstępy między wierszami. Aby uniknąć tych problemów, niektórzy użytkownicy otaczają całą tabelę makropoleceniem .DS (ang. display start) i .DE (ang. display end). W przypadku prostych tabel nie pojawiają się żadne problemy.

Format

Sekcja opisująca format tabeli determinuje sposób wyświetlania poszczególnych kolumn. Każdy wiersz sekcji formatu odpowiada wierszowi wygenerowanej tabeli. Jeśli podanych jest mniej wierszy formatu, niż wierszy danych, pozostała część danych zachowuje ostatnio zdefiniowany format. Pozwala to na łatwe tworzenie nagłówków w innym formacie i użycie jednolitego formatowania reszty tabeli. Sekcja formatu musi kończyć się kropką.

Każdy wiersz tej sekcji zawiera litery kluczowe odnoszące się do kolumn tabeli. Powinny być one rozdzielone spacjami albo znakami tabulacji, ponieważ poprawia to czytelność.

Wielkość tych liter nie ma znaczenia (można używać zarówno wielkich, jak i małych liter). Oto ich funkcje:

l wyrównanie pola do lewej,

r wyrównanie pola do prawej,

c wyśrodkowanie pola,

n wyrównanie danych numerycznych do kropki,

a wyrównanie do lewej tak, by najdłuższy wpis był wyśrodkowany,

s zastosowanie do kolumny bieżącej formatu poprzedniej kolumny.

Podana poniżej przykładowa sekcja formatu zawiera jedną literę dla każdej kolumny; ostatni wiersz definiuje format obowiązujący do końca tabeli:

c s s
l n n.

W tym przykładzie, w pierwszym wierszu tabeli pierwsza, druga i trzecia kolumna jest wyśrodkowana (litera s powoduje, że dana kolumna ma taki sam format, jak kolumna poprzednia). W drugim wierszu i wszystkich następnych pierwsza kolumna jest wyrównana do lewej, a druga i trzecia zawiera dane numeryczne wyrównane do kropki. Koniec sekcji oznaczony jest kropką. Jeśli chcesz, możesz wszystkie te dane umieścić w jednym wierszu, na przykład tak:

c s s, l n n.

Tabela sformatowana w ten sposób wyglądać będzie mniej więcej tak:

Wyśrodkowany nagłówek

Dana1

12.23

231.23

Dana2

  3.23

  45.2

Dana3

45

124.344

Dana4

  3.2

   2.3

Dane liczbowe wyrównane są tak, by kropki dziesiętne znajdowały się w jednej linii. Czasem jednak będziesz chciał wymusić zmianę formatu dla konkretnej danej. Aby przesunąć kropkę dziesiętną, użyj symbolu specjalnego \&. Nie jest on drukowany w tabeli. Spójrzmy na przykładowe dane (pierwsza kolumna to dane źródłowe, druga przedstawia, jak zostaną one sformatowane):

14.5

14.5

13

13

1.253

  1.253

3\&1.21

31.21

53.2

53.2

6\&2.23

62.23

Można zauważyć, że liczby ułożone są tak, by kropki dziesiętne były jedna pod drugą, za wyjątkiem tych, w których użyto symbolu \&. Jeśli dana nie zawiera kropki dziesiętnej, program gtbl przyjmuje, że występuje ona po ostatniej cyfrze.

Poniżej zebrane zostały inne symbole specjalne, które mogą być używane (w sekcji formatu) do nietypowego formatowania tabeli, czyniąc ją nieco bardziej atrakcyjną:

_ linia pozioma zamiast danych;

= podwójna linia pozioma zamiast danych;

| pomiędzy danymi, wstawia między kolumnami pionową linię; przed pierwszą daną w wierszu wstawia linię po lewej stronie tabeli; po ostatniej danej wstawia linię po prawej stronie tabeli;

|| pomiędzy danymi, wstawia podwójną pionową linię między kolumnami;

e/E ustawia równe szerokości kolumn; wszystkie kolumny, dla których ustawiona jest opcja e będą miały równe szerokości;

f/F x powoduje użycie zadanego rodzaju lub rozmiaru czcionki (x to nazwa czcionki lub jej rozmiar);

n x określa wielkość odstępów pomiędzy kolumnami;

p/P x zmienia rozmiar wpisu zgodnie z następującą po nim liczbą; obsługiwane są również zmiany względne;

t/T powoduje, że szerokie obiekty będą zaczynać się od samej góry wiersza (zwykle są one wyśrodkowane w pionie);

v/V ustawia odstęp między wierszami;

w/W ustawia minimalną szerokość kolumny.

Porządek tych znaków w wierszu formatu nie jest istotny. Przykładowy wpis

np14w(2.5i)fi

formatuje pole liczbowe (n), pisane kursywą (fi) o wysokości 14 punktów (p14) i minimalnej szerokości kolumny 2.5 cala (w(2.5i)).

Może również zajść potrzeba zmiany formatu tabeli gdzieś w jej środku - na przykład by wstawić podsumowanie. Jeśli musisz to zrobić, zastosuj polecenie .T& (ang. table continue).

Dane

Dane, które mają znaleźć się w tabeli, wpisywane są po określeniu formatu. Poszczególne kolumny oddzielać należy tabulatorami albo innymi znakami określonymi za pomocą opcji tab. Każdy wiersz danych odpowiada jednemu wierszowi tabeli. Długie wiersze danych można kontynuować dla wygody w nowym wierszu pliku źródłowego wstawiając na końcu poprzedniego wiersza symbol \.

Każdy wiersz rozpoczynający się od kropki jest traktowany jak polecenie groff i nie jest przetwarzany. Jeśli wiersz danych składa się tylko ze znaków podkreślenia bądź równości, jest traktowany tak, jakby miał szerokość całej tabeli.

W tabeli można osadzać bloki tekstu używając poleceń T{ (początek tekstu) oraz }T (koniec tekstu). Dzięki temu możliwe jest umieszczanie w tabelach tekstów, które trudno byłoby wprowadzić jako tekst rozdzielany znakami tabulacji.

Przykłady

Najlepszym sposobem na zrozumienie zasady działania gtbl jest przestudiowanie kilku przykładów. Oto polecenie formatujące prostą tabelkę:

.TS
doublebox;
c c c, l l n.
Imie Wydzial Telefon
Michal 8A 2245
Piotr 6D 1246
Pawel 2C 6436
Anna 1A 1363
.TE

Wszystkie dane rozdzielone są znakami tabulacji. Wygenerowana tabela składa się z trzech kolumn; pierwszy wiersz zawiera wyśrodkowany tekst. W następnych wierszach pierwsza i druga kolumna wyrównana jest do lewej, natomiast trzecia ma format numeryczny. Cała tabela otoczona jest podwójną ramką.

Odrobinę bardziej złożony przykład przedstawia tabelę zawierającą tytuł, po którym następują dane. Każdy element tabeli jest otoczony ramką.

.TS
allbox;

c s s
c c c
n n n .
Wyniki
Wschod Zachod Polnoc
15 12 14
12 12 18
36 15 24
.TE

Spróbuj sam wpisać te przykłady, aby przekonać się, jakie są wyniki działania poszczególnych poleceń. Kiedy zrobisz pierwszy krok, używanie gtbl przestaje być takie straszne.

Podsumowanie

Choć dostępne dziś graficzne edytory tekstu spowodowały znaczne zmniejszenie się popularności programów geqn i gtbl, niektórzy zatwardziali użytkownicy UNIX-a wciąż ich używają. Zdarzyć się również może, że nie będziesz mógł w swoim edytorze tekstu sformatować równania dokładnie tak, jakbyś sobie tego życzył. Wtedy będziesz zmuszony do powrotu do korzeni. Innym powodem używania tych programów jest fakt, że graficzne edytory tekstu są dość drogie, więc geqn i gtbl są świetną alternatywą dla tych użytkowników, którzy z ich możliwości korzystać muszą rzadko, więc nie mają potrzeby kupowania drogiego edytora.

gawk, poręczny i szybki język programowania dla zaawansowanych użytkowników i administratorów, omówiony jest w rozdziale 25. „gawk”.

Perl, inny język programowania, który jest bardzo popularny w skryptach dla stron WWW, przedstawiony jest w rozdziale 28. „Perl”.

Smalltalk/X, oparta na systemie X implementacja zorientowanego obiektowo języka programowania, omówiony jest w rozdziale 31. „Smalltalk/X”.

326 Część III Edycja i skład tekstu

326 E:\Moje dokumenty\HELION\Linux Unleashed\Indeks\18.DOC

E:\Moje dokumenty\HELION\Linux Unleashed\Indeks\18.DOC 325

Rozdział 18. geqn oraz gtbl 325



Wyszukiwarka

Podobne podstrony:
iz zhizni peterburga 1890 1910 h godov
1910
FUTURYZMY, KUBOfuturyzm, KUBO-FUTURYZM- 1910-1917
1910 Danzig Telefonbuch Stadt Tolkemit Miasto Tolkmicko
1 1910 Clarck cz 2
Bertold Merwin ŻYDZI W POWSTANIU 1863 wyd 1910
Elenchus 1910 Culm
1910
1910
1906-1910, Pomoce naukowe itp, Nogroda Nobla
Konwencja Brukselska z 1910 r, Dla żeglarzy, Konwencje, Konwencje, ustawy, kodeksy
1910
MaxCom KXT 1910 KXT 1915
Nekrologi z Gonca Czestochowskiego 1906 1910
Matka Teresa z Kalkuty (1910 1997)
1910 OsMortosdoInstituto
1910 Fortim

więcej podobnych podstron