Zgryźliwość kojarzy mi się z radością, która źle skończyła.
geqn oraz gtbl
E:\Moje dokumenty\HELION\Linux Unleashed\Indeks\18.DOC 325
Rozdzia³ 18. ¨ geqn oraz gtbl 325
Tim Parker
W tym rozdziale:
u geqn
u gtbl
Teraz, kiedy znasz już podstawy systemu groff, przyjrzymy się dwóm jego rozszerzeniom: geqn oraz gtbl. W tym rozdziale dowiesz się:
u co to jest geqn oraz gtbl?
u jak w łatwy sposób formatować złożone równania?
u jak formatować tabele?
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.
geqnPreprocesor 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 geqnProgram 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ównaniaRó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 dolnyAby 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.
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łamkiDo 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 kwadratowyAby 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łkiAby 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 kolumnyKiedy 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 ]
MacierzeTworzenie 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.
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łowyCią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 czcionkiRodzaj 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ń ...