Podstawy :: Deklaracje wstępne - polskie znaczki, utf-8, ... :: łączenie formatowań, linie, odstępy, ... :: nagłówek stopka i data :: wstawianie grafik, skalowanie obiektów :: napisy na grafice, kolory, itp. :: Trochę bardziej zaawansowane :: odnośniki hipertekstowe :: wyliczanie :: zachęcanie, zniechęcanie i wymuszanie podziału linni/strony/... :: wcięty akapit :: własna wielkość czcionki :: spisy treści, rozdziały, sekcje, ... :: kolumny :: Dostosowywanie do własnych potrzeb :: własny pakiet makr :: własna klasa dokumentu :: liczniki :: a to da trochę lepsze polskojęzyczne dokumenty ... :: Linki

TeX i LaTeX - porady

TeX jest komputerowym systemem profesjonalnego składu drukarskiego. Głównym elementem systemu jest oczywiście sam program TeX, który zajmuje się przetwarzaniem instrukcji umieszczonych w tworzonym dokumencie. Podstawowy zestaw poleceń jest dość ubogi, jednak pozwala (co prawda nie zawsze w prosty sposób ...) zrobić niemalże wszystko co byśmy chcieli (w odróżnieniu od innych systemów DTP nie ogranicza on nas ...). Dużym ułatwieniem są tutaj makra, które możemy tworzyć zarówno sami, jak również skorzystać z gotowych zestawów takich LaTeX, czy ConTeXt.

To było by tyle tytułem wstępu (przynajmniej jak na razie). W dalszej części przedstawię kilka użytecznych rozwiązań, które znalazłem, wymyśliłem, ... podczas pracy z dokumentami w TeX-u. Po bardziej szczegółowe omówienia odsyłam do: Katedra TeX-ologii stosowanej, Nie za krótkie wprowadzenia do systemu LaTeX 2e i innych źródeł.

Podstawy

Deklaracje wstępne - polskie znaczki, utf-8, ...

\documentclass[a4paper, portrait, 10pt]{article}
%lokalizacja
	\usepackage{polski}
	\usepackage[utf8]{inputenc}
	\usepackage[OT4]{fontenc}
% geometria strony i czcionki
	\usepackage{geometry} % geometria strony - marginesy, ...
	\usepackage{ulem} % podkreślenia, przekreślenia, ...
	% więcej http://www.ia.pw.edu.pl/~wujek/tex/latex2e/macro/ulem.html
% linki
	\usepackage{hyperref} % hyperlinki także wewnętrzne
	% więcej http://www.ia.pw.edu.pl/~wujek/tex/latex2e/macro/hyperref.html
	\usepackage{url} % łącza internetowe
% naglowki, stopki, daty, ...
	\usepackage{fancyhdr} % nagłówek i stopka
	\usepackage[iso]{isodateo} % aktualna data w iso
	\usepackage{lastpage} % numer ostatniej strony wstawiany przez \pageref{LastPage}
% obrazki
	\usepackage{graphics} % wlaczanie grafik
	\usepackage{color} % kolory
	\usepackage{overpic} % napisy na obrazkach
% matematyka
	\usepackage{amssymb} % podwójne literek trybu matematycznego

\geometry{verbose,a4paper,tmargin=2cm,bmargin=2cm,lmargin=2cm,rmargin=2cm}
\hypersetup{pdfauthor={Autor},pdftitle={Tytuł dokumentu},pdfpagemode=None,
 colorlinks=true,linkcolor=black,urlcolor=blue}
\sloppy
  • \documentclass[a4paper, portrait, 10pt]{article} - definiujemy klasę dokumentu jako artykuł, podane parametry są parametrami standardowo używanymi: a4paper - strona formatu A4; portrait - pionowa orientacja strony, mogłoby być też landscape - pozioma; 10pt - bazowa czcionka w dokumencie (standardowo mogą być też wartości 11pt i 12pt, aby uzyskać inne wartości zobacz extsizes).
  • \usepackage[utf8]{inputenc} - definiujemy że kodowaniem wejściowego dokumentu jest UTF-8 (jeżeli nie jest obsługiwane to zajrzyj - http://www.unruh.de/DniQ/latex/unicode/), oczywiście mogą być też inne kodowania np: latin2
  • \usepackage[OT4]{fontenc} - podstawowa czcionka w dokumencie użycie OT4 zamiast T1 daje ładniejsze znaczki w PDF'ach (obie oczywiście obsługują polskie znaczki, jednak przy korzystaniu z extsizes chyba konieczne jest użycie T1)
  • \usepackage{geometry} - pozwala na ustawienie parametrów strony poprzez \geometry{verbose,a4paper,tmargin=2cm,bmargin=2cm,lmargin=2cm,rmargin=2cm}
  • \sloppy - zmienia standardowe ustawienie wybierające wejście na prawy margines zamiast rozrzedzenia linii na rzecz umocnienia pozycji prawego marginesu

łączenie formatowań, linie, odstępy, ...

  • \Huge \textsc{\textit{\textbf{ten tekst jest pogrubiony, pochylony i nie tylko}}} - wieloatrybutowe formatowanie czcionki
  • \rule[0.5cm]{\textwidth}{1pt} - dosyć gruba linia o szerokości całego tekstu (\textwidth)
  • \baselineskip=22pt - umieszczona na początku treści dokumentu (nie w nagłówku) ustawia odstęp między liniami w dokumencie, to samo ale trochę skuteczniej (dotyczy także wnętrza tabel) i bardziej elegancko można uzyskać umieszczając w nagłówku: \usepackage{setspace}\setstretch{1.2}, wtedy dla fragmentów tekstu możemy skorzystać z środowiska \begin{spacing}{1.6}
  • \vspace{0.8cm} - spacja pionowa o zadanym rozmiarze (tutaj 0.8 cm)
  • \begin{center} \scalebox{0.6}{\includegraphics{rys01.png}} \\Rys. 1: podpis rysunku\\ \end{center} - umieszcza rysunek o nazwie rys01.png przeskalowany (60% rozmiarów oryginału) i wyśrodkowany z podpisem ...
  • \noindent - powoduje nie wstawienie wcięcia akapitowego w danym akapicie (umieszczać należy na początku akapitu
  • ~ - wstawia spację nie łamiącą (traktowaną jako część wyrazu złozonego z tego co przed i po)
  • \sout{tekst} - tekst przekreślony, wymaga włączenia pakietu przez \usepackage[normalem]{ulem}

nagłówek stopka i data

Bardzo wygodny pakiet obsługi zawartości nagłówka oraz stopki możemy dodać poleceniem: \usepackage{fancyhdr}, następnie zaraz po "\begin{document}" możemy korzystać z \lhead{}, \chead{}, \rhead{} aby ustawić zawartość odpowiednio lewego, środkowego i prawego nagłówka i analogicznie \lfoot{}, \cfoot{}, \rfoot{} dla stopki; w tym miejscu możemy też zmienić szerokość linii podkreślającej nagłówek lub np. ją usunąć: \def\headrulewidth{0pt}. Warto też pamiętać że aktualny numer strony wstawia polecenie \thepage. więcej o fancyhdr

Aby poleceniem \today wstawiać aktualną datę w formacie ISO należy w deklaracjach wstępnych dodać: \usepackage[iso]{isodateo}. więcej o isodateo oraz pakiet do pobrania

wstawianie grafik, skalowanie obiektów

Aby móc umieszczać różnego rodzaju obrazki w dokumentach tworzonych w LaTeX należy na początku dokumentu dodać deklarację: \usepackage{graphics}, pozwala to na wstawianie obrazków poprzez \includegraphics{nazwa_obrazka}. Dla generowania plików dvi obrazki powinny być w formacie eps (=epsi), natomiast dla generacji pdf'ów (pdflatex)powinny być to pliki png, jpg lub pdf (do tego formatu należy konwertować eps). Wstawienie takie może wyglądać np. tak (wstawienie rysunku z QCad - aby otrzymać wstawiany pdf drukujemy plik dxf do ps (w Qcad), następnie używamy ps2epsi oraz epstopdf - ma to na celu aby wydruk był bez wielkości strony, dzięki temu na stronie z wydrukiem możemy umieścić także inne elementy):

\nopagebreak\newline\centerline{
	% skalujemy 90%
	\scalebox{0.9}{
		\includegraphics{obrazek.pdf}
	}
}

W wielu wypadkach warto obrazki umieszczać w specjalnie do tego przeznaczonym środowisku - \begin{figure} lub \begin{floatingfigure}. Umożliwia to dodanie podpisu do obrazka, umieszczanie obrazka w spisie obrazków tworzionym przez \listoffigures a także dodanie etykiety służącej do automatycznego odwoływania się do numeru obrazka poprzez \ref{etykietka_obrazkaa}.

% środowisko obrazka opływanego tekstem,
%  jego położenie (r - do prawej, l - do lewej, ...) i rozmiar
\begin{floatingfigure}[r]{8cm}
	% wyśrodkowanie zawartości pola obrazka
	\begin{center}
		% okienko skalujące:
		%  pierwszy argument szerokosc, drugi wysokość,
		%  jeden z nich może być zastąpiony ! - zachowanie proporcji obrazka
		%  w taki sposób możemy skalować także inne obiekty np. tekst
		\resizebox{7cm}{!}{
			% wstawienie obrazka
			\includegraphics{obrazek.png}
		}
		% opis obrazka
		\caption[Opcjonalny skrócony opis do spisu obrazków]{Opis}
		% etykieta
		\label{etykietka_obrazkaa}
	\end{center}
\end{floatingfigure}
% jeżeli obrazek wstawiany wewnątrz akapitu to nie chcemy wcięcia akapitowego dla tekstu po obrazku
\noindent

napisy na grafice, kolory, itp.

Gdy oprócz pakietu "graphics" postanowimy też dodać: \usepackage{overpic} i \usepackage{color} możemy umieszczać na kolorowym tle napisy na włączanych grafikach: \definecolor{pot}{rgb}{1,1,0.87} przed "\begin{document}" i \begin{overpic}{obrazek.png}\put(0,0) {\raisebox{3pt}{\colorbox{pot}{\bf Fot. 1}}}\end{overpic} w ciele dokumentu spowoduje wstawienie obrazka "obrazek.png" i umieszczenie w jego dolnym lewym rogu napisu "Fot. 1" na jasno żółtym tle.

Trochę bardziej zaawansowane

odnośniki hipertekstowe

Pakiety włączane przez \usepackage{url} i \usepackage{hyperref} - pozwalają na wstawianie odnośników hipertekstowych poprzez \url{adres} lub \href{adres_url}{opis}, tworzenie linkowanych spisów treści. Wewnętrzne odnośniki w dokumencie możemy tworzyć również manualnie poprzez wstawienie \hyperlink{identyfikator}{tekst odnośnika}, a w miejscu na które ma wskazywać: \hypertarget{identyfikator}{}.

Pakiet umożliwia także dodawanie informacji dodatkowych PDF poprzez \hypersetup{pdfauthor={Autor},pdftitle={Tytuł dokumentu},pdfpagemode=None,colorlinks=true,linkcolor=black,urlcolor=blue} i wiele innych rzeczy - więcej

wyliczanie

Pakiet \usepackage{enumerate} umożliwia nam tworzenie zaawansowanych list numerowanych, w instrukcji otwierającej środowisko wyliczania dodajemy określenie stylu wyliczania np: \begin{enumerate}[a)] spowoduje numerację małymi literami po których następuje nawias ")", zamiast małych liter (a) możemy używać także liczb arabskich (1), liczb rzymskich dużych (I), lub małych (i), wielkich liter (A), zamiast nawiasu możemy korzystać z dowolnych znaków np. kropki. Warto też zwrócić uwagę na pakiet enumitem oraz możliwość tworzenia list wypunktowywanych poprzez \begin{itemize} \item xxx \end{itemize}.

zachęcanie, zniechęcanie i wymuszanie podziału linni/strony/...

\pagebreak[3] - zachęta do złamania strony, \nopagebreak[4] - zakaz łamania strony, \linebreak[1] - zachęta do złamania linii, \nolinebreak[0] - zniechęcenie do złamania linii (w każdym z przypadków cyfra od 0 do 4 oznacza stopień zachęty, 4 jest wartością domyślną i oznacza wymuszenie)

wcięty akapit

Efekt ten można uzyskać na kilka sposobów:

  • \vspace{1cm}\noindent\hspace{2cm}\parbox[c]{13cm}{tresc akapitu}\vspace{1cm}
  • wersja z poprawionymi wcieciami (\parbox ustawia ich wielkosc na zero):
    	\vspace{1cm}
    	\newlength{\myindent} \setlength{\myindent}{\parindent}
    	\noindent\hspace{1cm}\parbox[c]{13cm}{\setlength{\parindent}{\myindent}
    		tresc akapitu
    	}\vspace{1cm}
  • \begin{quote}tresc akapitu\begin{quotation}

własna wielkość czcionki

Jeżeli nie zadowalają nas predefiniowane wielkości czcionek możemy przy pomocy instrukcji \font zdefiniować własny wariant czcionki np.: \font\duzypochyly=plbxti10 scaled 3300, którego będziemy mogli potem używać poprzez instrukcję \duzypochyly. Jest to przeskalowany do wielkości 33pt (scaled 3300) font "plbxti10" (polski, pogrubiony pochyły, szeryfowy); nazwę fontu który chcemy skalować możemy uzyskać używając go w pustym dokumencie - będzie ona podana (wraz z pełna ścieżką do pliku w którym jest zdefiniowany) w logu wygenerowanym po przetworzeniu pliku.

spisy treści, rozdziały, sekcje, ...

Spis treści umieszczamy poprzez wstawienie \tableofcontents aby nadać mu nazwę "Spis treści" korzystamy wcześniej z \def\contentsname{Spis treści}. Pozycję do spisu wprowadzają automatycznie polecenia takie jak: chapter, section, subsection, ..., możemy też wstawić ją ręcznie \addcontentsline{toc}{nazwa_poziomu_np_section}{tekst który ma zostać podany w spisie}, możemy też dodawać informacje dodatkowe np. dodatkowy odstęp: \addtocontents{toc}{\protect\vspace{1ex}}, więcej o spisach

Możemy także wpływać na sposób pokazywania numeracji, wyświetlania spisu treści oraz nagłówkków rozdziałów - np.:

% pozbywamy się numerów sekcji:
\renewcommand{\thesection}{}

% podobnie zadziała:
\setcounter{secnumdepth}{0 }

% chce mieć kropki .... w spisie treści między tytułem sekcji a numerem strony:
\renewcommand*\l@section{\@dottedtocline{1}{0cm}{0cm}}

% zmieniamy wielkość czcionki itp. dla section:
\renewcommand*\section{\@startsection{section}{1}{-3.0ex}{3.5ex}{3.5ex}
{\centering\normalfont\Large\bfseries}}

kolumny

Dość fajne kolumny można uzyskać w następujący sposób:

\newcommand{\kolumny}[2]{
\hbox{
	\vtop{
		\hsize = .45\hsize
		%tutaj deklarujemy zawartość kolumny w tym wypadku wyliczanie
			\begin{itemize}
			\hbox to 1.05\hsize{\vtop{
				#1
			}}
			\end{itemize}
		\par
	}
	\hskip .05\hsize
	\vtop{
		%\vspace{-14pt}
		\hsize = .45\hsize
		% tutaj wstawiamy po prostu to co jest podane przy wywołaniu
			#2
		\par
	}
}}

celem wstawienia ich w wybrane miejsce dokumentu wpisujemy:

\kolumny{
	\item pozycja 1
	\item pozycja 2
}{
	jakiś tekst
}

Załączam również przykładowy plik telefony.tex pokazujący jak wygląda plik tex'owy oraz robienie tabelki i parę innych rzeczy ...

Dostosowywanie do własnych potrzeb

własny pakiet makr

Aby mieć własny pakiet należy utworzyć plik "nazwa_mojego_pakietu.sty" wewnątrz umieszczamy na początku \ProvidesPackage{nazwa_mojego_pakietu}, a potem to na co mamy ochotę ... i wstawiamy go w standardowy sposób do naszego pliku *.tex - \usepackage{nazwa_mojego_pakietu}. Warto tutaj wspomnieć także iż niektóre instrukcje muszą być umieszczane w pakietach makr bądź pomiędzy \makeatletter i \makeatother.

Włąsne jak i pobrane z Sieci pakiety możemy dodać do systemu LaTeX w następujący sposób:

  1. tworzymy wlasny katalog w /usr/share/texmf-tetex/tex/latex
  2. umieszamy w nim swoje pliki *.sty i ewentualne pliki pomocnicze
  3. jako root wykonujemy mktexlsr

Alternatywną metodę (nie wymagającą praw root'a) opisuję w części o własnych klasach dokumentów.

własna klasa dokumentu

Możemy również utworzyć własną klasę dokumentów. W tym celu tworzymy plik "nazwa_mojej_klasy.cls", którego treść wygląda mniej więcej następująco:

% nagłówek klasy
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{nazwa_mojej_klasy}[RRRR/MM/DD v0.1.0 Opis klasy]

% przekazanie opcji do klasy bazowej (w tym przykładzie "article")
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\PassOptionsToClass{12pt}{article}
\ProcessOptions
% załadowanie klasy bazowej
\LoadClass{article}

% pobieramy ustawienia z nagłówka dokumentu, potem możemy je wykorzystywać w różny sposób
\def\nr_oddzialu#1{\gdef\@nr_oddzialu{#1}}
% dla ustawień obowiązkowych generujemy błąd gdy nie zostały podane
\def\@nr_oddzialu{???\ClassError{nazwa_mojej_klasy}{Brak numeru oddzialu}\@ehc}
% gdy nie obowiązkowe możemy np. ustawić na wartość domyślną

% włączanie makr zamiast \usepackage używamy \RequirePackage
% deklaracje własnych komend - \newcommand \def ...

Aby udostępnić własną klasę (tak aby nie trzeba było jej umieszczać w katalogu z dokumentem) możemy np. utworzyć katalog $HOME/.tex i umieścić tam plik naszej klasy. Następnie do skryptu startowego naszej powłoki (np. $HOME/.bashrc) dodać export TEXINPUTS=.:~/.tex:. W ten sposób możemy również udostępniać własne pakiety (w odróżnieniu od metody opisanej wcześniej nie wymaga to praw root'a.

liczniki

Liczniki przydają się do automatycznej numeracji rozdziałów, paragrafów itp. Liczniki tworzymy poleceniem \newcounter{nazwa_licznika}, wartość nadajemy mu poprzez \setcounter{nazwa_licznika}{wartosc}, zwiększać możemy ją o jeden poprzez instrukcję \stepcounter{nazwa_licznika}, natomiast wstawiać przez instrukcje typu \Roman{nazwa_licznika} (duże liczby rzymskie), \Alph{nazwa_licznika} (duże litery), \alph{nazwa_licznika} (małe litery), \arabic{nazwa_licznika} (liczby arabskie), ... .

Poniższy przykład ilustruje sposób umieszczania automatycznych odwołań do zadanych fragmentów pliku (np. paragrafów jakiegoś regulaminu).

\makeatletter
% obsługa zapamiętywania liczników

% wlaczam plik z definicjami liczników
\input{\jobname.cou}

% otwieram do zapisu plik z baza odnośników i zapisuje nagłówek
% na końcu powinienem go zamknąć: \closeout\licznfile
\newwrite\licznfile
\openout\licznfile=\jobname.cou
\write\licznfile{\string\def\string\liczniki{}}

% instrukcja zapamiętuje licznik w pliku (jako licznik o zadanej nazwie)
% \zapamietajlicznik{nazwa_licznika_do_zapamietania}{nazwa_nowego_licznika}
% przy czym dla środowiska enumerate są to dla kolejnych poziomów: enumi enumii enumiii enumiv ...
\newcommand{\zapamietajlicznik}[2] {
  \immediate\write\licznfile{\string\newcounter{#2}\string\setcounter{#2}{\arabic{#1}}}
  % \string - zabezpiecza backslesh (\)
}

% nie tworze liczników przy pierwszym obiegu - zamiast nich będę wpisywał XXX
% dopiero po wczytaniu ich z pliku wstawię odpowiednie numerki
\newcommand{\alphf}[1]{\ifx \liczniki \undefined XXX \else\alph{#1}\fi}
\newcommand{\arabicf}[1]{\ifx \liczniki \undefined XXX \else\arabic{#1}\fi}
\makeatother

W miejscu do którego chcemy się odwołać umieszczamy instrukcję zapamiętania licznika - \zapamietajlicznik{nazwa_zapamietywanego_licznika}{nazwa_pod_ktora_chemy_go_zapamietac}.
W miejscu w którym chcemy wstawić odwołanie umieszczamy \alphf{nazwa_pod_ktora_zapamietalismy_licznik} (aby wstawić jako literę) bądź \arabicf{nazwa_pod_ktora_zapamietalismy_licznik} (aby wstawić w formie liczby arabskiej).
Natomiast na końcu pliku musimy wstawić \closeout\licznfile.

a to da trochę lepsze polskojęzyczne dokumenty ...

(poniższy fragment kodu pochodzi z źródeł Nie za krótkiego wprowadzenia do systemu LaTeX 2e)

\makeatletter
%% Modyfikujemy parametry wpływające na skład i łamanie *** TP ***
%\overfullrule = 3mm % zaznacz linijki z nadmiarami czarną sztabką *** TP
\exhyphenpenalty = 999999 % słowa złożone nie przenoś na łączniku *** TP
\righthyphenmin = 3 % nie dziel xx-, ale xxx- *** TP
%\widowpenalty = 999999 % ostatnia linia akapitu nie zacznie strony *** TP
\clubpenalty = 9950 %% pierwsza linia akapitu wyjątkowo może kończyć stronę
\hfuzz = 3pt %% znaki mogą sterczeć na margines do wielkości 3pt *** TP
\tolerance 600 %% zwiększamy tolerancję ***
\pretolerance 300 %% oraz pretolerancję ***
\doublehyphendemerits = 99999 %% zniechęcamy TeX-a do dzielenia wyrazów *** TP

%% Redefinujemy wyliczenia usuwając odstępy między punktami
%% oraz przed i po wyliczeniach (bo takie są w Polsce zwyczaje)
%% za lshort2e.sty [pl]
\def\@listi{\leftmargin\leftmargini
            \parsep 0\p@ \@plus1\p@ \@minus\p@
            \topsep 3\p@ \@plus1\p@ \@minus\p@
            \itemsep0\p@ \@plus1\p@ \@minus\p@}
\let\@listI\@listi
\makeatother

Copyright (c) 1999-2008, Robert Paciorek (http://www.opcode.eu.org/), BSD-type license


Redystrybucja wersji źródłowych i wynikowych, po lub bez dokonywania modyfikacji JEST DOZWOLONA, pod warunkiem zachowania niniejszej informacji o prawach autorskich. Autor NIE ponosi JAKIEJKOLWIEK odpowiedzialności za skutki użytkowania tego dokumentu/programu oraz za wykorzystanie zawartych tu informacji.

This program is free software. Redistribution and use in source and binary forms, with or without modification, ARE PERMITTED provided save this copyright notice. This document/program is distributed WITHOUT any warranty, use at YOUR own risk.

Valid XHTML 1.1 Dokument ten (URL: http://www.opcode.eu.org/latex) należy do serwisu OpCode. Autorem tej strony jest Robert Paciorek, wszelkie uwagi proszę kierować na adres e-mail serwisu: webmaster@opcode.eu.org.
Data ostatniej modyfikacji artykulu: 2009-01-06 10:25:04 (UTC) (data ta może być zafałszowana niemerytorycznymi modyfikacjami artykułu).