% -- translate-file=il2-pl --
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Contents: Customising LaTeX output (LShort2e Introduction)
% File: custom.tex (Polish translation)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\chapter{Adaptowanie {\LaTeX}a \label{chp:adapt}}
\begin{intro}
Dokumenty składane za pomocą poznanych do tej pory poleceń
będą się zapewne podobały zdecydowanej większości czytelników.
Chociaż ich wygląd nie będzie może wyrafinowany, z~pewnością jednak
spełnią one podstawowe zasady składu, dzięki czemu
będzie się je czytało łatwo i~przyjemnie.
W~niektórych wypadkach może się jednak okazać, że brakuje polecenia
czy otoczenia, za pomocą którego moglibyśmy złożyć dany fragment
tekstu w~sposób odpowiadający potrzebom, albo też że sposób
działania dostępnej w~{\LaTeX}u instrukcji nie spełnia naszych wymagań.
W~tym rozdziale przedstawimy, jak nauczyć {\LaTeX}a formatować
dokumenty tak, aby wyglądały inaczej niż w~wypadku korzystania
jedynie ze standardowych klas i~pakietów.
\end{intro}
\section{Definiowane instrukcji i~otoczeń}
Czytelnicy zauważyli zapewne, że nowo wprowadzane w~tej książce
polecenia ukazują się w~ramkach oraz że znajdują się one
w~skorowidzu. Aby to osiągnąć, nie korzystaliśmy za każdym razem
z~wbudowanych w~{\LaTeX}a instrukcji, lecz utworzyliśmy własny
pakiet, w~którym zawarliśmy nowe, potrzebne nam polecenia i~otoczenia.
Dysponując takim pakietem, wystarczy po prostu napisać:
%
\begin{example}
\begin{command}
\ci{polecenie}
\end{command}
\end{example}
\noindent
W~tym przykładzie użyliśmy zarówno nowego otoczenia o~nazwie
\verb+command+, odpowiedzialnego za rysowanie ramek dookoła instrukcji,
jak też nowego polecenia \verb+\ci+, służącego do składu nazw poleceń
i~wprowadzania ich do skorowidza. Proponujemy Czytelnikom odszukanie
hasła \verb+\polecenie+ w~skorowidzu; przy haśle powinny być podane
numery stron, na których ta instrukcja występuje w~książce.
Gdy zdecydujemy się zaprzestać otaczać polecenia ramkami,
to do zmiany wyglądu wystarczy, że zmienimy definicję
otoczenia \verb+command+.
Jest to znacznie łatwiejsze od przebiegnięcia przez cały dokument
w~celu wyłapania w~nim wszystkich standardowych poleceń \LaTeX{}, które
służą do rysowania ramek wokół słów.
%%
We wstępie do tego opracowania wspomnieliśmy, że w~{\LaTeX}u możemy
się skupić na logicznej strukturze dokumentów. Wskazane jest
rozróżnić w~tekście źródłowym wszystkie elementy logiczne dokumentu,
nawet jeżeli ich formatowanie jest identyczne. Nierzadko bowiem to,
co dzisiaj formatujemy w~taki sam sposób, w~przyszłości możemy chcieć
rozróżnić.
Zwykło się na przykład składać adresy internetowe imitacją kroju
maszynowego. Ponieważ w~adresach mogą wystąpić znaki specjalne
{\LaTeX}a, to można by do tego celu stosować instrukcję \ci{verb}.
Lepiej jednak użyć specjalnej instrukcji, np.~\ci{url}. W~dokumencie
papierowym nie ma to znaczenia, znakowanie logiczne pozwala jednak
przedstawić dokument zarówno w~formie drukowanej, jak
i~hipertekstowej, w~formacie \acro{HTML} lub \acro{PDF}.
%%
\subsection{Instrukcje definiowane przez użytkownika}
Do definiowania potrzebnych nam nowych poleceń możemy użyć instrukcji:
%
\begin{command}
\ci{newcommand}\verb|{|%
\emph{nazwa}\verb|}[|\emph{num}\verb|]{|\emph{tekst}\verb|}|
\end{command}
%
\noindent
Wymaga ona podania dwóch argumentów. Pierwszy z~nich, \emph{nazwa},
oznacza nazwę nowej instrukcji, natomiast \emph{tekst} to jej znaczenie,
czyli tekst, który ma zostać wstawiony do składu w~momencie wykonania
instrukcji. Podawany w~nawiasach kwadratowych argument \emph{num}
powinien być cyfrą od~1 do~9, określającą liczbę (obowiązkowych) argumentów
instrukcji. Argument \emph{num} jest opcjonalny, a~jego pominięcie
oznacza, że definiowana instrukcja jest bezargumentowa.
%%
W~części \emph{tekst} wolno używać zarówno standardowych instrukcji
{\LaTeX}a, jak też zdefiniowanych przez użytkownika. Nie wolno jednak
korzystać z~tych instrukcji, które same definiują inne polecenia, jak
\ci{newcommand}, \ci{newenvironment} itp. Niedozwolona jest rekursja,
nie wolno też w~nazwach instrukcji umieszczać polskich liter
diakrytycznych.
%%
Następujące przykłady pomogą lepiej zrozumieć zagadnienie. W~pierwszym
z~nich definiujemy instrukcję o~nazwie \cmd{kwle}, mającą być skrótem dla
słów ,,Krótkie wprowadzenie do systemu \LaTeXe''. Takie polecenie
mogłoby się przydać, gdyby tytuł książki miał w~niej występować wielokrotnie.
%
\begin{example}
\newcommand{\kwle}{Krótkie
wprowadzenie do systemu \LaTeXe}
% następnie po \begin{document}:
\kwle; \emph{\kwle}
\end{example}
%
\noindent
Następny przykład ilustruje sposób wykorzystania opcjonalnego argumentu
\emph{num}. Znacznik \verb|#1| oznacza pierwszy parametr formalny
(\verb|#2| oznaczałby drugi, \verb|#3| -- trzeci
itd.). W~trakcie wykonywania treści instrukcji w~miejsce parametrów
formalnych \TeX{} wstawia argumenty podane w~jej wywołaniu
(parametry aktualne).
Instrukcja w~poniższym przykładzie ma jeden parametr:
%
\begin{example}
\newcommand{\wle}[1]
{\emph{#1} wprowadzenie
do systemu \LaTeXe}
% następnie po \begin{document}:
\wle{Krótkie}; \wle{Długie}
\end{example}
%
\noindent {\LaTeX} nie pozwala zdefiniować instrukcji nazwanej tak samo
jak wcześniej zdefiniowane polecenie. W~wypadku gdy chcemy zmienić
znaczenie już istniejącej instrukcji, powinniśmy użyć polecenia
\ci{renewcommand}. Za wyjątkiem nazwy ma ono składnię identyczną jak
\verb|\newcommand|.
Czasami może się też przydać polecenie
\ci{providecommand}. Działa ono jak \verb|\newcommand|, z~tym że jeśli
istnieje już komenda o~takiej samej nazwie, to nie zastępuje ono
starej, zwyczajnie ignorując nową.
Nieco uwagi należy poświęcić temu, jaki skutek ma umieszczenie odstępu
po komendzie \LaTeX{}a. Informacje na ten temat można znaleźć na stronie
\pageref{whitespace}.
\subsection{Otoczenia definiowane przez użytkownika }
Odpowiednikiem definiującej nowe polecenie instrukcji \verb|\newcommand|
jest dla otoczeń instrukcja \verb|\newenvironment|. Ma ona następującą
składnię:
%
\begin{command}
\ci{newenvironment}\verb|{|%
\emph{nazwa}\verb|}[|\emph{num}\verb|]{|%
\emph{początek}\verb|}{|\emph{koniec}\verb|}|
\end{command}
%
\noindent
Podobnie jak w~wypadku \verb|\newcommand|, można instrukcji
\ci{newenvironment} użyć z~argumentem opcjonalnym albo bez niego.
{\LaTeX} wstawia tekst \emph{początek}, gdy w~dokumencie napotyka napis
\verb+\begin{+\emph{nazwa}\verb+}+, a~zawartość argumentu \emph{koniec}
-- po napotkaniu napisu \verb|\end{|\emph{nazwa}\verb|}|.
Poniższy przykład ilustruje sposób użycia
instrukcji \ci{newenvironment}.
%
\begin{example}
\newenvironment{zrodlo}
{Źródło: }{\par}
% następnie po \begin{document}:
\begin{zrodlo} Rocznik Statystyczny
GUS. \end{zrodlo}
\end{example}
%
\noindent
Znaczenie argumentu \emph{num} jest takie samo jak w~instrukcji
\verb|\newcommand|.
{\LaTeX} nie pozwala zdefiniować otoczenia o~już istniejącej nazwie.
W~razie potrzeby zastąpienia już istniejącego otoczenia
powinniśmy użyć polecenia \ci{renewenvironment}, o~składni takiej samej
jak \ci{newenvironment}.
% to jest zbędne [tp]:
% Polecenia użyte w~powyższym przykładzie są objaśniane dalej. O~poleceniu
% \ci{rule} można przeczytać na stronie \pageref{sec:rule}, o~\ci{stretch}
% -- na stronie \pageref{cmd:stretch}, a~informacje na temat \ci{hspace}
% można znaleźć na stronie \pageref{sec:hspace}.
\subsection{Nadmiarowe odstępy}
Gdy tworzymy nowe otoczenie, problemem mogą być zbędne
%, niechciane przez nas %% źle się łamie strona
odstępy, które {\LaTeX} wstawia do składu. Rozważmy przykład
otoczenia, które ma się rozpoczynać od akapitu bez wcięcia, ponadto
pierwszy akapit po otoczeniu także nie ma mieć wcięcia. Polecenie
\ci{ignorespaces}, umieszczone jako ostatnie polecenie bloku
\emph{begin\/} otoczenia, spowoduje zignorowanie wszystkich %znaków
odstępów występujących przed pierwszym akapitem otoczenia. Usunięcie
drugiego wcięcia przez umieszczenie w~bloku końcowym \ci{ignorespaces}
jest niemożliwe, gdyż zawsze ostatnim poleceniem będzie
\verb@\end{otoczenie}@, które anuluje działanie \ci{ignorespaces}.
W~takiej sytuacji trzeba skorzystać z~polecenia
\ci{ignorespacesafterend}. Napotkawszy je, {\LaTeX} wstawi
\ci{ignorespaces} dopiero po wykonaniu zamykającego
\verb|\end{otoczenie}|.
%%
\begin{example}
\newenvironment{proste}%
{\noindent}%
{\par\noindent}
\begin{proste}
Zobacz odstęp\\z~lewej strony.
\end{proste}
Tak samo\\tutaj.
\end{example}
\begin{example}
\newenvironment{poprawne}%
{\noindent\ignorespaces}%
{\par\noindent%
\ignorespacesafterend}
\begin{poprawne}
Bez odstępu\\z lewej strony.
\end{poprawne}
Tak samo\\tutaj.
\end{example}
% Poniższe jest zupełnie niepotrzebne [tp]:
% \subsection{Wywoływanie \LaTeX{}a w~linii rozkazowej}
% Użytkownicy systemów operacyjnych typu Unix do obsługi projektów
% \LaTeX{}owych stosują zapewne pliki Makefile. W~tym kontekście
% ciekawa byłaby możliwość tworzenia różnych wersji tego samego dokumentu
% metodą podawaniu różnych parametrów w~linii rozkazowej
% wołającej \LaTeX{}a. Możemy to ułatwić, umieszczając w~dokumencie
% coś takiego:
% \begin{verbatim}
% \usepackage{ifthen}
% \ifthenelse{\equal{\blackandwhite}{true}}{
% % coś robimy w~trybie "czarno--białym"
% }{
% % robimy coś innego w~trybie "kolorowym"
% }
% \end{verbatim}
% Możemy teraz wywołać \LaTeX{}a w~następujący sposób:
% \begin{verbatim}
% latex '\newcommand{\blackandwhite}{true}\input{test.tex}'
% \end{verbatim}
% Polecenie \verb|\blackandwhite| zostaje zdefiniowane jeszcze przed
% odczytem pliku źródłowego. Zmieniając \verb|\blackandwhite| na
% \ci{false} spowodujemy generowanie kolorowej wersji dokumentu.
\subsection{Własne pakiety}
W~wypadku definiowania wielu nowych poleceń i~otoczeń preambuła
dokumentu może się znacznie wydłużyć. Dobrze w~takiej sytuacji stworzyć
pakiet zawierający definicje tych instrukcji i~otoczeń. Taki pakiet
można później dołączyć do dokumentu poleceniem \ci{usepackage}.
\begin{figure}[!htbp]
\begin{lined}{\textwidth}
\begin{verbatim}
% Przykładowy pakiet ***
\ProvidesPackage{demopack}
\newcommand{\kwle}{Krótkie wprowadzenie do systemu \LaTeXe}
\newcommand{\wle}[1]{\emph{#1} wprowadzenie
do systemu \LaTeXe}
\newenvironment{zrodlo}{Źródło: }{\par}
\end{verbatim}
\end{lined}
\caption{Przykładowy pakiet\label{package} }
\end{figure}
\noindent
Tworzenie pakietu polega na skopiowaniu poleceń z~preambuły do
oddzielnego pliku o~rozszerzeniu \eei{.sty}.
Na początku pakietu należy wpisać polecenie:
%
\begin{command}
\ci{ProvidesPackage}\verb|{|\emph{nazwa}\verb|}|
\end{command}
%
\noindent
Dzięki instrukcji \verb|\ProvidesPackage| {\LaTeX} poznaje nazwę
pakietu, a~to pozwala mu na przykład ostrzec użytkownika
w~wypadku powtórnego dołączenia pakietu do dokumentu.
Rysunek~\ref{package} przedstawia niewielki pakiet z~instrukcjami
z~powyższych przykładów.
\section{Fonty}
\subsection{Instrukcje przełączające stopień pisma }
{\LaTeX} automatycznie
%%dostosowuje
dobiera
krój, odmianę i~stopień pisma\footnote{%
\emph{Pismo drukarskie\index{pismo!drukarskie}\/} to pismo utrwalone
na nośniku, tj.~materiale, na którym umieszczono negatywy lub pozytywy
znaków pisma. \emph{Krój pisma}\index{pismo!krój} to obraz pisma
drukarskiego o~jednolitych cechach graficznych, niezależnych od
stopnia i~odmiany pisma. Każdy krój pisma posiada swoją nazwę (na
przykład Times New Roman, Computer Modern czy Garamond). \emph{Odmiana
kroju}\index{pismo!odmiana} pisma różnicuje pisma jednego kroju ze
względu na grubość, szerokość i~pochylenie. \emph{Stopień
pisma}\index{pismo!stopień} określa z~kolei wielkość znaków. Zestawy
metalowych \emph{czcionek}\index{czcionka|see{pismo drukarskie}},
czyli kawałków metalu,
w~których utrwalano znaki pisma, drukarze przechowywali
w~\emph{kasztach}\index{kaszta}. Angielską, a~właściwie amerykańską
nazwą zestawu czcionek jednego kroju i~wielkości, powszechnie dziś
używaną w~terminologii komputerowej, jest \emph{font}\index{font}
(zobacz też~\cite{chwialowski}).
Fonty {\LaTeX}a, takie jak \acro{PL}, \acro{EC} czy \acro{LM}, są
optycznie identyczne, bo wszystkie są replikami kroju \emph{Computer
Modern}, różnią się jednak od najczęściej używanego
w~edytorach biurowych, takich jak {\MSWord}, kroju \emph{Times New
Roman}. }
%% do logicznego charakteru składanych
dla różnych
elementów dokumentu (tytułów
rozdziałów, punktów, przypisów itp.). Czasami zachodzi jednak potrzeba
,,ręcznego'' przełączenia kroju bądź stopnia pisma. Można do tego
użyć poleceń zestawionych w~tabelach~\ref{fonts} i~\ref{sizes}.
Stopień pisma jest kwestią układu graficznego dokumentu i~zależy od
wybranej klasy dokumentu oraz ustawienia odpowiednich opcji.
W~tabeli~\ref{tab:ptsizes} zestawiono stopnie pisma w~jednostkach
absolutnych dla poleceń zmieniających wielkość kroju w~standardowych
klasach dokumentów.
%
\begin{example}
{\small Nieliczni lecz
\textbf{odważni} Rzymianie rządzili}
{\Large wielką \textit{Italią}.}
\end{example}
%
\noindent
Bieżący font jest w~{\LaTeX}u scharakteryzowany przez pięć elementów:
układ (zestaw znaków), krój (rodzinę), grubość i~szerokość, odmianę oraz
stopień i~interlinię. Każdy z~nich można dobrać niezależnie od
ustawienia pozostałych. Oznacza to na przykład, że zmiana stopnia
pisma nie powoduje zmiany jego kroju ani odmiany.
\begin{table}[!bth]
\caption{Polecenia wyboru krojów i~odmian \label{fonts}}
\begin{lined}{12.5cm}
%
% Alan suggested not to tell about the other form of the command
% eg \verb|\sffamily| or \verb|\bfseries|. This seems a good thing to me.
%
\tabcolsep=.5\tabcolsep
\begin{tabular}{@{}rl@{\quad}rl@{}}
\ci{textrm}\verb|{...}| & \textrm{krój szeryfowy} &
\ci{textsf}\verb|{...}| & \textsf{krój bezszeryfowy} \\
\ci{texttt}\verb|{...}| & \multicolumn{3}{l}{\texttt{grotesk},
tj. pismo o~jednakowej szerokości znaków} \\[6pt]
\ci{textmd}\verb|{...}| & \textmd{pismo jasne} &
\ci{textbf}\verb|{...}| & \textbf{pismo grube} \\[6pt]
\ci{textup}\verb|{...}| & \textup{odmiana prosta} &
\ci{textit}\verb|{...}| & \textit{kursywa} \\
\ci{textsl}\verb|{...}| & \textsl{odmiana pochyła}&
\ci{textsc}\verb|{...}| & \textsc{kapitaliki} \\[6pt]
\ci{emph}\verb|{...}| & \emph{wyróżnienie} \\
\ci{textnormal}\verb|{...}| & \multicolumn{2}{l}{główny font dokumentu}
\end{tabular}
\end{lined}
\vspace{-2.0ex}
\end{table}
\begin{table}[!tbh]
\caption{Polecenia jednoczesnego wyboru stopnia pisma
i~interlinii\index{stopień pisma}\label{sizes} }
\begin{lined}{12.5cm}
\begin{tabular}{@{}ll}
\ci{tiny} & \tiny mikroskopijny \\
\ci{scriptsize} & \scriptsize bardzo mały \\
\ci{footnotesize} & \footnotesize mniejszy \\
\ci{small} & \small mały \\
\ci{normalsize} & \normalsize normalny \\
\ci{large} & \large duży
\end{tabular}%
\qquad\begin{tabular}{ll@{}}
\ci{Large} & \Large większy \\[5pt]
\ci{LARGE} & \LARGE bardzo duży \\[5pt]
\ci{huge} & \huge ogromny \\[5pt]
\ci{Huge} & \Huge największy
\end{tabular}
\end{lined}
\end{table}
Przy okazji omawiania poleceń dotyczących fontów trzeba wspomnieć
o~koncepcji \emph{grupowania}. Grupa\index{grupa} zaczyna
się od znaku \verb+{+, a~kończy znakiem \verb+}+. Grupy służą
do ograniczania zasięgu działania poleceń {\LaTeX}a. Przyjrzyjmy się
następującemu przykładowi:
%
\begin{example}
Lubię {\LARGE duże oraz
{\small małe} litery} i~cyfry.
\end{example}
%
%%
Pierwszy nawias klamrowy rozpoczyna grupę, potem polecenie
\verb+\LARGE+ zmienia stopień pisma na \emph{bardzo duży}, w~którym
zostanie złożony napis ,,duże oraz''. Kolejny otwierający nawias
klamrowy zaczyna następną grupę. W~jej obrębie polecenie \verb+\small+ zmienia
stopień pisma na mały. Do złożenia w~tym stopniu przewidziano jedynie słowo
,,małe'', bo nawias \verb+}+ za tym słowem zamyka grupę. Po zamknięciu
grupy następuje powrót do stopnia pisma aktualnego przed jej
rozpoczęciem, czyli \verb+\LARGE+. W~nim zostanie złożone
słowo ,,litery''. Zamknięcie tej grupy powoduje, że resztę tekstu
{\LaTeX} złoży w~wyjściowym stopniu pisma. Jak widać, grupy można
zagnieżdżać, nawet wielokrotnie.
%%
\noindent
Polecenia zmieniające stopień pisma zmieniają także interlinię. Dzieje
się tak jednak tylko wtedy, gdy \emph{przed} zamknięciem odpowiedniej
grupy kończony jest akapit -- przez wstawienie pustego wiersza
\emph{lub} polecenia \ci{par}. Zwróćmy uwagę na miejsce, w~którym
umieszczono instrukcję \verb|\par| w~poniższych dwóch przykładach.
%
\begin{example}
{\Large Zdanie, które ma więcej
niż pięć słów, nie ma sensu!\par}
\end{example}
%
\begin{example}
{\Large Zdanie, które ma więcej
niż pięć słów, nie ma sensu!}\par
\end{example}
%
\noindent
Jeśli zachodzi konieczność zmiany stopnia pisma dla całego akapitu lub jeszcze
dłuższego tekstu, to możemy skorzystać ze składni przyjętej dla otoczeń:
%
\begin{example}
\begin{Large} Zdanie, które ma
więcej niż pięć słów, nie ma sensu!
\end{Large}
\end{example}
%
\noindent
Zapis taki pozwala unikać łatwych do popełnienia błędów, wynikających
z~opuszczania nawiasów otwierających lub zamykających grupy.
% [RK] usuwam ten akapit jako nieobecny w oryginale, nieoznakowany
% przez TP i w ogóle mało niosący informacji (powtarza to, co
% w nagłówku tabeli.
% Stopień pisma jest kwestią układu graficznego dokumentu i~zależy od
% wybranej klasy dokumentu i~ustawienia odpowiednich opcji.
% W~tabeli~\ref{tab:ptsizes} zestawiono stopnie pisma, wyrażone
% w~jednostkach absolutnych, dla poleceń ustalających wielkość kroju
% w~standardowych klasach dokumentów.
\begin{table}[!tb]
\caption{Wielkość stopnia pisma w~klasach standardowych\label{tab:ptsizes}}
\label{tab:sizes}
\begin{lined}{12.5cm}
\tabcolsep=1.75em
\begin{tabular}{lrrr}
\multicolumn{1}{c}{\emph{Stopień}} & \multicolumn{1}{c}{\emph{10pt}} &
\multicolumn{1}{c}{\emph{opcja 11pt}} &
\multicolumn{1}{c}{\emph{opcja 12pt}} \\[4.5pt]
\verb|\tiny| & 5pt & 6pt & 6pt \\
\verb|\scriptsize| & 7pt & 8pt & 8pt \\
\verb|\footnotesize| & 8pt & 9pt & 10pt \\
\verb|\small| & 9pt & 10pt & 11pt \\
\verb|\normalsize| & 10pt & 11pt & 12pt \\
\verb|\large| & 12pt & 12pt & 14pt \\
\verb|\Large| & 14pt & 14pt & 17pt \\
\verb|\LARGE| & 17pt & 17pt & 20pt \\
\verb|\huge| & 20pt & 20pt & 25pt \\
\verb|\Huge| & 25pt & 25pt & 25pt
\end{tabular}
\end{lined}
\vspace{-2.0ex}
\end{table}
W~\emph{trybie matematycznym} w~celu złożenia fragmentu wzoru innym
niż pochyłe krojem pisma można zastosować polecenia zestawione
w~tabeli~\ref{mathfonts}.
\begin{table}[!tb]
\caption{Polecenia wyboru fontów w~trybie matematycznym\label{mathfonts} }
\begin{lined}{\textwidth}
\begin{tabular}{@{}lll@{}}
\textit{Polecenie}&\textit{Przykład}& \textit{Wynik\strut}\\ \hline
\ci{mathcal}\verb|{...}|& \verb|$\mathcal{B}=c$|& $\mathcal{B}=c$\\
\ci{mathrm}\verb|{...}|& \verb|$\mathrm{K}_2$|& $\mathrm{K}_2$\\
\ci{mathbf}\verb|{...}|& \verb|$\sum x=\mathbf{v}$|& $\sum x=\mathbf{v}$\\
\ci{mathsf}\verb|{...}|& \verb|$\mathsf{G\times R}$|& $\mathsf{G\times
R}$\\
\ci{mathtt}\verb|{...}|& \verb|$\mathtt{L}(b,c)$|& $\mathtt{L}(b,c)$\\
\ci{mathnormal}\verb|{...}|& \verb|$\mathnormal{R_{19}}\neq R_{19}$|&
$\mathnormal{R_{19}}\neq R_{19}$\\
\ci{mathit}\verb|{...}|& \verb|$\mathit{ffi}\neq ffi$|& $\mathit{ffi}\neq
ffi$
\end{tabular}
\end{lined}
\end{table}
\subsection{Uwaga, niebezpieczeństwo! }
Jak zaznaczyliśmy na początku rozdziału, nie należy instrukcji zmiany
fontu wstawiać \emph{explicite} do pliku źródłowego. Byłoby to niezgodne
z~podstawową ideą {\LaTeX}a, jaką jest oddzielenie formy od treści
dokumentu i~posługiwanie się formatowaniem logicznym, a~nie wizualnym.
Jeżeli fragment tekstu ma zostać wyróżniony przez złożenie go innym
krojem lub stopniem pisma, to należy zdefiniować odpowiednie polecenie
i~potem właśnie jego używać w~treści dokumentu.
%
\begin{example}
% w~preambule albo pakiecie
\newcommand{\uwaga}[1]{\textbf{#1}}
% po \begin{document}
\uwaga{Baczność!} Przewody sieci
trakcyjnej są pod napięciem.
Dotknięcie grozi \uwaga{śmiercią}.
\end{example}
%
\noindent
Niewątpliwą zaletą tego podejścia jest to, że kiedy później będziemy
chcieli wyróżnić wszystkie elementy, na które czytelnik powinien
zwrócić \emph{szczególną uwagę}, w~sposób inny niż składając je pismem
półgrubym, to nie musimy przeglądać całego pliku w~celu sprawdzenia,
czy dane wystąpienie \ci{textbf} dotyczy tekstu, na który ma zostać
zwrócona \emph{szczególna uwaga}, czy też wstawione zostało w~zupełnie
innym celu.
\medskip
\noindent
%%
\EMPH{Na zakończenie rada z~gatunku estetycznych}: nie należy
przesadzać ze stosowaniem wielu różnych krojów pisma w~jednym
dokumencie.
%%
\subsection{Użycie alternatywnych krojów pisma}
Większość dokumentów jest składanych w~{\LaTeX}u z~użyciem domyślnego
kroju, będącego repliką \emph{Computer Modern}. Jeżeli wygląd znaków
z~rodziny \acro{CM} nam się znuży, to możemy złożyć dokument innym
krojem. Musimy jednak pamiętać, że na ogół alternatywne kroje nie są tak
kompletne jak rodzina \emph{Computer Modern}, często na przykład brakuje
w~nich kompletu symboli matematycznych, znaków z~alfabetów
niełacińskich, takich jak greka lub alfabet cyrylicki, albo niektórych
odmian, jak na przykład kapitalików.
Z~drugiej strony krój \acro{CM} ma też wady: kreski znaków są cieńsze, a
względna wysokość małych liter\footnote{Względna w~porównaniu do
nominalnego stopnia pisma;
wysokość ta wynosi dla kroju \acro{CM} 43\%, a dla
kroju Palatino -- 46\%; dla dużych liter z~tych krojów jest
to odpowiednio: 68,9\% i~68,5\%.} jest mniejsza niż w~wielu innych
krojach. Te cechy kroju \acro{CM} powodują, że jest mniej czytelny
w~wypadku, gdy jest reprodukowany na nośniku o~niskiej rozdzielczości,
lub -- mówiąc wprost -- nie najlepiej się nadaje do dokumentów, które będą
wyświetlane na ekranach komputerów, np.~dokumentów w~formacie \acro{PDF}.
Pakiet~\pai{qtimes} umożliwia skład dokumentu w~kroju QTimes,
który jest klonem znanego kroju Times New Roman autorstwa Stanleya
Morisona\index{Morison Stanley}.
Jeżeli dokument zawiera wzory matematyczne, to aby znaki
w~formułach były optycznie zgodne z~otaczającym je tekstem, należy także
dołączyć pakiety \pai{txfonts} oraz \pai{qtxmath}:
%%
\begin{code}
\begin{verbatim}
%& --translate-file=il2-pl
\documentclass[a4paper]{article}
\usepackage{polski}
\usepackage{txfonts,qtimes,qtxmath}
\usepackage{qswiss,qcourier}
\usepackage{sfheaders}
\author{Wanda Przechlewska}
\title{Test pakietu txfonts}
\begin{document} ...
\end{verbatim}
\end{code}
%%
Z~kolei pakiet~\pai{qpalatin} wraz z~pakietami \pai{qpxmath} oraz
\pai{pxfonts} umożliwia skład dokumentu krojem QPalatino
(łącznie ze wzorami matematycznymi), który jest klonem znanego kroju
Palatino autorstwa Hermanna Zapfa\index{Zapf Hermann}:
%%
\begin{code}
\begin{verbatim}
%& --translate-file=il2-pl
\documentclass[a4paper]{article}
\usepackage{polski}
\usepackage{pxfonts,qpalatin,qpxmath}
\usepackage{qswiss,qcourier}
\usepackage{sfheaders}
\author{Maria Matysek}
\title{Test pakietu qpxfonts}
\begin{document} ...
\end{verbatim}
\end{code}
%%
W~powyższych przykładach dołączono także pakiety \pai{qswiss},
\pai{sfheaders} oraz \pai{qcourier}. Pakiet \pai{qswiss} przestawia
domyślą odmianę bezszeryfową na krój Helvetica, a~\pai{sfheaders}
przedefiniowuje śródtytuły tak, że składane są krojem bezszeryfowym.
Z~kolei \pai{qcourier} zamienia domyślny krój o~stałej szerokości znaków
na QCourier. W~rezultacie pierwszy z~dokumentów będzie podobny do
typowego dokumentu składanego na przykład edytorem {\MSWord}; drugi
z~kolei będzie się doskonale nadawał do dokumentu \acro{PDF}, który
chcemy umieścić w~sieci \acro{WWW}, z~uwagi na to, że krój Palatino --
reprodukowany w~niskiej rozdzielczości -- jest dużo bardziej czytelny
niż \acro{CM}, a nawet \emph{Times New Roman}. Uwaga: aby powyższe
deklaracje zadziałały, instalacja {\LaTeX}a musi zawierać
ww.~fonty\footnote{Wchodzą one w~skład współczesnych dystrybucji
{\LaTeX}a. Jeżeli ich nie masz, to powinieneś je doinstalować.
W~dokumentacji dystrybucji powinno być opisane, jak się to robi.}.
\section{Odstępy }
\subsection{Zmiana wielkości interlinii\index{interlinia} }
% Odstęp %%
Często wygodnie jest użyć odległości ,,elastycznej'',
zostawiając {\LaTeX}owi nieco swobody doboru
takiej odległości, jaką uzna za najlepszą z~punktu widzenia
jakości składu. Taką
elastyczną odległość zapisujemy następująco:
\emph{n}~\verb+plus+~\emph{p} \verb+minus+~\emph{m}.
Części ,,\verb+plus+~\emph{p}'' i~,,\verb+minus+~\emph{m}'' są
opcjonalne (każdą z~nich można pominąć).
Tego typu odległości mają naturalną wielkość \emph{n} i~mogą się
kurczyć lub~rozciągać w~zakresie od $\emph{n} - \emph{m}$
do $\emph{n} + \emph{p}$.
Omawiany wcześniej odstęp między akapitami (\verb+\parskip+) jest
przykładem {\LaTeX}owego wymiaru o~zmiennej wielkości. Część wymiarów
może mieć wartości zmienne, część jednak musi mieć wartość stałą.
Powinno być na przykład zrozumiałe, że wcięcie akapitowe musi być
wielkością stałą, podobnie jak szerokość i~wysokość łamu.
%%
Polecenie\label{cmd:stretch}:
%
\begin{command}
\ci{stretch}\verb|{|\emph{n}\verb|}|
\end{command}
%
\noindent
wstawia specjalny rozciągliwy odstęp, który potrafi wypełnić całą wolną
przestrzeń w~pionie lub w~poziomie. Jeżeli na przykład wstawimy
w~wierszu dwa lub więcej poleceń
\verb|\hspace{\stretch{|\emph{n}\verb|}}|, to odstępy dzięki nim
uzyskane będą miały wielkość według proporcji zadanych przez
argument~\emph{n}.
W~poniższym przykładzie odstęp między~\emph{x\/} a~\emph{y\/}~jest trzy
razy mniejszy od odstępu między~\emph{y\/}~a~\emph{z}.
%
\begin{example}
x\hspace{\stretch{1}}
y\hspace{\stretch{3}}z
\end{example}
%
\noindent
Wielkość odstępów towarzyszących tekstowi warto dostosować do aktualnego
rozmiaru czcionki. Można do tego użyć względnych jednostek miary
\texttt{em} oraz \texttt{ex}:
%
\begin{example}
{\Large{}big\hspace{1em}y} \quad
{\tiny{}tin\hspace{1em}y}
\end{example}
%
\noindent
\label{quad:def}%%
Przypominamy, że polecenia \ci{quad} i~\ci{qquad} wstawiają
odstęp poziomy o~szerokości, odpowiednio, 1\,em oraz 2\,em.
\subsection{Odstępy pionowe}
Odstępy pionowe między akapitami, rozdziałami, punktami itp. {\LaTeX}
wstawia automatycznie. Jeśli zachodzi potrzeba wstawienia dodatkowego
odstępu pionowego, to należy zastosować polecenie:
%
\begin{command}
\ci{vspace}\verb|{|\emph{odległość}\verb|}|
\end{command}
%
\noindent
Polecenie to należy oddzielić pustymi liniami od otaczającego je tekstu.
Jeżeli w~wyniku złamania strony odstęp taki znajdzie się na początku lub
na końcu strony (będzie zaczynał lub też kończył kolumnę tekstu), to
zostanie on usunięty. Jeżeli ma zostać wstawiony także na początku lub
końcu strony, to należy użyć wersji ,,gwiazdkowej''
\ci{vspace*}\footnote{Zwróćmy uwagę, że w~takim wypadku
wysokość kolumny tekstu na sąsiednich stronach nie będzie jednakowa,
stosujmy zatem polecenie \ci{vspace*} z~pewną
ostrożnością.}. Argument \emph{odległość} oznacza
{\LaTeX}owy wymiar.
Do rozmieszczania tekstu kolumny w~pionie można używać
polecenia \ci{stretch}, łącznie z~\ci{pagebreak}. W~poniższym
przykładzie tekst zostanie rozmieszczony tak, że odstęp u~dołu będzie
dwa razy mniejszy od odstępu u~góry strony:
%
\begin{code}
\begin{verbatim}
\vspace{\stretch{1}}
Tytuł i~autor
\vspace{\stretch{2}}\pagebreak
\end{verbatim}
\end{code}
%
\noindent
Dodatkowy odstęp między dwoma wierszami tego samego akapitu lub
między wierszami tabeli możemy uzyskać poleceniem:
%
\begin{command}
\ci{\bs}\verb|[|\emph{odległość}\verb|]|
\end{command}
\noindent
%%
Polecenia \ci{bigskip}, \ci{medskip} i~\ci{smallskip} wstawiają
odpowiednio odstępy ,,elastyczne'' o~następujących wielkościach: 12pt
$\pm$~4pt, 6pt $\pm$~2pt oraz 3pt $\pm$~1pt\footnote{Nie są to wielkości
przypadkowe: 12~punktów to typowa odległość między liniami
podstawowymi wierszy przy składzie pismem w~stopniu 10~punktów.}.
\section{Układ graficzny strony}
Wymiary papieru można podać jako argumenty instrukcji
\verb+\documentclass+. Na podstawie zadeklarowanych wymiarów
{\LaTeX} oblicza szerokość i~wysokość kolumny, marginesy i~inne parametry.
Na rysunku~\ref{fig:layout} przedstawiono dostępne parametry
graficznego układu strony. Do przygotowania rysunku użyliśmy
pakietu \pai{layout} z~zestawu ,,tools''%
\footnote{\CTAN{macros/latex/packages/tools}.}.
Jeżeli obliczone przez {\LaTeX}a wartości są z~pewnych względów
nieodpowiednie, to można je zmienić.
\begin{figure}[!hp]
\centering
\makeatletter\@layout\makeatother
%%
\vspace*{1.8cm}
\caption{Parametry układu graficznego strony \label{fig:layout}}
\cih{footskip}
\cih{headheight}
\cih{headsep}
\cih{marginparpush}
\cih{marginparsep}
\cih{marginparwidth}
\cih{oddsidemargin}
\cih{paperheight}
\cih{paperwidth}
\cih{textheight}
\cih{textwidth}
\cih{topmargin}
\end{figure}
Zanim jednak zaczniemy eksperymentować, zwiększając na przykład
szerokość szpalty, chwilę pomyślmy. Jak dla większości rzeczy w~{\LaTeX}u,
istnieją ważne powody, dlaczego szerokość szpalty jest
taka a~nie inna.
Z~pewnością w~porównaniu z~wydrukiem przygotowanym za pomocą świeżo
kupionego programu {\MSWord} strona {\LaTeX}owa ma denerwująco wąską
szpaltę. Ale spójrzmy na książkę z~renomowanego wydawnictwa i~policzmy
na niej liczbę znaków w~przeciętnym wierszu. Okaże się, że wynosi ona
około 66. Jeśli porównamy ją z~wydrukiem złożonym przez {\LaTeX}a, to
zapewne i~tym razem będzie ona zbliżona do 66. Z~doświadczeń wynika bowiem,
że w~miarę wzrostu liczby znaków w~wierszu czytanie staje się
męczące. Dzieje się tak, gdyż przy długich wierszach naszym
oczom trudniej jest przenosić wzrok z~końca jednego wiersza na
początek następnego. Jest to jedna z~przyczyn stosowania składu
wielołamowego w~gazetach i~czasopismach.
Tak więc, jeśli zwiększamy szerokość kolumny, to pamiętajmy, że może to
utrudnić odbiorcom czytanie naszej pracy.
No, ale dość już kazań.
Obiecaliśmy przecież wyjaśnić, jak można te rzeczy robić\dots
W~{\LaTeX}u mamy dwie instrukcje do zmiany wielkości wymiarów,
używane zazwyczaj w~obrębie preambuły dokumentu.
Pierwsza z~nich \emph{nadaje} parametrowi określoną wielkość:%
%%
\begin{command}
\ci{setlength}\verb|{|\emph{parametr}\verb|}{|\emph{wielkość}\verb|}| \par
\end{command}
%%
\noindent
Drugie polecenie \emph{zwiększa} wartość parametru
o~określoną wielkość:
\noindent
\begin{command}
\ci{addtolength}\verb|{|\emph{parametr}\verb|}{|\emph{wielkość}\verb|}|
\end{command}
%
\noindent
Z~tej pary częściej stosowana
jest druga instrukcja, ponieważ pozwala zmieniać wymiary. Przykładowo, aby
zwiększyć szerokość szpalty o~jeden centymetr, umieszczamy w~preambule
dokumentu następujące polecenia:
%
\begin{code}
\verb|\addtolength{\hoffset}{-0.5cm}|\\
\verb|\addtolength{\textwidth}{1cm}|
\end{code}
Zmianę parametrów układu graficznego strony ułatwia pakiet
\pai{geometry}. W~wykonywaniu operacji arytmetycznych na wymiarach pomaga
pakiet \pai{calc}.
%%
\section{Więcej o~odległościach}
Kiedy to tylko możliwe, unikajmy stosowania wymiarów
zdefiniowanych w~jednostkach absolutnych, takich jak punkty czy
milimetry. Starajmy się raczej odnosić wymiary do już
istniejących, takich jak wysokość czy szerokość kolumny. W~poniższym
przykładzie szerokość rysunku jest definiowana jako połowa szerokości
bieżącej szpalty:
%
\begin{code}
\verb+\includegraphics[width=0.5\textwidth]{sowauszata.eps}+
\end{code}
%
\noindent
Następujące trzy polecenia pozwalają określić szerokość,
wysokość i~głębokość \emph{tekstu}:
%
\begin{command}
\ci{settoheight}\verb|{|\emph{nazwa}\verb|}{|\emph{tekst}\verb|}|\\
\ci{settodepth}\verb|{|\emph{nazwa}\verb|}{|\emph{tekst}\verb|}|\\
\ci{settowidth}\verb|{|\emph{nazwa}\verb|}{|\emph{tekst}\verb|}|
\end{command}
%
\noindent
Oto przykład ilustrujący zastosowanie tych poleceń:
%
\begin{example}
\newenvironment{vardesc}[1]{%
\settowidth{\parindent}{#1:\ }
\makebox[0pt][r]{#1:\ }}{}
\begin{displaymath} a^2+b^2=c^2
\end{displaymath}
\begin{vardesc}{gdzie}%
$a$, $b$ -- przyprostokątne, \par
$c$ -- przeciwprostokątna.
\end{vardesc}
\end{example}
\section{Pudełka \label{sec:boxes}}
Każdą stronę {\LaTeX} tworzy z~pudełek\index{pudełko}, które odpowiednio
skleja. Elementarnymi pudełkami są litery, z~których sklejane są słowa.
Słowa są następnie łączone w~wiersze, a~wiersze -- w~akapity. Do łączenia
używany jest specjalny klej, który dzięki elastyczności pozwala wyrazy
ścisnąć lub rozciągnąć tak, by dokładnie wypełniały wiersze na stronie.
Trzeba przyznać, że takie ujęcie jest mocno uproszczoną wersją tego, co
się naprawdę dzieje, chociaż zasadniczo biorąc, działanie {\TeX}a można
jednak wyjaśnić właśnie w~terminach pudełek oraz kleju\index{klej}
(odstępu wstawianego między pudełkami). Pudełkami są nie tylko litery.
Do pudełka można włożyć praktycznie wszystko, także inne pudełka. Każde
pudełko {\LaTeX} traktuje jak pojedynczą literę.
Chociaż nie mówiliśmy o~tym wprost, pudełka pojawiały się już
w~poprzednich rozdziałach. Na przykład polecenie \ci{includegraphics}
albo otoczenie \ei{tabular} tworzą pudełka. Dzięki temu dwa rysunki albo
tabele można łatwo zestawić obok siebie. Trzeba jedynie zadbać o~to, by
łączna szerokość połączonych obiektów nie przekraczała szerokości
szpalty.
To samo odnosi się do akapitów, które -- jeśli tego potrzebujemy --
możemy składać w~pudełka o~zadanej szerokości:
%
\begin{command}
\ci{parbox}\verb|[|\emph{pos}\verb|]{|\emph{szerokość}%
\verb|}{|\emph{tekst}\verb|}|
\end{command}
%
\noindent
Do tego samego celu można wykorzystać otoczenie:
%
\begin{command}
\verb|\begin{|\ei{minipage}\verb|}[|\emph{pos}\verb|]{|%
\emph{szerokość}\verb|}| \emph{tekst} \verb|\end{|\ei{minipage}\verb|}|
\end{command}
%
\noindent
Argument \emph{szerokość} to wymiar określający szerokość pudełka.
Argument \emph{pos\/} jest jednoliterowy i~może przyjmować jedną
z~wartości: \texttt{c}, \texttt{t} lub \texttt{b}. Wartości te
określają, jak {\LaTeX} ma umieścić pudełko względem otaczającego
tekstu. Wartość \verb|c| oznacza umieszczenie środka wysokości pudełka
na linii podstawowej\index{linia podstawowa}, \verb|t| -- umieszczenie
linii podstawowej pierwszego wiersza w~pudełku na linii
podstawowej\index{linia podstawowa} otaczającego tekstu, natomiast
\verb|b| -- umieszczenie dolnej krawędzi pudełka na linii
podstawowej\index{linia podstawowa}. Wynik zastosowania parametrów
ilustruje poniższy przykład (linię podstawową\index{linia podstawowa}
oznaczono kreską):
%%
\iffalse
%% JG
Główna różnica między \ci{parbox} a~\pai{minipage} polega na tym, że
wewnątrz \verb|parbox| nie wszystkie polecenia i~otoczenia są dozwolone,
w~przeciwieństwie do otoczenia \verb|minipage|.
\fi
%%
%%
\begin{example}
\makebox[0pt][l]{\rule{66mm}{.4pt}}%
\parbox[c]{9mm}{5 5 5 5 5 5 5 5 5}
\parbox[t]{9mm}{6 6 6 6 6 6 6 6 6}
\parbox[b]{9mm}{8 8 8 8 8 8 8 8 8}
\end{example}
\bigskip
\noindent
Polecenie \ci{parbox} składa tekst w~pudełku, w~razie potrzeby dzieląc
tekst na linijki. Inaczej jest z~pudełkami uzyskiwanymi
poleceniem \ci{mbox}, których zawartość nigdy nie jest dzielona na
wiersze. Polecenia tego używamy, gdy trzeba zapobiec dzieleniu wyrazu
lub sekwencji wyrazów na wiersze. Polecenie \verb+\mbox+ jest
uproszczoną wersją instrukcji \ci{makebox}, o~składni:
%
\begin{command}
\ci{makebox}\verb|[|\emph{szerokość}\verb|][|\emph{pos}\verb|]{|%
\emph{tekst}\verb|}|
\end{command}
%
\noindent
W~opcjonalnym argumencie \emph{szerokość} możemy zadać szerokość
pudełka. Może się ona różnić od naturalnej szerokości tekstu w~pudełku;
może wynosić zero, a~nawet być wielkością ujemną! W~obrębie argumentu
\emph{szerokość} możemy się też posługiwać wielkościami \ci{width}
(szerokość), \ci{height} (wysokość), \ci{depth} (głębokość) oraz
\ci{totalheight} (suma wysokości i~głębokości). Ponadto argument
\emph{pos} określa sposób umieszczenia tekstu. Litera \texttt{c}~oznacza
wyśrodkowanie, \texttt{l}~-- dosunięcie do lewej, \texttt{r}~--
dosunięcie do prawej, a~\texttt{s}~-- wyspacjowanie zawartości.
Poniższy przykład ilustruje użycie polecenia \verb+\width+
w~obrębie argumentu \emph{szerokość}. Pierwsze pudełko ma szerokość
równą połowie naturalnej szerokości tekstu:
%
\begin{example}
\makebox[.5\width][l]{oooooooo}%
\makebox{xxxxxxxx}
\end{example}
\bigskip
\noindent
Polecenie \ci{framebox} działa dokładnie jak \ci{makebox},
z~tym że naokoło pudełka kreślona jest ramka.
Oto przykład zastosowania poleceń \ci{makebox} i~\ci{framebox}:
%
\begingroup
\hbadness 10000
\begin{example}
\makebox[\textwidth]{%
p o ś r o d k u}\par
\makebox[\textwidth][s]{%
r o z s t r z e l o n y}\par
\framebox[1.1\width]{Teraz jestem
obramowany!} \par
\framebox[0.8\width][r]{Trochę
tu jest za szeroko} \par
\framebox[1cm][l]{Nie
ma sprawy}
Da się to czytać?
\end{example}
\endgroup
\bigskip
\noindent
Pudełka można też przesuwać w~pionie. Służy do tego polecenie:
%
\begin{command}
\ci{raisebox}\verb|{|\emph{przesunięcie}\verb|}[|%
\emph{wysokość}\verb|][|\emph{głębokość}\verb|]{|\emph{tekst}\verb|}|
\end{command}
%
\noindent
Argument \emph{przesunięcie} określa wielkość przesunięcia w~górę (lub
w~dół, jeżeli wielkość przesunięcia jest ujemna). Ponadto za pomocą
parametrów opcjonalnych \emph{wysokość} oraz \emph{głębokość} można
zadać nominalną wysokość oraz głębokość pudełka (\LaTeX{} będzie traktował
pudełko tak, jakby miało zadane wymiary, bez względu na wymiary
naturalne). Wewnątrz parametrów można skorzystać z~wielkości
\ci{width}, \ci{height}, \ci{depth} oraz \ci{totalheight}.
\begin{example}
\raisebox{0pt}[0pt][0pt]{\Large%
\textbf{Aaaa\raisebox{-0.3ex}{a}%
\raisebox{-0.7ex}{aa}%
\raisebox{-1.2ex}{r}%
\raisebox{-2.2ex}{g}%
\raisebox{-4.5ex}{h}}}
Krzyczała, ale nikt nie zauważył,
że coś się jej przytrafiło.
\end{example}
\section{Kreski i~podpory \label{sec:rule}}
W~wyniku wykonania polecenia \ci{rule}, postaci:
%
\begin{command}
\ci{rule}\verb+[+\emph{przesunięcie}\verb+]{+%
\emph{szerokość}\verb+}{+\emph{wysokość}\verb+}+
\end{command}
%
\noindent
otrzymujemy w~składzie
czarny prostokąt:
%
\begin{example}
\rule{3mm}{.1pt}%
\rule[-1mm]{5mm}{1cm}%
\rule{3mm}{.1pt}%
\rule[1mm]{1cm}{5mm}%
\rule{3mm}{.1pt}
\end{example}
%
\noindent
Polecenie \ci{rule} służy zwykle do rysowania kresek pionowych
i~poziomych. Na przykład gruba czarna krecha na stronie tytułowej
niniejszego \emph{Wprowadzenia} to wynik zadziałania instrukcji:
%
\begin{code}
\verb+\rule[-1ex]{\textwidth}{5pt}+
\end{code}
%
Parametr \emph{przesunięcie} określa, jak wysoko przesunąć kreskę
ponad linię podstawową\index{linia podstawowa} (lub opuścić
poniżej linii podstawowej, jeśli parametr jest ujemny).
Specjalnym przypadkiem jest kreska o~zerowej szerokości, lecz
o~niezerowej wysokości. Taką kreskę nazywamy \emph{podporą}
(\USemph{strut}). Podpora to często stosowana metoda nadawania
wszystkim elementom jednakowej wysokości. Spójrzmy na poniższy
przykład. Dzięki wstawieniu podpory drugi wiersz ma tę samą wysokość
co pierwszy. Zawartość wiersza trzeciego jest identyczna jak drugiego,
ale w~drugim występuje niewidoczna podpora. Gdyby jej brakowało, to
wysokość drugiego wiersza byłaby mniejsza.
\begin{example}
\begin{tabular}{|c|} \hline
\rule{1pt}{4ex}Pittprop \ldots\\
\hline
\rule{0pt}{4ex}Strut\\ \hline
Strut\\ \hline
\end{tabular}
\end{example}
%%
\section{Więcej o~składaniu tabel~\label{more:tables}}
\subsection{Tabele o~zadanej szerokości}
W~otoczeniu~\ei{tabular} szerokość poszczególnych kolumn tabeli
jest ustalana automatycznie, a~szerokość tabeli jest sumą szerokości
kolumn i~odstępów międzykolumnowych.
Czasami jednak trzeba złożyć tabelę o~z~góry zadanej
szerokości; jest to potrzebne przykładowo wtedy, gdy wszystkie tabele
w~dokumencie mają mieć tę samą szerokość.
Do tego celu można użyć albo otoczenia \ei{tabular*},
albo otoczenia \ei{tabularx} z~pakietu o~tej samej nazwie. Niestety
każdy z~tych sposobów ma poważne ograniczenia funkcjonalne. Rozpocznijmy
od otoczenia \ei{tabular*}, które różni się od \ei{tabular}
tylko jednym dodatkowym parametrem
obowiązkowym, określającym szerokość tabeli:
%
\begin{command}
\verb|\begin{tabular*}{|\emph{szerokość}\verb|}{|\emph{spec-kolumn}\verb|}|
\end{command}
%
\noindent
Rozważmy przykład tabeli zawierającej najważniejsze ,,parametry''
słynnych wzniesień i~przełęczy:
\begin{code}
\begin{verbatim}
\begin{tabular}{|l|r|r|r|r|r|}\hline
Nazwa & \multicolumn{2}{|c|}{Wys. w~m~n.p.m.} &
Długość & \multicolumn{2}{|c|}{Nachylenie \%}\\
\cline{2-3} \cline{5-6}% \cline można wstawiać wielokrotnie
& początek & koniec & w~km & śr. & max \\ \hline
Col du Galibier & 1401 & 2646 & 18,1 & 6,9\% & 14,5 \\
Alpe D'Huez & 724 & 1815 & 14,2 & 7,7\% & 15,0 \\
Passo Gavia & 1734 & 2618 & 13,5 & 6,5\% & 20,0 \\ \hline
\end{tabular}
\end{verbatim}
\end{code}
\noindent
Złożone tabele wyglądają następująco:
\par
\medskip
\noindent%%<-- ważne
\begin{tabular}{|l|r|r|r|r|r|}\hline
Nazwa & \multicolumn{2}{c|}{Wys. w~m~n.p.m.} & Długość & \multicolumn{2}{c|}{Nachylenie \%}\\
\cline{2-3} \cline{5-6}
& początek & koniec & w~km & śr. & max \\ \hline
Col du Galibier & 1401 & 2646 & 18,1 & 6,9\% & 14,5 \\
Alpe D'Huez & 724 & 1815 & 14,2 & 7,7\% & 15,0 \\
Passo Gavia & 1734 & 2618 & 13,5 & 6,5\% & 20,0 \\ \hline
\end{tabular}
\par
\medskip
%%
\noindent
Jeżeli tabela ma być złożona na przykład
na szerokość łamu, to zastępujemy \ei{tabular}
jego wersją z~gwiazdką oraz modyfikujemy preambułę tabeli:
\begin{code}
\begin{verbatim}
\begin{tabular*}{\textwidth}%
{@{\extracolsep{\stretch{1}}}|l|r|r|r|r|r|}\hline ...
\end{tabular}
\end{verbatim}
\end{code}
%%
\noindent
Złożona tabela wygląda następująco:
\par \medskip
\noindent%%<-- ważne
\begin{tabular*}{\textwidth}%
{@{\extracolsep{\stretch{1}}}|l|r|r|r|r|r|}\hline
Nazwa & \multicolumn{2}{c|}{Wys. w~m~n.p.m.} & Długość & \multicolumn{2}{c|}{Nachylenie \%}\\
\cline{2-3} \cline{5-6}
& początek & koniec & w~km & śr. & max \\ \hline
Col du Galibier & 1401 & 2646 & 18,1 & 6,9\% & 14,5 \\
Alpe D'Huez & 724 & 1815 & 14,2 & 7,7\% & 15,0 \\
Passo Gavia & 1734 & 2618 & 13,5 & 6,5\% & 20,0 \\ \hline
\end{tabular*}
\par
\medskip
\noindent
Wewnątrz otoczenia \ei{tabular} {\LaTeX} odziela poszczególne kolumny
stałym odstępem równym \ci{tabcolsep}. Do składania tabel o~określonej
szerokości należy ten odstęp zamienić na taki, którego wielkość może się
zmieniać (por.~punkt~\ref{sec:hspace}). Do tego celu należy użyć
wspomnianej w~punkcie~\ref{sec:tabular} (s.~\pageref{sec:tabular-et})
instrukcji \verb+@+. Ponadto polecenie
\ci{extracolsep}, umieszczone wewnątrz instrukcji \verb+@{...}+, wstawia
\emph{dodatkowy odstęp\/} między kolejnymi kolumnami -- do odwołania
poleceniem \ci{extracolsep} albo aż do końca tabeli.
W~powyższym przykładzie polecenie \verb+@{...}+ usuwa domyślny odstęp
międzykolumnowy, zastępując go specjalnym odstępem o~zmiennej wielkości
(taki odstęp wstawia polecenie \ci{stretch}). Manipulując odstępem
międzykolumnowym, {\LaTeX} dopasowuje szerokość tabeli do żądanej
wielkości. Otoczenie \ei{tabular*}
%do prawidłowego działania
powinno zawierać w~specyfikacji formatu kolumn co najmniej jedną
konstrukcję \verb|@{\extracolsep{\stretch{1}}}|. Uważny czytelnik
dostrzeże jednak, że kreski poziome pod pierwszym wierszem między
kolumnami 2--3 oraz 5--6 nie są ,,dociągnięte'' do lewego brzegu.
Niestety nie da się tego naprawić -- przynajmniej nie w~prosty sposób.
Otoczenie \ei{tabular*} nadaje się do składania tabel, ale tylko wtedy,
gdy nie korzystamy zbyt często z~polecenia \ci{cline}.
Spróbujmy teraz zastosować otoczenie \ei{tabularx}. W~tym celu najpierw
do preambuły dokumentu dołączamy pakiet \pai{tabularx}. Następnie
zmieniamy tabelę w~taki sposób (kolumny, których szerokość ma
być wyznaczona automatycznie, oznaczamy symbolem \verb@X@):
\begin{code}
\begin{verbatim}
\begin{tabularx}{\textwidth}{|X|X|X|X|X|X|}\hline
...
\end{tabularx}
\end{verbatim}
\end{code}
\noindent
Złożona tabela wygląda następująco:
\par
\medskip
\begingroup
\hbadness10001 %%<--
\noindent%%<-- ważne
\begin{tabularx}{\textwidth}{|X|X|X|X|X|X|}\hline
Nazwa & \multicolumn{2}{c|}{Wys. w~m~n.p.m.} & Długość & \multicolumn{2}{c|}{Nachylenie \%}\\
\cline{2-3} \cline{5-6}
& początek & koniec & w~km & śr. & max \\ \hline
Col du Galibier & 1401 & 2646 & 18,1 & 6,9\% & 14,5 \\
Alpe D'Huez & 724 & 1815 & 14,2 & 7,7\% & 15,0 \\
Passo Gavia & 1734 & 2618 & 13,5 & 6,5\% & 20,0 \\ \hline
\end{tabularx}
\par
\endgroup
%%
\medskip
\noindent
Teraz wprawdzie wszystkie kreski są elegancko dociągnięte, ale jest
problem z~pierwszą kolumną: jest ona zbyt wąska, a przez to zawartość
rubryk już się nie mieści i~musi zostać przeniesiona\footnote{Ponadto
lepiej, by kolumny 2--6 były wyrównane do prawego, a~nie
do lewego brzegu rubryki.}. Otoczenie \ei{tabularx} automatycznie
dzieli bowiem tabelę wyłącznie na kolumny \emph{o~równej szerokości}.
Jest to jego największe ograniczenie funkcjonalne.
Specyfikacja kolumn tabeli oprócz \verb@X@ może zawierać także wartości
,,tradycyjne'', takie jak: \verb@l@, \verb@r@ lub \verb@c@.
Odpowiadającym tym specyfikacjom kolumny mają naturalną szerokość.
Przykładowo:
%%
\begin{code}
\begin{verbatim}
\begin{tabularx}{\textwidth}{|l|X|X|X|X|X|}\hline
...
\end{tabularx}
\end{verbatim}
\end{code}
%%
\noindent
Akurat w~naszym przykładzie osiągneliśmy zadowalający
rezultat, gotowa tabela wygląda bowiem następująco:
\par
\medskip
\noindent%%<-- ważne
\begin{tabularx}{\textwidth}{|l|X|X|X|X|X|}\hline
Nazwa & \multicolumn{2}{c|}{Wys. w~m~n.p.m.} & Długość & \multicolumn{2}{c|}{Nachylenie \%}\\
\cline{2-3} \cline{5-6}
& początek & koniec & w~km & śr. & max \\ \hline
Col du Galibier & 1401 & 2646 & 18,1 & 6,9\% & 14,5 \\
Alpe D'Huez & 724 & 1815 & 14,2 & 7,7\% & 15,0 \\
Passo Gavia & 1734 & 2618 & 13,5 & 6,5\% & 20,0 \\ \hline
\end{tabularx}
\medskip
Tabele złożone z~użyciem otoczenia \ei{tabular} nie są automatycznie
dzielone między stronami. Do składu tabel, które nie mieszczą się na
pojedynczej stronie, służy
pakiet~\ei{longtable}, opisany w~następnym punkcie.
\subsection{Pakiet \pai{longtable} \label{sec:longtable}}
Pakiet definiuje otoczenie \ei{longtable}, pozwalające składać tabele
ciągnące się przez wiele kolejnych stron dokumentu.
Aby zapewnić jednakowe szerokości
rubryk na wszystkich stronach, wymagana jest
dwukrotna kompilacja dokumentu. Oto przykład:
%%
\begin{verbatim}
\begin{longtable}{|l|r|r|r|}
\caption{Tytuł tabeli}\\\hline
\multicolumn{4}{|c|}{To jest nagłówek pierwszej strony}\\\hline
nazwa & wysokość & długość & nachylenie \\ \hline
k-1 & k-2 & k-3 & k-4 \\ \hline
\endfirsthead
\hline
\multicolumn{4}{|c|}{To jest nagłówek następnych stron}\\
\hline k-1 & k-2 & k-3 & k-4\\\hline
\endhead
\hline \multicolumn{4}{|c|}{Stopka tabeli}\\ \hline
\endfoot
\hline \multicolumn{4}{|c|}{Stopka na ostatniej stronie}\\
\hline
\endlastfoot
Col du T\'el\'egraphe & 1,566 & 12,0 & 6,7\% \\
Col du Galibier & 2,646 & 18,1 & 6,9\% \\
Col de la Madeleine & 2,000 & 25,4 & 6,1\% \\
%% ... 17 pominiętych wierszy ...
La Bola del Mundo & 2257 & 21,8 & 6,2\% \\
\end{longtable}
\end{verbatim}
%% http://www.salite.ch/struttura/salite.asp?stato=Francia
%% coś tu dopisać nt toporności tego pakietu, tabular + longtable
Po złożeniu efekt jest następujący\footnote{Dane z~tabeli pochodzą
z~katalogu \url{http://www.salite.ch}.}:
\begin{longtable}{|l|r|r|r|}
\caption{Tytuł tabeli}\\\hline
\multicolumn{4}{|c|}{To jest nagłówek pierwszej strony}\\ \hline
nazwa & wysokość & długość & nachylenie \\ \hline
k-1 & k-2 & k-3 & k-4 \\ \hline
\endfirsthead
\hline
\multicolumn{4}{|c|}{To jest nagłówek następnych stron}\\
\hline k-1 & k-2 & k-3 & k-4\\\hline
\endhead
\hline \multicolumn{4}{|c|}{Stopka tabeli}\\ \hline
\endfoot
\hline \multicolumn{4}{|c|}{Stopka na ostatniej stronie}\\
\hline
\endlastfoot
Col du T\'el\'egraphe & 1,566 & 12,0 & 6,7\% \\
Col du Galibier & 2,646 & 18,1 & 6,9\% \\
Col de la Madeleine & 2,000 & 25,4 & 6,1\% \\
Alpe D'Huez & 1815 & 14,2 & 7,7\% \\
Col de la Croix de Fer & 2067 & 22,0 & 7,0\% \\
%see http://pl.wikipedia.org/wiki/Fabio_Casartelli
%for the details concerning Fabio Casartelli
Col de Portet d'Aspet\index{Casartelli Fabio} & 1069 & 4,4 & 9,6\% \\
%see http://en.wikipedia.org/wiki/Tom_Simpson
%for the details concerning Tom Simpson
Mont Ventoux\index{Simpson Tom} & 1912 & 21,0 & 7,6\% \\
Col de l`Izoard & 2361 & 15.9 & 6,9\% \\
Passo dello Stelvio & 2758 & 24.3 & 7.4\% \\
Col du Tr\'ebuchet & 1143 & 14.6 & 4.3\% \\
Passo Gavia & 2618 & 13.5 & 6.5\% \\
Col du Grand Colombier & 1505 & 15.9 & 7.8\% \\
Col de l`Iseran & 2770 & 48,0 & 4.1\% \\
Courchevel & 2000 & 21,7 & 6,5\% \\
Col de l`Aspin & 1489 & 12,0 & 6,5\% \\
Col de la Croix de l`Homme Mort & 1163 & 18,0 & 4,3\% \\
Col de Notre Dame des Abeilles & 1000 & 13,9 & 5,1\% \\
Paso del Morredero & 1872 & 25,0 & 5,4\% \\
Collado de la Caballar & 1308 & 14,5 & 7,5\% \\
Capilla de la Magdalena & 1137 & 11,0 & 5,5\% \\
La Bola del Mundo & 2257 & 21,8 & 6,2\% \\
\end{longtable}
\subsection{Pakiet \pai{array}}
Do składu tabel o~bardziej skomplikowanym układzie graficznym lepiej
używać pakietu \pai{array}. Pakiet ten nie wprowadza żadnego nowego
otoczenia, redefiniuje jedynie i~rozszerza standardowe otoczenie
\ei{tabular}.
W~,,standardowym'' otoczeniu \ei{tabular} konstrukcja
\verb|p{|\emph{szer-kolumn}\verb|}| deklaruje kolumnę, w~której
zawartość każdej rubryki będzie składana w~prostokąt o~zadanej
szerokości, z~wyrównywaniem obu marginesów (odpowiednik
\verb@\parbox[t]{szer}@). Pakiet \pai{array} wprowadza ponadto
\verb@b{szer}@ -- odpowiednik \verb@\parbox[b]{szer}@ -- oraz
\verb@m{szer}@ -- odpowiednik \verb@\parbox{szer}@.
Przykład:
%%
\begin{code}
\begin{verbatim}
\begin{tabular}{|p{8mm}|p{8mm}|p{8mm}|} \hline
x y z x y z x y z x y z x y z & x y z x y z x y y&
1 1 1 1 1 \\ \hline \end{tabular}
\begin{tabular}{|m{8mm}|m{8mm}|m{8mm}|} \hline
x y z x y z x y z x y z x y z & x y z x y z x y y&
2 2 2 2 2 \\ \hline \end{tabular}
\begin{tabular}{|b{8mm}|b{8mm}|b{8mm}|} \hline
x y z x y z x y z x y z x y z & x y z x y z x y y&
3 3 3 3 3 \\ \hline
\end{tabular}
\end{verbatim}
\end{code}
%%
Złożone tabele wyglądają następująco:
%%
\par
\medskip
\noindent%%<-- ważne
\begin{tabular}{|p{8mm}|p{8mm}|p{8mm}|} \hline
x y z x y z x y z x y z x y z & x y z x y z x y y&
1 1 1 1 1 \\ \hline
\end{tabular}
\quad
\noindent
\begin{tabular}{|m{8mm}|m{8mm}|m{8mm}|} \hline
x y z x y z x y z x y z x y z & x y z x y z x y y&
2 2 2 2 2 \\ \hline
\end{tabular}
\quad
\noindent
\begin{tabular}{|b{8mm}|b{8mm}|b{8mm}|} \hline
x y z x y z x y z x y z x y z & x y z x y z x y y&
3 3 3 3 3 \\ \hline
\end{tabular}
\par
\bigskip
\noindent
Kolejnym użytecznym rozszerzeniem zdefiniowanym w~\pai{array} jest
możliwość bardziej szczegółowego określenia sposobu formatowania rubryk
tabeli, niż ma to miejsce w~standardowym otoczeniu \ei{tabular}, gdzie
w~zasadzie możemy jedynie określić sposób justowania zawartości rubryk
w~poszczególnych kolumnach. Wracając do przykładu tabeli zawierającej
różne ,,parametry'' dotyczące przełęczy i~wniesień, załóżmy, że
nazwę wzniesienia chcemy złożyć kursywą, a~długość -- odmianą półgrubą.
Można to
oczywiście osiągnąć, wstawiając odpowiednie polecenia do każdej rubryki
danej kolumny, ale sprawniej będzie zastosować zdefinowane w~pakiecie
\pai{array} konstrukcje:
\begin{command}
\verb|>{|\emph{polecenia}\verb|}| lub \verb|<{|\emph{polecenia}\verb|}|
\end{command}
%%
\noindent
Konstrukcji \verb|>{|\emph{polecenia}\verb|}| można użyć
w~preambule \emph{przed\/} \verb@c@, \verb@l@, \verb@r@, \verb@p@ oraz
\verb@m@ i~\verb@b@. Jej działanie polega na wstawieniu
\emph{poleceń\/} na początku każdej rubryki w~tej kolumnie.
Podobnie, \verb|<{|\emph{polecenia}\verb|}| można użyć \emph{po\/}
\verb@c@, \verb@l@, \verb@r@, \verb@p@, \verb@m@ i~\verb@b@. W~rezultacie
\emph{polecenia} zostaną wstawione na końcu każdej
rubryki w~tej kolumnie.
Wracając do przykładu, oto preambuła tabeli wykorzystująca
omawiane konstrukcje pakietu \pai{array}:
%%
\begin{code}
\begin{verbatim}
\begin{tabular}{|>{\itshape}l|r|r|>{\bfseries}r|r|r|}\hline
Nazwa & \multicolumn{2}{|c|}{Wys. w~m~n.p.m.} &
Długość & \multicolumn{2}{|c|}{Nachylenie \%}\\
...
\end{verbatim}
\end{code}
%%
Wynik jest następujący:
%%
\par
\medskip
\noindent
\begin{tabular}{|>{\itshape}l|r|r|>{\bfseries}r|r|r|}\hline
Nazwa & \multicolumn{2}{c|}{Wys. w~m~n.p.m.} &
Długość & \multicolumn{2}{c|}{Nachylenie \%}\\
\cline{2-3} \cline{5-6}%
& początek & koniec & w~km & śr. & max \\ \hline
Col du Galibier & 1401 & 2646 & 18,1 & 6,9\% & 14,5 \\
Alpe D'Huez & 724 & 1815 & 13,5 & 7,7\% & 15,0 \\
Passo Gavia & 1734 & 2618 & 13,5 & 6,5\% & 20,0 \\ \hline
\end{tabular}
\par
\medskip
\noindent
Do zmiany głębokości konkretnego wiersza służy
opcjonalny argument polecenia~\verb@\\@, np.
\verb@\\[2pt]@.
Wysokość i~głębokość wiersza można zmienić za pomocą
niewidzialnej kreski, np.
\verb@\rule[-3mm]{0mm}{8mm}@. Przykładowo, w~powyższym
przykładzie tabela będzie wyglądała lepiej, jeżeli
dodamy do pierwszego wiersza:
\begin{code}
\begin{verbatim}
Col du Galibier\rule[-3.5pt]{0pt}{15pt}
\end{verbatim}
\end{code}
Spowoduje to wstawienie dodatkowego odstępu między
kreską nad pierwszym wierszem tabeli a~zawartością wiersza.
\subsection{Pakiet \pai{tap}}
% --------------------
Pakiet \pai{tap} (autorzy: Bogusław Jackowski\index{Jackowski Bogusław},
Piotr Pianowski\index{Pianowski Piotr} i~Piotr
Strzelczyk\index{Strzelczyk Piotr}) pozwala na eleganckie składanie
nawet najbardziej ekstrawaganckich (jednostronicowych) tabel, z~tym że
stosuje niestandardowy zapis\footnote{Tak naprawdę, nie jest to nawet
pakiet w~rozumieniu {\LaTeX}a i~zamiast poleceniem \ci{usepackage}
należy go dołączać poleceniem \ci{input}.}, co może powodować problemy
w~integracji z~innymi pakietami {\LaTeX}a, np. pakietem \pai{colortbl},
służącym do kolorowania rubryk w~tabelach. Oto przykład:
\par
\medskip
\noindent
\begin{code}
\begin{verbatim}
\input{tap.tex} %% <- dołączenie pakietu
\desiredwidth=\textwidth %% skład na szerokość łamu
\begintable
\begintableformat \left " &\right \endtableformat
\=
\B!^ | @2\center{Wys. w~m~n.p.m.} | Długość |
@2\center{Nachylenie \%} \E!
\B"- \center{Nazwa} " @2\- " " @2\- \E"
\B"_ | początek | koniec | w~km | śr. | max \E!
\B! Col du Galibier | -- | 2645 | 17,5 | 6,9\% | 14,5 \E!
\B! Alpe D'Huez | -- | 1839 | 13,0 | 8,5\% | 15,0 \E!
\B! Passo Gavia | -- | 2621 | 17,3 | 7,9\% | 20,0 \E!
\=
\endtable
\end{verbatim}
\end{code}
%%
Wynik jest imponujący:
%%
\par
\medskip
\begingroup
\input{tap.tex}
\desiredwidth=\textwidth %% skład na szerokość łamu
\begintable
\begintableformat \left " &\right \endtableformat
\=
\B!^ | @2\center{Wys. w~m~n.p.m.} | Długość | @2\center{Nachylenie \%} \E!
\B"- \center{Nazwa} " @2\- " " @2\- \E"
\B!_ | początek | koniec | w~km | śr. | max \E! \=
\B!^ Col du Galibier | 1401 | 2646 | 18,1 | 6,9\% | 14,5 \E!
\B!+ Alpe D'Huez | 724 | 1815 | 14,2 | 7,7\% | 15,0 \E!
\B!_ Passo Gavia | 1734 | 2618 | 13,5 | 6,5\% | 20,0 \E!
\=
\endtable
\endgroup
\medskip
\noindent
Więcej informacji można odnaleźć w~(polskojęzycznej) dokumentacji
pakietu (\CTAN{macros/generic/tables/tap077.zip}).
%% dodałem akapit, żeby się tak nie kończyło gwałtownie:-) [tp]:
\medskip
\noindent
Na zakończenie uwaga: składanie tabel w~{\LaTeX}u nie jest może aż tak
proste jak w~edytorach {\WYSIWYG}, ale za to można tworzyć konstrukcje
niezwykle trudne lub wręcz niemożliwe do wykonania w~innych programach.
Ponadto zadanie składania tabel można sobie znakomicie ułatwić, stosując
skryptowe języki programowania, w~rodzaju Perla czy Pythona. Już
stosunkowo niewielka umiejętność programowania w~wymienionych językach
pozwala na szybką konwersję generowanych przez zewnętrzne aplikacje
danych tabelarycznych do formatu {\LaTeX}a.
% To jest teraz wstawione do indeksu!
% \label{verylast}\mbox{}%% przeniesione do xtables
%
%
\endinput
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "lshort2e"
%%% case-fold-search: nil
%%% coding: latin-2
%%% LocalWords: ghostscript acrobat makeindex plmindex kiepskości
%%% ispell-local-dictionary: "polish"
%%% End: