%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Contents: Customising LaTeX output (LShort2e Introduction) % File: custom.tex (Polish translation) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \chapter{Adaptowanie \LaTeX-a} \begin{intro} Dokumenty składane z~wykorzystaniem poznanych do tej pory poleceń zapewne będą się podobać zdecydowanej większości czytelników. Chociaż ich wygląd nie będzie może wyrafinowany, z~pewnością jednak spełnią podstawowe zasady składu, dzięki czemu łatwo i~przyjemnie będzie się je czytało. W~niektórych wypadkach może się jednak okazać, że brakuje polecenia czy środowiska, 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~przypadku korzystania tylko ze standardowych klas i~pakietów. \end{intro} %% \section{Definiowane instrukcji i~środowisk} Czytelnicy zapewne zauważyli, że nowo wprowadzane w~tej książce polecenia ukazują się w~ramkach oraz, że znajdują się w~skorowidzu. Aby to osiągnąć, nie korzystaliśmy za każdym razem z~wbudowanych w~\LaTeX-a instrukcji, tylko utworzyliśmy własny pakiet, w~którym zawarliśmy nowe, potrzebne nam polecenia i~środowiska. Mając taki pakiet, 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 środowiska 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. \begin{TPextension} We wstępie do tego opracowania wspomnieliśmy, że w~\LaTeX-u możemy się skupić na logicznej strukturze dokumentów. Wskazane jest rozróżnianie w~tekście źródłowym wszystkich elementów logicznych dokumentu, nawet jeżeli ich formatowanie jest identyczne. Często to, co dzisiaj formatujemy jednakowo, w~przyszłości możemy chcieć rozróżnić. Przykładowo, adresy internetowe zwykło się składać imitacją kroju maszynowego, a~ponieważ w~adresach mogą wystąpić znaki specjalne \LaTeX-a, można by do tego celu wykorzystywać po prostu instrukcję \verb+\verb+. Jednak lepiej użyć specjalnej instrukcji, np.~\verb|\url|. W~dokumencie drukowanym na papierze nie ma to znaczenia, ale oznakowanie logiczne umożliwia przedstawienie dokumentu nie tylko w~formie drukowanej, ale też w~wersji hipertekstowej, w~formacie HTML czy~PDF. \end{TPextension} \subsection{Instrukcje definiowane przez użytkownika} Do definiowania nowych poleceń służy instrukcja: % \begin{command} \ci{newcommand}\verb|{|% \emph{nazwa}\verb|}[|\emph{num}\verb|]{|\emph{tekst}\verb|}| \end{command} % \noindent Instrukcja ta wymaga \emph{co najmniej} 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} to liczba od~1 do~9 określająca liczbę (obowiązkowych) argumentów instrukcji. Argument \emph{num} jest opcjonalny, a~jego pominięcie oznacza, że definiowana instrukcja jest bezargumentowa. \begin{TPextension} W~części \emph{tekst} wolno używać zarówno standardowych instrukcji \LaTeX-a, jak i~zdefiniowanych wcześniej przez użytkownika (za wyjątkiem tych instrukcji, które same definiują inne polecenia, jak \verb+\newcommand+, \verb+\newenvironment+ itp.). Niedozwolona jest rekursja. W~nazwie instrukcji nie wolno umieszczać polskich liter diakrytycznych. \end{TPextension} \noindent Następujące przykłady pomogą lepiej zrozumieć zagadnienie. W~pierwszym definiujemy instrukcję o~nazwie \verb+\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ł być wypisywany 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 parametr formalny, \verb|#3| trzeci itd.). W~chwili wykonania instrukcji parametry formalne są zamieniane na argumenty podane przy 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 definiować instrukcji, której nazwa, jest nazwą zdefiniowanego już polecenia. W~wypadku, gdy chcemy zmienić znaczenie już istniejącej instrukcji, należy użyć polecenia \ci{renewcommand}. Za wyjątkiem nazwy ma ono składnię identyczną jak \verb|\newcommand|. Czasami może się przydać polecenie \ci{providecommand}. Działa ono jak \verb|\newcommand| z~tym, że jeśli istnieje już polecenie o~takiej samej nazwie, to nie zastępuje ono starej i~zwyczajnie ignoruje nową. \subsection{Środowiska definiowane przez użytkownika } Odpowiednikiem instrukcji \verb|\newcommand|, definiującej nowe polecenia, jest dla środowisk 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|, instrukcji \ci{newenvironment} można użyć z~argumentem opcjonalnym lub bez. {\LaTeX} wstawia tekst \emph{początek} w~miejsce \verb+\begin{+\emph{nazwa}\verb+}+. Natomiast tekst \emph{koniec} jest wstawiany w~miejsce \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ć środowiska o~już istniejącej nazwie. W~wypadku, gdy chcemy zmienić znaczenie już istniejącego środowiska, należy użyć polecenia \ci{renewenvironment}, mającego taką samą składnię jak \ci{newenvironment}. \subsection{Własne pakiety } W~wypadku zdefiniowania wielu nowych środowisk i~poleceń preambuła dokumentu może się znacznie wydłużyć. Dobrze w~takiej sytuacji jest stworzyć pakiet zawierający własne instrukcje i~definicje środowisk. Taki pakiet można dołączyć do dokumentu za pomocą polecenia \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} Tworzenie pakietu polega na skopiowaniu poleceń z~preambuły do oddzielnego pliku o~rozszerzeniu \texttt{.sty}. Na początku pakietu należy użyć polecenia: % \begin{command} \ci{ProvidesPackage}\verb|{|\emph{nazwa}\verb|}| \end{command} % \noindent Dzięki instrukcji \verb|\ProvidesPackage| {\LaTeX} poznaje nazwę pakietu, a~to pozwoli mu na przykład ostrzec użytkownika w~przypadku próby powtórnego dołączenia pakietu do dokumentu. Rysunek~\ref{package} przedstawia niewielki pakiet z~instrukcjami z~przedstawionych wyżej przykładów. %% \section{Fonty} \subsection{Instrukcje przełączające stopień pisma } {\LaTeX} automatycznie wybiera krój i~stopień pisma dla różnych elementów dokumentu (tytuły rozdziałów, punktów, przypisy itp.). Czasami jednak zachodzi potrzeba ,,ręcznego'' przełączenia kroju/stopnia pisma. W~tym celu można skorzystać z~poleceń zestawionych w~tabelach~\ref{fonts} i~\ref{sizes}. 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 w~jednostkach absolutnych dla poleceń zmieniających wielkość kroju w~przypadku standardowych klas dokumentu. % \begin{example} {\small Nieliczni lecz \textbf{odważni} Rzymianie rządzili} {\Large wielką \textit{Italią}.} \end{example} % \noindent Bieżący font charakteryzuje w~\LaTeX-u pięć elementów: układ (zestaw znaków), krój (rodzinę), grubość i~szerokość, odmianę, 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 kroju czy 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|{...}| & \texttt{grotesk} \\[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 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} Wewnątrz trybu matematycznego można wykorzystać instrukcje zmiany fontu do chwilowego opuszczenia trybu matematycznego i~złożenia tekstu normalnym krojem. Przy okazji omawiania poleceń dotyczących fontów trzeba wspomnieć o~koncepcji \emph{grupowania tekstu}. Grupa\index{grupa} rozpoczyna 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} % \begin{TPextension} 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ę. Polecenie \verb+\small+ zmienia stopień pisma na mały. W~tym stopniu złożone jest tylko słowo ,,małe'', ponieważ nawias ,,\verb+}+'' 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 spowoduje, że resztę tekstu {\LaTeX} złoży w~wyjściowym stopniu pisma. Jak widać, grupy można zagnieżdżać (nawet wielokrotnie). \end{TPextension} \noindent Polecenia zmieniające stopień pisma zmieniają także interlinię. Dzieje się tak jednak tylko wtedy, gdy \emph{przed} zamknięciem odpowiedniej grupy kończy się 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 Gdy zachodzi konieczność zmiany stopnia pisma dla całego akapitu lub jeszcze dłuższego tekstu, możemy skorzystać ze składni przyjętej dla środowisk: % \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 w~grupach. \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 krojem pisma można wykorzystać 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}\\[4.5pt] \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 już zaznaczyliśmy na początku rozdziału, nie należy \emph{explicite} wstawiać do pliku źródłowego instrukcji zmiany fontu. 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 poprzez złożenie go innym krojem lub stopniem pisma, to należy zdefiniować odpowiednie polecenie i~jego właśnie 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~inny sposób niż składając je pismem półgrubym, to nie musimy przeglądać całego pliku w~celu sprawdzenia, czy dane wystąpienie \verb+\textbf+ dotyczy tekstu, na który ma zostać zwrócona \emph{szczególna uwaga}, czy też wstawione zostało w~zupełnie innym celu. \bigskip \noindent \begin{TPextension} \EMPH{Na zakończenie rada}: nie należy przesadzać z~wykorzystywaniem wielu różnych krojów pisma w~dokumencie. \end{TPextension} %% \section{Odstępy } \subsection{Zmiana wielkości interlinii\index{interlinia} } Wielkość interlinii (odstępu pomiędzy wierszami) w~dokumencie można zmieniać za pomocą polecenia: % \begin{command} \ci{linespread}\verb|{|\emph{czynnik}\verb|}| \end{command} % \noindent Polecenie to należy umieścić w~preambule dokumentu. Parametr \emph{czynnik} określa wielkość interlinii. Podwójną interlinię uzyskamy za pomocą \verb|\linespread{1.6}|. Używając \verb|\linespread{1.3}| uzyskamy interlinię równą 1,5. Pojedynczej interlinii, zarazem domyślnej odpowiada wartość~1. \subsection{Wcięcia i~odstępy pomiędzy akapitami\label{parsp} } Dwa dodatkowe parametry określają, odpowiednio, wielkości wcięcia akapitowego oraz odstępu między akapitami. Na przykład, wpisując: % \begin{code} \ci{setlength}\verb|{|\ci{parindent}\verb|}{0pt}| \\ \verb|\setlength{|\ci{parskip}\verb|}{1ex plus 0.5ex minus 0.2ex}| \end{code} % \noindent do preambuły dokumentu ustalamy wielkość wcięcia akapitowego na 0~pt (co powoduje, że akapity będą się zaczynać bez wcięć), a~odstęp między akapitami ustalamy na 1~ex plus 0,5~ex minus 0,2~ex. Drugi zapis oznacza, że normalny odstęp między akapitami, wynoszący 1,0~ex (jednostki miary w~\LaTeX-u podaje tabela~\ref{units} na stronie~\pageref{units}), może się zwiększyć do $1{,}0 + 0{,}5 = 1{,}5$~ex lub zmniejszyć do $1{,}9 - 0{,}2 = 0{,}8$~ex. W~Europie kontynentalnej akapity składa się czasami bez wcięcia akapitowego, tylko z~dodatkowym odstępem między nimi. Ale uwaga, ten efekt pojawi się także w~spisie treści, tabel i~rysunków, gdzie poszczególne pozycje w~spisie będą od siebie bardziej oddalone (w~spisach większość akapitów jest jednowierszowa). Aby uniknąć tego trochę śmiesznego efektu należy usunąć powyższe instrukcje \verb+setlenght+ z~preambuły dokumentu i~wstawić je w~części głównej, po poleceniach \verb+\tableofcontents+ itp. Najlepiej jednak wcale nie korzystać z~tego sposobu, gdyż znakomita większość książek jest składana z~wcięciem akapitowym, a~nie z~dodatkowymi odstępami między akapitami\footnote{\begin{TPcomment}% %Pomijając wszystkie inne argumenty oszczędzamy także trochę drzew nie %wstawiając odstępów między akapity. Jednoczesne użycie wcięć i~odstępów uważa się w~Polsce za poważny błąd typograficzny.\end{TPcomment}}. Wcięcie akapitowe wstawiamy za pomocą polecenia: % \begin{command} \ci{indent} \end{command} % \noindent umieszczonego na początku akapitu\footnote{Do uzyskania efektu wstawiania wcięcia w~pierwszym akapicie po tytule rozdziału, podrozdziału itd. należy dołączyć do dokumentu pakiet \pai{indentfirst} z~zestawu pakietów ,,tools''.}. Wstawienie \verb+\indent+, kiedy wartość \verb|\parindent| wynosi zero nie przyniesie oczywiście żadnego efektu. Do złożenia akapitu bez wcięcia należy rozpocząć akapit od polecenia: % \begin{command} \ci{noindent} \end{command} \subsection{Odstępy poziome\label{sec:hspace} } {\LaTeX} automatycznie ustala wielkości odstępów między słowami oraz między zdaniami. Dodatkowy odstęp poziomy\index{odstęp!poziomy} (przez odstęp poziomy rozumiemy odstęp między wyrazami, przez odstęp pionowy rozumiemy odstęp między wierszami i~akapitami) wstawiamy za pomocą polecenia: % \begin{command} \ci{hspace}\verb|{|\emph{odległość}\verb|}| \end{command} % \noindent Jeżeli taki odstęp, w~wyniku złamania akapitu na wiersze, wypadnie na początku lub końcu wiersza, to zostanie usunięty -- po to, by akapit nie był justowany ,,w~chorągiewkę''. Jeżeli {\LaTeX} ma wstawić odstęp także w~wypadku, gdy rozpoczyna sie lub kończy wiersz, to zamiast \verb+\hspace+ należy użyć ,,gwiazdkowej'' wersji \ci{hspace*}. Argument \emph{odległość} oznacza wymiar \LaTeX-owy. W~najprostszej postaci jest to liczba oraz jednostka odległości. Wykaz ważniejszych dostępnych w~\LaTeX-u jednostek odległości znajduje się w~tabeli~\ref{units}. % \begin{example} To jest \hspace{1.5cm}odstęp równy 1,5~cm. \end{example} \suppressfloats \begin{table}[!hbt] \caption{\LaTeX-owe jednostki miary\label{units}} \index{jednostki miary}% \begin{lined}{10.5cm} \begin{tabular}{@{}ll@{}} \texttt{mm} & milimetr $\approx 1/25$~cala \quad \demowidth{1mm} \\ \texttt{cm} & centymetr = 10~mm \quad \demowidth{1cm} \\ \texttt{in} & cal $=$ 25,4~mm \quad \demowidth{1in} \\ \texttt{pt} & punkt $\approx 1/72$~cala $\approx \frac{1}{3}$~mm \quad\demowidth{1pt}\\ \texttt{em} & w~przybliżeniu szerokość ,,M'' w~bieżącym foncie \quad \demowidth{1em}\\ \texttt{ex} & w~przybliżeniu wysokość ,,x'' w~bieżącym foncie \quad \demowidth{1ex} \end{tabular} \bigskip \end{lined} \end{table} \begin{TPextension} Często wygodnie jest użyć ,,elastycznej'' odległości, zostawiając \LaTeX-owi w~pewnym zakresie swobodę wyboru 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}, 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 wymiaru o~zmiennej wielkości. Część wymiarów \LaTeX-owych może mieć zmienne wielkości, ale część musi mieć wartość stałą. Na przykład, jest zrozumiałe, że wcięcie akapitowe musi być wielkością stałą, podobnie jak szerokość i~wysokość łamu. \end{TPextension} Polecenie\label{cmd:stretch}: % \begin{command} \ci{stretch}\verb|{|\emph{n}\verb|}| \end{command} % \noindent wstawia specjalny odstęp rozciągliwy o~tej właściwości, że potrafi wypełnić całą wolną przestrzeń wiersza. Jeżeli w~linii wstawimy dwa polecenia \verb|\hspace{\stretch{|\emph{n}\verb|}}|, to wielkość odstępów przez nie uzyskanych będzie wg~proporcji ustalonych przez argument \emph{n}. W~poniższym przykładzie odstęp między~x a~y~jest trzy razy mniejszy od odstępu między~y~a~z. % \begin{example} x\hspace{\stretch{1}} y\hspace{\stretch{3}}z \end{example} \subsection{Odstępy pionowe} {\LaTeX} wstawia odstępy pomiędzy akapitami, rozdziałami, punktami itp. automatycznie. Jeżeli istnieje potrzeba wstawienia dodatkowego odstępu pionowego, należy użyć polecenia: % \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 bezpośrednio zaczynał lub kończył kolumnę tekstu), to zostanie 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{\begin{TPcomment}Zwróćmy uwagę, że w~takim wypadku wysokości kolumny tekstu na sąsiednich stronach nie będzie jednakowa, zatem korzystajmy z~polecenia \ci{vspace*} z~pewną ostrożnością.\end{TPcomment}}. Argument \emph{odległość} oznacza wymiar \LaTeX-owy. Polecenia \ci{stretch}, wykonanego łącznie z~\ci{pagebreak}, można używać do rozmieszczania tekstu kolumny w~pionie. W~poniższym przykładzie tekst zostanie rozmieszczony tak, że odstęp u~dołu będzie dwa razy mniejszy niż odstęp u~góry strony. % \begin{code} \begin{verbatim} \vspace{\stretch{1}} Tytuł i~autor \vspace{\stretch{2}}\pagebreak \end{verbatim} \end{code} % \noindent Dodakowy odstęp między dwoma wierszami tego samego akapitu lub między wierszami w~tabeli możemy wstawić za pomocą instrukcji: % \begin{command} \ci{\bs}\verb|[|\emph{odległość}\verb|]| \end{command} %% \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 wszystkie 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, można je zmienić. \begin{figure}[!hp] \begin{center} \makeatletter\@layout\makeatother \end{center} \vspace*{1.8cm} \caption{Parametry układu graficznego strony \label{fig:layout}} \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ść kolumny jest taka a~nie inna. \iffalse %% Z~tym co poniżej można by polemizować %% więc wykomentowujemy z~wersji drukowanej Z~pewnością w~porównaniu z~wydrukiem przygotowanym za pomocą świeżo kupionego programu MS Word, strona \LaTeX-owa ma denerwująco wąską szpaltę. Ale spójrzmy na książkę z~renomowanego wydawnictwa i~policzmy w~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. A~dzieje się tak, ponieważ 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 wielokolumnowego w~gazetach i~czasopismach. Tak więc, jeśli zwiększamy szerokość kolumny, pamiętajmy, że może to uprzykrzyć czytanie odbiorcom naszej pracy. No, ale dość już kazań. Obiecałem przecież wyjaśnić, jak można te rzeczy robić\dots \fi W~\LaTeX-u mamy dwie instrukcje do zmiany wielkości wymiarów, zazwyczaj używane w~obrębie preambuły dokumentu: Pierwsza instrukcja nadaje parametrowi określoną wielkość: % \begin{command} \ci{setlength}\verb|{|\emph{parametr}\verb|}{|\emph{odległość}\verb|}| \par \end{command} \noindent Drugie polecenie \emph{zwiększa} wielkość parametru o~określoną wielkość: \noindent \begin{command} \ci{addtolength}\verb|{|\emph{parametr}\verb|}{|\emph{length}\verb|}| \end{command} % \noindent Druga instrukcja jest częściej wykorzystywana ponieważ pozwala na modyfikowanie wymiarów. Przykładowo, aby zwiększyć szerokość szpalty o~jeden centymetr, należy w~preambule dokumentu umieścić następujące polecenia: % \begin{code} \verb|\addtolength{\hoffset}{-0.5cm}|\\ \verb|\addtolength{\textwidth}{1cm}| \end{code} % \noindent Wykonywanie operacji arytmetycznych na wymiarach ułatwia pakiet \pai{calc}. Pakiet \pai{geometry} pozwala na łatwe modyfikowanie parametrów układu graficznego strony. %% \section{Więcej o~odległościach} Kiedy tylko jest to możliwe, unikajmy wykorzystywania wymiarów zdefiniowanych w~jednostkach absolutnych, takich jak punkty czy milimetry. Starajmy się raczej wyrazić wymiary w~odniesieniu do już istniejących, takich jak wysokość czy szerokość kolumny. W~poniższym przykładzie szerokość rysunku jest zdefiniowana jako połowa szerokość bieżącej szpalty: % \begin{code} \verb+\includegraphics[width=0.5\textwidth]{test.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 Następujący przykład pokazuje możliwe 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 } {\LaTeX} tworzy każdą stronę 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. Trzeba przyznać, że powyższe jest mocno uproszczoną wersją tego, co się naprawdę dzieje, ale zasadniczo biorąc działanie \LaTeX-a można wyjaśnić w~terminach pudełek oraz kleju\index{klej} (odstępu wstawianego między pudełkami). Nie tylko litery są pudełkami. Do pudełka można włożyć praktycznie wszystko, także inne pudełka. Każde pudełko {\LaTeX} traktuje jak pojedynczą literę. Chciaż o~tym nie mówiliśmy wprost, pudełka pojawiały się już w~poprzednich rozdziałach. Na przykład polecenie \verb+includegraphics+ albo środowisko \verb+tabular+ tworzą pudełka. Oznacza to, że łatwo można zestawić dwa rysunki albo tabele obok siebie. Trzeba jedynie zadbać o~to, by łączna szerokość połączonych obiektów nie była większa niż szerokość 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ć środowisko: % \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{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ą). Argument \emph{szerokość} to wymiar określający szerokość pudełka. %% \iffalse %% JG Główna różnica pomiędzy \ci{parbox} a~\pai{minipage} polega na tym, że nie wszystkie polecenia i~środowiska są dozwolone wewnątrz \verb|parbox| w~przeciwieństwie do środowiska \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 za pomocą polecenia \ci{mbox}, których zawartość nigdy nie jest dzielona na wiersze. Polecenia tego używamy, gdy chcemy 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 Za pomocą opcjonalnego argumentu \emph{szerokość} możemy zadać szerokość pudełka. Może ona się 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 także posługiwać się 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 wykorzystanie 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 znowu można skorzystać z~poleceń \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}} Parę stron wcześniej pojawiło się polecenie: % \begin{command} \ci{rule}\verb+[+\emph{przesunięcie}\verb+]{+% \emph{szerokość}\verb+}{+\emph{wysokość}\verb+}+ \end{command} % \noindent W~wyniku wykonania tej instrukcji najczęściej 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 Polecenia \ci{rule} używamy 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ąć krechę ponad linię podstawową\index{linia podstawowa} (lub opuścić poniżej linii podstawowej, jeżeli parametr jest ujemny). Specjalnym przypadkiem jest kreska o~zerowej szerokości, ale 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, za wyjątkiem niewidocznej podpory. 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} \endinput %%% Local Variables: %%% mode: latex %%% TeX-master: "lshort2e" %%% End: