LaTeX jako język programowania
LaTeX jest systemem składu dokumentów, który zastępuje pojęcie What-You-See-Is-What-You-Get standardowymi ideami z konwencjonalnych języków programowania. Mark Harman demonstruje potęgę tego dziedziczenia.
Każdy, kto używał edytora What-You-See-Is-What-You-Get (WYSIWYG), edytora tekstu lub pakietu DTP, będzie miał prawdopodobnie dwie frustracje:-
WYSIWYG zawsze wydaje się być kłamstwem To, co widzisz, jest raczej podobne do tego, co dostajesz, lub to, co widzisz, jest prawie zawsze tym, co dostajesz, lub to, co widzisz, byłoby tym, co dostałeś, gdyby twoja drukarka miała odpowiednie czcionki, ale to, co widzisz, rzadko jest dokładnie tym, co dostajesz.
WYSIWYG jest restrykcyjny Przypuśćmy, że nie możesz dostać się, aby zobaczyć to, co chcesz? To, co widzisz, jest tym, co dostajesz, ma dodatkowe i milczące implikacje, że to, czego nie możesz zobaczyć, również nie możesz dostać. Jak często chciałeś, żeby coś wyglądało nieco inaczej (a może bardzo inaczej), ale twój edytor na to nie pozwolił?
LaTeX (wymawia się Lateck) jest systemem składu, który nie stosuje podejścia WYSIWYG. Zamiast tego, jest on inspirowany językami programowania. Dziedziczy wszystkie zalety języków programowania i niektóre z ich wad. Zamiast tworzyć dokument na ekranie (podejście WYSIWYG), dokument LaTeXa jest programem, który mówi systemowi LaTeXa, jak ma utworzyć dokument. Program jest kompilowany przy użyciu kompilatora LaTeXa, aby stworzyć dokument, który można wydrukować lub obejrzeć.
To może brzmieć trochę dziwnie dla kogoś zaznajomionego z podejściem WYSIWYG, ale każdy, kto lubi (lub docenia) moc i elastyczność języka programowania wysokiego poziomu, szybko przekona się, że LaTeX jest po prostu lepszym sposobem projektowania dokumentów.
W tym artykule wyjaśnię nieco język LaTeX, na tyle, byś mógł pobrać darmowy system LaTeX i napisać kilka normalnych dokumentów. Nie będzie czasu na omówienie wszystkich cech LaTeX-a (zajęłoby to całą książkę), ale mam nadzieję, że zostawię Cię z silnym poczuciem, że pisanie dokumentu może, przy użyciu LaTeX-a, być czynnością podobną do pisania programu.
Proste pliki źródłowe LaTeX-a
Rysunek 1 zawiera prosty plik źródłowy LaTeX-a. Pierwszy wiersz jest predefiniowanym poleceniem LaTeXa. Wszystkie polecenia zaczynają się od znaku odwrotnego ukośnika. Polecenie w pierwszym wierszu ustala globalne właściwości dokumentu, który ma być składany. Styl dokumentu article jest stylem używanym dla krótkich artykułów. Inne style to book, report, thesis i tak dalej. Każdy styl dokumentu zmienia parametry globalne, które opisują układ dokumentu. Na przykład w środowisku książki tworzone są nagłówki podające tytuł rozdziału i autora na kolejnych stronach.
Jak wszystkie dobre języki programowania, wszystko to jest oczywiście całkowicie konfigurowalne. Jednakże, jak większość języków programowania, im więcej elastyczności chcesz, tym więcej musisz wiedzieć o podstawowym języku programowania. Na szczęście domyślne ustawienia wszystkich środowisk LaTeX-a dają bardzo zadowalające rezultaty, więc można przebyć długą drogę bez konieczności znajomości języka bazowego. To, co otrzymasz, będzie prawdopodobnie tym, czego chcesz, a jeśli nie, to przynajmniej będziesz mógł to zmienić.
Tekst samego dokumentu jest zawarty w poleceniach \begin{document} … \end{document}, \begin{} i \end{} są poleceniami, które otwierają i zamykają środowisko. Wszystkie dokumenty (i ich fragmenty) są składane w środowisku. Możemy również zagnieżdżać środowiska, jak zobaczymy później.
Znaki spacji są dla LaTeX-a nieistotne; jedna spacja jest równie dobra jak sto. Nowe linie można również wstawiać w dowolnym miejscu, ale dwie lub więcej nowych linii są używane do oznaczania punktu, w którym kończy się jeden akapit i zaczyna drugi. Po wydrukowaniu dokumentu końcowego LaTeX justuje tekst do lewej i prawej strony (wstawiając myślniki, gdzie czyste justowanie prowadziłoby do nieatrakcyjnego wydruku).
Duży dokument składa się zwykle z wielu sekcji, które mogą zawierać podrozdziały. Nową sekcję wprowadza się do LaTeXa za pomocą poleceniasection, a nową podsekcję za pomocą poleceniasubsection. Kod źródłowy LaTeX-a na rysunku 2 opisuje dokument z dwiema sekcjami, których tytuły będą brzmiały Wstęp i Uzasadnienie. Zauważmy, że w kodzie źródłowym nie musimy nadawać sekcjom numerów. LaTeX zrobi to za nas podczas kompilacji dokumentu. Tak więc wstęp będzie sekcją numer 1, a uzasadnienie sekcją numer 2. Gdybyśmy zamienili kolejność występowania tych dwóch sekcji (wycinając i wklejając kod źródłowy), to Uzasadnienie stanie się sekcją 1, a Wprowadzenie automatycznie sekcją 2.
Teraz pojawia się ważne pytanie: W jaki sposób dokonałbym odsyłacza z jednej sekcji do drugiej? Na przykład, załóżmy, że chcę odnieść się do sekcji wprowadzenie w sekcji uzasadnienie. Sposób, w jaki można to osiągnąć, ilustruje pierwszą zaletę, jaką zyskujemy dzięki sposobowi robienia rzeczy w LaTeX-u.
Odniesienia symboliczne
Ponieważ plik źródłowy LaTeX-a jest programem, można używać nazw symbolicznych do odwoływania się do części dokumentu. Dzięki temu tworzenie odsyłaczy staje się przyjemnością, ponieważ odsyłacz jest logiczną całością, odnoszącą się do jakiejś nazwanej części dokumentu. Jeśli ta nazwana część dokumentu powinna zostać przeniesiona, to wystarczy ją przekompilować.
Do wprowadzenia odsyłacza symbolicznego używamy polecenia \label{}, a do odwołania się do niego – polecenia \ref{}. Ilustruje to rysunek 3. \label{intro} wprowadza symboliczną nazwę, label, której wartość zależy od kontekstu, w którym pojawia się polecenie \label. W tym przypadku, ponieważ polecenie \label jest używane w pierwszej sekcji dokumentu, wartość przypisana do intro będzie równa 1. Polecenie \ref{} po prostu tworzy wartość etykiety. Teraz, jeśli przeniosę wprowadzenie do nowej pozycji, na przykład po sekcji uzasadnienia, wartość intro zmieni się na 2, a odniesienie w uzasadnieniu będzie w ten sposób wskazywać na nową lokalizację wprowadzenia sekcji.
Ten styl pisania zmusza nas do myślenia o dokumencie na poziomie logicznym, a nie na poziomie fizycznym. Byłoby niemądrze pisać tak, jak widzieliśmy wcześniej w sekcji \ref{intro} na przykład, ponieważ możemy przenieść etykietę intro do punktu po referencji. Zamiast myśleć o naszym dokumencie jako o monolicie tekstu występującego w określonej kolejności, myślimy o nim na wyższym poziomie abstrakcji, jako o zbiorze sekcji, które możemy dowolnie przemieszczać. Możemy nawet ponownie wykorzystać sekcje z jednego dokumentu w innym, a pod warunkiem, że nasze nazwy symboliczne są unikalne, przekonamy się, że wszystkie odniesienia będą działać poprawnie.
Kilka innych środowisk
LaTeX ma wiele użytecznych predefiniowanych środowisk. Załóżmy, że chcemy utworzyć sekwencję punktów za pomocą punktorów. Możemy to zrobić za pomocą środowiska itemize. Kod źródłowy z rysunku 4 utworzy dokument, w którym wymienione są trzy podstawowe stany materii, po jednym w wierszu, a każdy z nich poprzedzony jest znakiem wypunktowania. Pod wieloma względami sposób projektowania dokumentu w LaTeX-u jest podobny do sposobu działania języka HTML. Na przykład, środowisko itemize jest raczej podobne do środowiska listy nieposortowanej w HTML-u.
Czasami chcemy umieścić elementy w posortowanej, numerowanej liście. Osiąga się to za pomocą środowiska enumerate. Rysunek 5, przedstawia zagnieżdżoną sekwencję wyliczonych elementów, opisujących cztery ery czasu geologicznego i okresy w ich obrębie. LaTeX stosuje różne systemy numeracji dla każdego poziomu zagnieżdżenia (cyfry arabskie dla poziomu pierwszego, znaki alfabetyczne dla poziomu drugiego, cyfry rzymskie dla poziomu trzeciego). To, jak i wszystko inne, można zmienić, jeśli chcemy.
Aby podkreślić fragment tekstu, ujmuje się go w otoczkę em (emphasise), a więc po prostu piszemy \begin{em} help! \aby podkreślić słowo help (i wykrzyknik, który po nim następuje).
Procedury
W konwencjonalnym języku programowania możliwość definiowania procedur daje programiście znaczną elastyczność. Również w LaTeX-u możemy definiować procedury układania tekstu. Najprostszą formą procedury jest procedura bezparametrowa. Pozwala nam ona nazwać jakiś fragment kodu źródłowego, a następnie go wywołać. Załóżmy, że piszę dokument, w którym chcę odwołać się do jakiegoś owocu, ale nie zdecydowałem jeszcze, czy ma to być jabłko, pomarańcza czy gruszka. Mógłbym wprowadzić procedurę o nazwie fruit, a w jej ciele umieścić dowolną nazwę owocu. Gdy w końcu zdecyduję, do którego owocu chcę się odwołać, będę musiał zmienić tylko ciało procedury; wszystkie punkty, w których procedura jest wywoływana, automatycznie uwzględnią zmianę jej ciała.
W LaTeX-u procedurę nazywa się poleceniem, a nową tworzy się poleceniem newcommand. Polecenia są często nazywane makrami, ponieważ LaTeX rozwija wywołania do nich, gdy napotka je w treści dokumentu. Rysunek 6 ilustruje użycie prostego makra bezparametrowego. Po skompilowaniu źródło LaTeX-a na tym rysunku tworzy tekst Pierwsze jabłko, które się pojawi, będzie pierwszym jabłkiem, które zjem.
Aby być całkowicie sprawiedliwym, można by to osiągnąć, być może prościej, za pomocą edytora tekstu WYSIWYG, po prostu wykonując wyszukiwanie i zamianę. (Oczywiście, to by nie działało, gdyby zdanie było pierwszym owocem, który się pojawił, jest jabłkiem mojego oka!). Jest to jednak tylko prosty przykład tego, co możemy zrobić z makrami LaTeX-a. Naprawdę zyskują one na wartości, gdy podamy im parametry.
Parametry
Załóżmy, że piszę dokument o obsłudze tablic. Mógłbym chcieć opisać algorytm znajdowania największego elementu tablicy. Aby uczynić dokument bardziej ogólnym i zaoszczędzić przepisywania dużych fragmentów, mógłbym stworzyć dwie wersje, każda specyficzna dla konkretnego języka programowania, na przykład, Basic i C. Używając poleceń, mogę uniknąć używania szczególnej składni tablic, lub przynajmniej mogę uchwycić różnice składniowe w pojedynczym poleceniu, co znacznie ułatwia dostosowanie mojego dokumentu do różnych języków programowania.
Rysunek 7 ilustruje to. W definicji polecenia \lookup, mówi się kompilatorowi LaTeX-a, że polecenie przyjmuje dwa parametry, z których pierwszy jest określany jako #1, a drugi jako #2. W wywołaniu polecenia, parametry są podawane jeden po drugim w nawiasach klamrowych. Tak więc wywołanie polecenia \lookup{S}{2}, spowoduje wyświetlenie tekstu S(2). Jest to podstawowa wersja polecenia \lookup. Jeśli zastąpimy ją wersją z rysunku 8, to otrzymamy ten sam dokument, ale z odwołaniami do tablic w nawiasach kwadratowych. Jest to wersja C dokumentu. Zauważmy, że różnica między tymi dwoma dokumentami źródłowymi LaTeX-a wynosi dokładnie dwa znaki, a mianowicie dwa znaki, które stanowią różnicę między odwołaniami do tablic w Basicu i C.
Jak w przypadku procedur języka programowania, możliwe jest wywołanie jednej procedury z ciała innej i użycie wyniku wywołania procedury jako rzeczywistego parametru innej procedury. Tak więc, na przykład, możemy napisać \lookup{A}{\lookup{B}{1}}, który produkuje tekst A(B(1)) lub A], w zależności od tego, czy używamy wersji Basic czy C polecenia \lookup.
Zmienne
LaTeX posiada własne zmienne, na których możemy wykonywać proste działania arytmetyczne (możliwe są bardziej zaawansowane formy arytmetyki, ale dodawanie jest zwykle wszystkim, co jest wymagane do składu). Przyjrzę się dwóm prostym przykładom sposobu, w jaki możemy używać zmiennych, z których obie będą znane programistom; zmienna licznika i zmienna flagi.
Załóżmy, że chcemy umieścić w dokumencie sekwencję ponumerowanych punktów. Możemy użyć zmiennej counter do ponumerowania każdego punktu i napisać kilka prostych poleceń, aby kontrolować numerację. Ilustruje to rysunek 9. Licznik jest deklarowany za pomocą polecenia \newcounter. Jest on ustawiany na określoną wartość za pomocą polecenia \setcounter. Komenda \point jest używana do wypisywania bieżącego numeru punktu oraz do krokowania licznika (dodawania jedynki do jego wartości). Polecenie \the<name>, dla jakiegoś licznika <name>, powoduje wypisanie wartości zmiennej. Polecenie to może być użyte z dowolną zmienną, nie tylko wprowadzoną przez użytkownika, więc na przykład \sekcja wypisuje aktualną wartość zmiennej sekcja. Na rysunku 9 używamy polecenia point, aby wypisać trzy punkty. Miłą cechą tego podejścia jest to, że możemy zmieniać kolejność występowania punktów, a numeracja będzie się odpowiednio zmieniać.
Zobaczmy teraz, jak możemy używać zmiennych jako flag do wybierania, jaki tekst będzie produkowany w dokumencie. Jak zobaczymy, kombinacja flag i makr pozwala nam na pisanie bardzo ogólnych dokumentów, które mogą być tworzone po prostu przez wybranie odpowiedniej wartości dla flagi. Rozważmy ponownie problem pisania dokumentu o tablicach, w którym chcielibyśmy mieć dwie formy polecenia ∙lookup, jedną dla języka Basic i jedną dla C. Byłoby lepiej, gdybyśmy mogli użyć flagi w naszym źródle LaTeX-a do wskazania, czy językiem ma być C czy Basic. Jedyne, co musielibyśmy wtedy zrobić, to nadać tej fladze właściwą wartość przed kompilacją dokumentu. Ilustruje to rysunek 10.
Pierwszą rzeczą, jaką należy zrobić, jest włączenie opcji ifthen do deklaracji documentstyle. Dzięki temu będziemy mogli później użyć polecenia \ifthenelse. Następnie deklarujemy zmienną licznikową language, która jest ustawiana na 1, jeśli językiem ma być Basic, a na 0, jeśli ma to być C. Symbol % jest używany przez LaTeX do oznaczania komentarzy; każdy tekst, który pojawia się po symbolu % (a przed końcem wiersza) jest ignorowany przez kompilator LaTeXa. Następnie ustawiamy licznik na 1, używając polecenia \setcounter{language}{1}, tak więc tekst, który będziemy produkować, będzie w tym przypadku specjalizowany dla języka Basic. Specjalizację tę uzyskuje się za pomocą zmodyfikowanej wersji polecenia \lookup. Nowa wersja \lookup używa wbudowanego polecenia \ifthenesle do testowania wartości zmiennej językowej. Format polecenia \ifthenelse to \ifthenelse{<test>}{<then_branch>}{<else_branch>}. Zachowuje się on tak samo jak instrukcja if w konwencjonalnym języku programowania. Jeśli <test> zakończy się prawdą, to powstaje tekst w <then_branch>, jeśli fałszem, to powstaje tekst w <else_branch>.
Używając tej flagi możemy napisać wiele poleceń, z których każde produkuje tekst dla konkretnego rodzaju instrukcji, a język zależy od wartości zmiennej licznika flagi. W ten sposób moglibyśmy napisać ogólny dokument o programowaniu i po prostu odpowiednio ustawić flagę, aby otrzymać specjalistyczną wersję dokumentu, którą chcemy.
Rysunek 10 pokazuje, jak moglibyśmy to zrobić. Definiujemy polecenia, które produkują składnię Basic lub C dla szukania tablic (używając makra \lookup, jak opisano powyżej), uaktualniania tablic i, bardziej szczegółowo, polecenie, które produkuje odpowiednią składnię dla pętli for. Ostatnie z tych poleceń wymaga dalszego wyjaśnienia.
Różnica między pętlą for w C i w Basicu jest w dużej mierze składniowa, a my możemy wykorzystać elastyczność LaTeXa, aby uciec od tych szczegółów składniowych. Polecenie forloop wykorzystało język licznika flag do podjęcia decyzji, czy cztery elementy pętli mają być ułożone w stylu Basic czy C. Dzięki temu możemy napisać trochę tekstu o inicjalizacji tablic i pętli, bez konieczności decydowania, do którego języka będzie się odwoływał dokument docelowy.
Zauważ, że w wersji C składni pętli for nawiasy klamrowe, które zamykają instrukcje ciała pętli, są zapisywane jako \{ … \}, a nie jako { … }. Dzieje się tak dlatego, że symbole nawiasów klamrowych mają już dla LaTeX-a pewne znaczenie, więc aby LaTeX drukował nawiasy klamrowe, poprzedzamy je odwrotnym ukośnikiem.
Na rysunku 10 ustawiliśmy język licznika na 1, więc wyjście będzie w języku Basic. Na podstawie kodu źródłowego z rysunku 10, LaTeX utworzy dokument wyjściowy przedstawiony na rysunku 11. Jeśli chcemy stworzyć dokument, który mówi to samo o tablicach w języku C, musimy po prostu zmienić linię \setcounter{language}{1} na \setcounter{language}{0}. To takie proste.
Matematyka
LaTeX jest często (i słusznie) chwalony za sposób, w jaki pozwala na skład skomplikowanej matematyki. Wiele współczesnych tekstów matematycznych, informatycznych i innych naukowych i inżynierskich jest składanych przy użyciu LaTeXa.
Tekst matematyczny może być albo ułożony w linii, w którym to przypadku pojawia się w zdaniu, w którym jest wpisany, albo w trybie wyświetlania, w którym to przypadku pojawia się wyśrodkowany we własnej wyświetlanej linii. Wszystkie standardowe symbole matematyczne i formy tekstu są dostępne za pomocą poleceń. Ponieważ LaTeX istnieje od tak dawna i jest używany przez wielu matematyków na całym świecie, jest bardzo mało prawdopodobne, by istniała jakakolwiek forma zapisu matematycznego, która nie byłaby przez kogoś obsługiwana. W wielu podręcznikach informatyki i matematyki można znaleźć wzmianki o LaTeX-u, ponieważ jest on często używany do przygotowywania książek technicznych, pozwalając autorom na dostarczanie wydawcom kopii gotowych do druku w aparacie fotograficznym.
Istnieje również prężnie działająca społeczność użytkowników LaTeX-a, która zapewnia, że wszystkie te cenne informacje są gromadzone, utrzymywane i aktualizowane. Wszystkie opracowania LaTeX-a są całkowicie kompatybilne wstecz, więc nie musisz się martwić, że Twoje dokumenty w jakiś sposób stracą na aktualności.
Wykorzystanie
Oszacowałem, że potrzeba od dwóch dni do tygodnia, aby stać się produktywnym używając LaTeX-a. Wielu czytelników może uznać to za nie do przyjęcia w porównaniu z czasem potrzebnym na wprowadzenie edytorów WYSIWYG. Z pewnością, jeśli ktoś musi przygotowywać tylko dokumenty takie jak listy i notatki, to LaTeX nie jest wart rozważenia. Jeśli jednak masz do czynienia z produkcją dużej ilości tekstu i jesteś gotów zainwestować w system, który ostatecznie może zaoszczędzić Ci miesięcy pracy, to LaTeX może być rozwiązaniem.
Jedną z najbardziej nieuchwytnych, a zarazem najbardziej atrakcyjnych zalet, jakich doświadczają użytkownicy LaTeXa, jest sposób, w jaki, podobnie jak dobry język programowania, LaTeX wspiera ponowne użycie. Bardzo szybko można się przekonać, że buduje się zestaw własnych makr, które pozwalają dostosować dokumenty do własnych upodobań. Ponowne wykorzystanie części dokumentu w innym jest osiągane bez wysiłku i bezproblemowo. Bezproblemowość ta wynika z dwóch aspektów podejścia LaTeX-a. Symboliczne nazewnictwo części dokumentu pozwala na automatyczną aktualizację odsyłaczy w miarę edycji dokumentu. Koncepcja środowiska oznacza, że ten sam fragment tekstu źródłowego może wyglądać inaczej, gdy jest umieszczony w różnych kontekstach. Oczywiście stoi to w bezpośredniej sprzeczności z zasadą WYSIWYG, ale jest to zasadnicza siła LaTeXa. Wiele czasopism komputerowych, konferencji i wydawnictw dostarcza własne pliki stylów LaTeX-a, które po dołączeniu do pliku źródłowego LaTeX-a automatycznie układają dokument w formę wymaganą do publikacji.
Gdzie iść dalej
Jeśli jesteś zainteresowany wypróbowaniem LaTeX-a dla siebie, wersję dla MS-Windows można uzyskać (za darmo) od http://www.eece.ksu.edu/~khc/tex.html. LaTeX jest standardowo dostępny na większości platform UNIX i w większości dystrybucji Linuksa, więc jeśli używasz jednej z nich, spróbuj wpisać man latex. Pod adresem ftp.tex.ac.uk znajduje się witryna FTP zawierająca wiele przydatnych narzędzi LaTeX-a, makr i powiązanych dokumentów.
Istnieją dwie niezbędne książki na temat pisania dokumentów LaTeX-em. Obie są bardzo czytelne i pouczające. LaTeX A Document Preparation System autorstwa Leslie Lamport (ISBN 0-201-15790-X), opisuje podstawowy system i jest bardzo dobrą książką na początek. Zawiera wystarczająco dużo informacji, aby natychmiast napisać większość normalnych dokumentów. The LaTeX Companion autorstwa Mike’a Goossensa, Franka Mittelbacha i Alexandra Samarina (ISBN 0-201-54199-8), jest bardziej szczegółowa i obejmuje wszystkie nowe funkcje dodane do LaTeXa przez projekt LaTeX2e. Książka ta jest przydatna, jeśli chcesz napisać wiele dokumentów przy użyciu LaTeX-a i dostosować język do własnych upodobań. Wyjaśnia ona, jak osiągnąć różnego rodzaju egzotyczne efekty, takie jak układanie tekstu w kształcie serca (być może przydatne w przypadku niektórych dokumentów pisanych tuż przed 14 lutego). Obie te książki są wydawane przez Addison-Wesley.
Logiczne jest lepsze
System przygotowywania dokumentów LaTeX ewoluował i doskonalił się przez lata. Jest on niezwykle solidny i zapewnia funkcje do pisania dokumentów do standardów publikacyjnych zawierających tekst i matematykę. Dokument LaTeX jest opisywany za pomocą języka programowania, co daje użytkownikowi LaTeX-a całą moc i elastyczność konwencjonalnego języka programowania. Styl pisania zmusza użytkownika do postrzegania dokumentów na poziomie ich logicznej organizacji, a nie fizycznego wyglądu. Jest to początkowo nieco frustrujące, ale ostatecznie ma wiele zalet, takich jak wspieranie ponownego użycia i tworzenie ogólnych dokumentów, które mogą mieć kilka fizycznych instancji.
Mark Harman jest dyrektorem ds. badań i p.o. kierownika w Szkole Informatyki i Technologii Multimedialnych na Uniwersytecie Północnego Londynu (http://www.unl.ac.uk/~mark/welcome.html). Można się z nim skontaktować za pośrednictwem poczty elektronicznej pod adresem [email protected] lub listownie na adres Mark Harman, Project Project, School of Informatics and Multimedia Technology, University of North London, Holloway Road, London N7 8DB.
Rysunek 1 Prosty dokument LaTeX.
documentstyle{article}
begin{document}
hello world
end{document}
Rysunek 2 Sekcje
documentstyle{article}
begin{document}
sekcja{wprowadzenie}
To jest dość krótki dokument i to jest jego wprowadzenie.
section{Rationale}
Dokument jest tak krótki, ponieważ jest po prostu i przykładem.
End{document}
Rysunek 3 Odniesienia symboliczne
documentstyle{article}
.
begin{document}
section{wprowadzenie}
label{intro}
To jest dość krótki dokument i to jest jego wprowadzenie.
Sekcja{uzasadnienie}
Krótkie wprowadzenie do tego dokumentu można znaleźć w sekcji \{intro}.
końcówka{dokument}
Rysunek 4 Środowisko Itemize.
begin{itemize}
thitem Solid
thitem Liquid
thitem Gas
end{itemize}
Figure 5 The enumerate environment.
begin{enumerate}
cenozoic
begin{enumerate}
quaternary
tertiary
end{enumerate}
enumerate}
tiary Mezozoik
begin{enumerate}
item Cretaceous
item Jurassic
item Triassic
end{enumerate}
item Paleozoic
begin{enumerate}
item Permian
item Carboniferous
item Devonian
item Silurian
item Ordovician
item Cambrian
end{enumerate}
item Precambrian
end{enumerate}
Rysunek 6 Polecenia bezparametrowe.
documentstyle{article}
newcommand{fruit} { apple }
begin{document}
Pierwszy owoc, który się pojawi, będzie pierwszym owocem, który zjem.
end{document}
Rysunek 7 Parametry: Wersja podstawowa.
documentstyle{article}
Nowe polecenie{lookup} { #1(#2) }
begin{document}
Aby znaleźć największy element tablicy A, zapisz w zmiennej b pierwszy element, ∗lookup{A}{0}. Następnie wprowadź pętlę, sterowaną zmienną i, zaczynającą się od 1 i zmierzającą do końca tablicy. W każdym punkcie pętli porównaj element i, ˆlookup{A}{i}, z wartością w b. Jeśli ˆlookup{A}{i} jest większy niż b, to przypisz ˆlookup{A}{i} do b.
końcówka{dokument}
Rysunek 8 Parametry: C version.
documentstyle{article}
newcommand{lookup} { #1 }
begin{document}
Aby znaleźć największy element tablicy A, zapisz pierwszy element, ≥lookup{A}{0}, w zmiennej b. Następnie wprowadź pętlę, sterowaną zmienną i, rozpoczynającą się od 1 i postępującą do końca tablicy. W każdym punkcie pętli porównaj element i, \lookup{A}{i}, z wartością w b. Jeśli \lookup{A}{i} jest większy niż b, to przypisz \okup{A}{i} do b.
end{document}
Rysunek 9 Zmienne licznikowe.
newcounter{pointnumber}
setcounter{pointnumber}{1}
newcommand{pointnumber} { Point \pointnumber \stepcounter{pointnumber} }
Punkt
Jakiś tekst związany z jednym z punktów
Punkt
Jakiś tekst związany z innym punktem
Punkt
Jeszcze inny punkt
Rysunek 10 Zmienne flagowe.
\documentstyle{article}
\newcounter{language} % ustawiony na 1 dla języka Basic i 0 dla języka C
setcounter{language}{1}
\newcommand{\lookup}
{
ifthenelse{language} = 1} {#1(#2)} {#1}
}
newcommand{update}
{
ifthenelse{value{language} = 1} {LET #1(#2) = #3} {#1 = #3}
}
% Polecenie forloop przyjmuje cztery parametry
% 1. Dolna granica pętli – liczba całkowita lub wyrażenie całkowe.
% 2. Górna granica pętli – wyrażenie całkowite lub całkowe.
% 3. Zmienna sterująca pętlą – zmienna całkowa.
% 4.
{
FOR #3 = #1 TO #2
NEXT #3
}
{
for(#3=#1;#3 != #2;#3++)
{
}
begin{document}
Aby zapisać wartość 10 w elemencie numer 3 w tablicy A, piszemy \update{A}{3}{10}.
Aby zainicjować elementy od 0 do 10 w tablicy A wartością początkową 0, możemy użyć pętli for, zaczynając od 0 i idąc w górę do 10. Można to zapisać w następujący sposób
forloop{0}{10}{i}{0}}
end{document}
Rysunek 11 Wynik kompilacji źródła LaTeX z rysunku 10.
Aby zapisać wartość 10 w elemencie numer 3 w tablicy A, piszemy LET A(3) = 10.
Aby zainicjować elementy od 0 do 10 w tablicy A wartością początkową 0, możemy użyć pętli for, zaczynając od 0 i idąc w górę do 10. Można to zapisać w następujący sposób
FOR i = 0 TO 10
LET A(i) = 0
NEXT i
(P)1997, Centaur Communications Ltd. EXE Magazine jest publikacją Centaur Communications Ltd. Żadna część tej pracy nie może być publikowana, w całości lub w części, za pomocą jakichkolwiek środków, w tym elektronicznych, bez wyraźnej zgody Centaur Communications i posiadacza praw autorskich, jeśli jest to inna strona.
EXE Magazine, St Giles House, 50 Poland Street, London W1V 4AX, e-mail [email protected]
.