LaTeX (carte)/Formatare avansată
Paragrafe speciale
modificareDacă ați citit cea mai mare parte sau toate capitolele de până acum, cel mai probabil ați întâlnit formatele din paragrafele următoare. Deși le-ați mai văzut, are sens să le re-introducem aici, pentru a completa informațiile din acest domeniu.
Text verbatim
modificareSunt mai multe moduri în care puteți introduce text care nu va fi interpretat de compilator. Dacă folosiți mediul verbatim
, tot ce este între comenzile begin și end este procesat așa cum este. Toate spațiile și liniile noi sunt reproduse așa cum sunt, iar textul este afișat într-un font corespunzător de mărime fixă. Orice comandă LaTeX va fi ignorată și tratată ca simplu text. Această situație este ideală pentru codul sursă. Acest mediu a fost folosit într-un exemplu în capitolul dinainte. Iată un exemplu:
|
Notă: îndată ce am intrat în mediul verbatim
, singura comandă ce va fi recunoscută este \end{verbatim}
. Oricare alta va fi afișată, literă cu literă (verbatim)! Dacă asta e o problemă, folosiți în schimb pachetul alltt, ce oferă un mediu cu același nume:
|
Amintiți-vă să adăugați \usepackage{alltt}
în preambulul documentului ca să-l puteți folosi!
În mediul alltt
, puteți folosi comanda \normalfont
pentru a reveni la fontul normal.
Pentru a scrie ecuații în mediul alltt
, puteți folosi \(
și \)
pentru a le include, în locul caracterului $
.
Când folosiți \textbf{}
în mediul alltt
, notați că fontul standard nu are tipul TT aldin. Fonturile txtt au tipul aldin: adăugați pur și simplu \renewcommand{\ttdefault}{txtt}
după \usepackage{alltt}
.
Dacă vreți numai să introduceți o expresie scurtă în modul verbatim, nu trebuie să folosiți mediul verbatim ca atare, ci doar comanda \verb
:
\verb+my text+
Primul caracter ce urmează \verb
este delimitatorul: aici am folosit "+", însă puteți folosi orice caracter, cu excepția "*" și a spațiului; \verb
va afișa literă cu literă tot textul după primul delimitator și până la următorul. Spre exemplu, codul:
\verb|\textbf{Salut, prietene!}|
va afișa \textbf{Salut, prietene!}
, ignorând efectul pe care \textbf
ar trebui să-l aibă asupra textului.
Pentru mai mult control asupra formatării, totuși, puteți încerca pachetul fancyvrb, care oferă un mediu Verbatim
(notați litera mare "V"). Acesta permite trasarea unei linii care să încadreze textul verbatim, modificarea mărimii fontului și chiar efecte tipografice în mediul Verbatim
. Poate fi folosit de asemenea în conjuncție cu pachetul fancybox și poate adăuga referințe la numere de linii (utile pentru grupuri de date sau de cod), putând chiar să includă fișiere externe întregi.
Tipărirea de URL-uri
modificareOricare dintre pachetele hyperref și url oferă comanda \url
, care afișează în mod corespunzător URL-uri, spre exemplu:
Mergi la \url{http://www.uni.edu/~numele-meu/cel-mai-bun-website.html}
pentru a vedea site-ul meu Web.
va afișa acest URL exact așa cum este scris (similar cu comanda \verb
), însă comanda \url
împarte de asemenea în silabe fără a pune o cratimă (în dreptul semnelor de punctuație). Aceasta a fost proiectată pentru URL-uri Web, astfel că le înțelege sintaxa și nu va împărți niciodată în silabe un cuvânt fără semne de punctuație, ci doar în dreptul caracterelor slash și a punctului. Țineți minte, totuși, că spațiile sunt interzise în URL-uri, astfel încât folosirea de spații în argumente \url
ar putea să nu dea rezultatul dorit, la fel ca utilizarea de caractere invalide pentru URL-uri.
Când utilizați această comandă cu ajutorul pachetului hyperref, puteți accesa URL-ul în documentul PDF rezultat, în vreme ce cu pachetul url, argumentul comenzii \url
nu va fi legat de adresa de Web. De asemenea, când folosiți pachetul hyperref, pentru a înlătura chenarul (linia dreptunghiulară) din jurul URL-ului, inserați pdfborder = {0 0 0 0}
în comanda \hypersetup{}
sau includeți pachetul cu opțiunea pdfborder = {0 0 0 0}
:
\usepackage[pdfborder={0 0 0 0}]{hyperref}
Mediul listing
modificareEste o extensie a mediului verbatim pusă la dispoziție de pachetul moreverb. Funcționalitatea suplimentară pe care o oferă constă în adăugarea de numere de linii în text cu ajutorul comenzii: \begin{listing}[pas]{prima linie}
. Argumentul obligatoriu prima linie specifică pe ce linie ar trebui să înceapă numărătoarea. Argumentul opțional pas este diferența dintre numerele liniilor consecutive considerate (valoarea implicită este 1, ceea ce înseamnă că fiecare linie va fi numărată).
Pentru a utiliza acest mediu, amintiți-vă să adăugați \usepackage{moreverb}
la preambulul documentului.
Pachetul listings
modificareCu ajutorul pachetului listings puteți adăuga text neformatat ca în cazul comenzii \begin{verbatim}, însă scopul său principal este includerea de cod sursă din orice limbaj de programare în document. Dacă vreți să includeți pseudocod sau algoritmi, ar fi bine să vă uitați și peste capitolul Algoritmi și pseudocod.
Pentru a utiliza pachetul, trebuie să-l încărcați în preambul:
\usepackage{listings}
Pachetul listings suportă evidențierea cuvintelor cheie, a tipurilor de date, etc. din majoritatea limbajelor de programare și este foarte flexibil. Dacă vreți doar să scrieți cod în document, pachetul vă pune la dispoziție mediul lstlisting:
\begin{lstlisting}
Scrieți codul aici...
\end{lstlisting}
O altă posibilitate, care este foarte utilă dacă ați creat un program ce cuprinde mai multe fișiere și încă îl mai editați, este să importați cod direct din fișierul sursă. În felul acesta, dacă modificați sursa, trebuie doar să recompilați codul LaTeX și documentul final va fi actualizat. Comanda este:
\lstinputlisting{fișier_sursă.py}
În acest exemplu avem un fișier sursă Python, însă nu contează: puteți include orice fișier, însă trebuie să scrieți numele complet al fișierului (cu tot cu extensie). Acesta va fi considerat text simplu și va fi evidențiat potrivit setărilor curente, ceea ce înseamnă că nu recunoaște singur limbajul de programare. Puteți specifica limbajul când includeți fișierul în felul următor:
\lstinputlisting[language=Python]{fișier_sursă.py}
Acest pachet oferă suport pentru următoarele limbaje de programare:
ABAP | IDL | Plasm |
ACSL | inform | POV |
Ada | Java | Prolog |
Algol | JVMIS | Promela |
Ant | ksh | Python |
Assembler2 | Lisp | R |
Awk | Logo | Reduce |
bash | make | Rexx |
Basic2 | Mathematica1 | RSL |
C | Matlab | Ruby |
C++ | Mercury | S |
Caml | MetaPost | SAS |
Clean | Miranda | Scilab |
Cobol | Mizar | sh |
Comal | ML | SHELXL |
csh | Modula-2 | Simula |
Delphi | MuPAD | SQL |
Eiffel | NASTRAN | tcl |
Elan | Oberon-2 | TeX |
erlang | OCL | VBScript |
Euphoria | Octave | Verilog |
Fortran | Oz | VHDL |
GCL | Pascal | VRML |
Gnuplot | Perl | XML |
Haskell | PHP | XSLT |
HTML | PL/I |
În cazul unora dintre acestea, se oferă suport pentru mai multe dialecte. Pentru mai multe informații, consultați documentația inclusă în pachet (ar trebui să aibă numele listings.dvi sau listings.pdf).
Note
1 — Suportă codul din Mathematica numai dacă scrieți în plain text format. Nu puteți include fișiere *.NB cu \lstinputlisting{...} ca în cazul oricărui alt limbaj de programare, însă Mathematica poate exporta sub formă de sursă LaTeX stilizată.
2 — Este obligatoriu să specificați dialectul pentru unele limbaje (spre exemplu, language={[x86masm]Assembler}).
Puteți modifica mai mulți parametri ce influențează modul de afișare a codului. Puteți pune codul următor oriunde în document (nu contează dacă este înainte sau după \begin{document}), după cum vă este mai la îndemână. Comentariile explică fiecare comandă în parte.
\lstset{ %
language=Octave, % alegeți limbajul pentru cod
basicstyle=\footnotesize, % mărimea fonturilor utilizate pentru cod
numbers=left, % unde să scrie numerele de linii
numberstyle=\footnotesize, % mărimea fonturilor folosite pentru numerele de linii
stepnumber=2, % diferența dintre numerele de linii consecutive
% dacă este 1, fiecare linie va fi numerotată
numbersep=5pt, % cât de departe sunt numerele de linii față de cod culoarea
backgroundcolor=\color{white}, % fundalului; vă trebuie \usepackage{color} în preambul
showspaces=false, % evidențiază spațiile cu underscore
showstringspaces=false, % subliniază spațiile din șirurile de caractere
showtabs=false, % arată tab-urile din șirurile de caractere cu underscore
frame=single, % adaugă un cadru (chenar) în jurul codului
tabsize=2, % setează dimensiunea implicită pentru tab la 2 spații
captionpos=b, % setează poziția titlurilor sub figuri sau tabele
breaklines=true, % setează separarea automată a liniilor
breakatwhitespace=false, % se trece la linia nouă dacă sunt spații libere?
title=\lstname, % arată numele fișierelor incluse cu \lstinputlisting;
% încearcă să scrie o notă sau legendă în loc de titlu
escapeinside={\%*}{*)}, % dacă vreți să adăugați un comentariu în cod
morekeywords={*,...} % dacă vreți să mai adăugați cuvinte cheie la setul existent
}
Linia escapeinside necesită o explicație suplimentară. Vă trebuie dacă vreți să adăugați ceva text în cod, care să nu fie afișat. Notați că, implicit, comentariile ce țin de limbajul de programare vor fi afișate; comanda escapeinside={A}{B} definește comentarii doar pentru pachetul listings. Întregul cod dintre șirurile de caractere "A" și "B" va fi ignorat. În exemplul anterior, comentariile pentru Octave încep cu %, și urmează a fi afișate în documentul final dacă nu încep cu %*, însă trebuie să vă amintiți să "închideți" comentariul cu altă steluță "*".
Dacă adăugați paragraful dinainte, puteți folosi comanda următoare pentru a modifica setările codului:
\lstset{language=C,caption=Text descriptiv,label=EtichetăDescriptivă}
Găsiți mai multe informații în PDF-ul lui Carsten Heinz și Brooks Moses.
Detalii și documentație pentru pachetul listings puteți găsi pe site-ul CTAN.
Pentru un scurt exemplu, vezi codul de aici.
Comentarii ce se întind pe mai multe linii
modificareDupă cum ați văzut, singurul mod în care LaTeX vă permite să adăugați comentarii este folosind caracterul special %
, care va transforma în comentariu restul liniei. Această abordare necesită mult timp pentru implementare dacă vreți să inserați comentarii foarte mari sau vreți să comentați o parte a documentului, la care veți reveni mai târziu. Cu ajutorul pachetului verbatim, scris în preambul ca de obicei:
|
puteți folosi un mediu numit comment, care va comenta tot ce cuprinde. Iată un exemplu:
|
Acesta este încă un exemplu de includere a comentariilor în document. |
Notați că asta nu va merge în medii complexe, cum este math, de exemplu. Poate vă întrebați, de ce ar trebui să includ un pachet numit verbatim pentru a avea posibilitatea de a adăuga comentarii? Răspunsul este imediat: textul comentat nu este interpretat de compilator la fel ca textul verbatim, diferența fiind că textul verbatim este introdus în document, iar comentariul nu.
Ca o alternativă, puteți defini o comandă \comentariu{}
, adăugând în preambulul documentului:
|
Apoi, pentru a comenta un text, utilizați această comandă:
|
|
Pachetul rotating
modificarePachetul rotating vă oferă posibilitatea de a roti orice obiect cu un unghi arbitrar. Îndată ce l-ați încărcat cu comanda standard în preambul:
\usepackage{rotating}
puteți folosi trei medii noi:
\begin{sideways}
rotește întregul argument cu 90 de grade în sens trigonometric (invers acelor de ceasornic). Mai mult:
\begin{turn}{30}
va roti argumentul cu 30 de grade. Puteți da orice unghi ca argument, fie că este pozitiv sau negativ. Acesta va lăsa spațiul necesar pentru a evita orice suprapunere de text.
\begin{rotate}{30}
este la fel ca turn, însă nu adaugă spațiu suplimentar.
Dacă vreți ca un element flotant să fie întors cu 90 de grade în sens trigonometric astfel încât să se rotească și titlul sau legenda în mod corespunzător, puteți folosi
\begin{sidewaysfigure}
sau
\begin{sidewaystable}
Notați, totuși, că figurile sau tabelele rezultate vor fi așezate pe o pagină separată.
Notă: Multe programe de vizualizare pentru DVI nu permit afișarea textului și tabelelor rotite. Textul va fi afișat normal. Trebuie să convertiți fișierul DVI în PDF și să-l vizualizați cu un program pentru PDF-uri pentru a vedea efectele de rotire. Aveți grijă totuși că tipărirea acelor fișiere PDF ar putea roti pagina respectivă din nou în aceeași direcție în unele situații. Acest comportament poate fi influențat de configurările programului de conversie dvi2pdf. Uitați-vă peste manual pentru mai multe informații.
Acest pachet este inclus în grupul 'texlive-latex-recommended' din Ubuntu.
Citarea de text
modificareLaTeX oferă mai multe medii pentru citarea de text, cu mici diferențe și menite pentru tipuri diferite de citate. Toate sunt indentate la una dintre margini, la care puteți adăuga propriile marcaje pentru citate dacă vreți. Mediile oferite sunt:
quote
- pentru un citat scurt, sau o serie de citate mici, separate de linii libere.
quotation
- pentru citate mai lungi, de un paragraf sau mai multe, întrucât indentează prima linie a fiecărui paragraf.
verse
- pentru citate în care liniile libere sunt importante, ca în cazul poeziei. În cadrul acestui mediu, noi strofe sunt create cu o linie liberă, iar liniile noi dintr-o strofă sunt indicate cu ajutorul comenzii pentru o linie nouă,
\\
. Dacă o linie ia mai mult spațiu pe o pagină decât mărimea normală a unei linii, atunci toate liniile următoare sunt indentate până când sunt separate explicit cu comanda\\
.
Rezumate
modificareÎn publicațiile științifice, se obișnuiește să se înceapă cu un rezumat care oferă cititorului o privire de ansamblu asupra conținutului. LaTeX pune la dispoziție mediul abstract
în acest scop. Poate fi accesat în clasele de documente article
și report
; nu este disponibil în clasa book
, însă este foarte ușor să creezi versiunea proprie dacă vrei.
Liste personalizate
modificarePersonalizarea LaTeX depășește domeniul începătorilor. Deși nu este greu de realizat, deoarece începătorii sunt deja încărcați cu o mulțime de comenzi și medii pe care trebuie să le învețe, trecerea la subiecte mai avansate poate genera confuzie.
Totuși, de vreme ce acest tutorial privește formatarea, voi prezenta totuși un scurt ghid legat de personalizarea listelor. Puteți trece peste această secțiune!
Modificarea spațierii liniilor în liste
modificareÎn mediile de listare, puteți redefini unele variabile de lungime în LaTeX, spre exemplu:
\begin{itemize} \setlength{\itemsep}{1pt} \setlength{\parskip}{0pt} \setlength{\parsep}{0pt} \item Primul item \item Al doilea item \end{itemize}
Altfel, pentru a crea un aspect unificat în document, puteți defini propriul mediu de enumerare:
\newenvironment{enumerare} {\begin{enumerate} \setlength{\itemsep}{1pt} \setlength{\parskip}{0pt} \setlength{\parsep}{0pt}} {\end{enumerate}}
Modificarea listelor numerotate
modificareLucrul pe care utilizatorii vor să-l schimbe cel mai des la listele numerotate sunt contoarele. De aceea, pentru a merge mai departe, este necesară o scurtă introducere în domeniul contoarelor din LaTeX. Pentru orice lucru pe care LaTeX îl numără automat, cum ar fi antetele secțiunilor, figurile și listele cu marcatori, există un contor asociat cu el care controlează numerotarea.
Sunt patru contoare individuale asociate cu listele cu marcatori, fiecare reprezentând unul din cele patru niveluri posibile de imbricare, numite: enumi
, enumii
, enumiii
și enumiv
. Pentru a reseta oricare dintre aceste contoare în mijlocul unei enumerări simple, folosiți \setcounter
. Contorul este incrementat de comanda \item
înainte de a fi afișat. Spre exemplu, pentru a reseta enumi
, scrieți:
\begin{enumerate}
\setcounter{enumi}{4}
\item Al cincilea element
\end{enumerate}
care va fi afișat sub forma:
5. Al cincilea element
Fiecare contor are de asemenea un format implicit care îi dictează cum este afișat oricând LaTeX are nevoie să-l afișeze. Astfel de formate sunt specificate cu ajutorul unor comenzi LaTeX interne:
Comandă | Exemplu |
---|---|
\arabic | 1, 2, 3 ... |
\alph | a, b, c ... |
\Alph | A, B, C ... |
\roman | i, ii, iii ... |
\Roman | I, II, III ... |
\fnsymbol | Făcut pentru note de subsol (vezi mai jos), însă afișează o secvență de simboluri. |
Fiecare entitate pentru un contor păstrează diverse informații despre acesta. Pentru a ajunge la elementul numerotat, folosiți comanda \the
urmată imediat (adică fără spațiu) de numele contorului, de exemplu, \theenumi
. Aceasta este deseori denumită reprezentarea unui contor.
Pentru a modifica formatarea la un nivel dat:
\renewcommand{\reprezentare}{\formatul_comenzii{contor}}
Versiunea generică nu este clară, astfel încât câteva exemple vor clarifica lucrurile:
% Redefiniți primul nivel
\renewcommand{\theenumi}{\Roman{enumi}}
\renewcommand{\labelenumi}{\theenumi}
% Redefiniți al doilea nivel
\renewcommand{\theenumii}{\Alph{enumii}}
\renewcommand{\labelenumii}{\theenumii}
Metoda utilizată mai sus mai întâi modifică în mod explicit formatul folosit de contor. Totuși, elementul ce controlează eticheta (label) trebuie actualizat pentru a reflecta schimbarea, lucru pe care-l face a doua linie. Un alt mod de a obține acest rezultat ar fi:
\renewcommand{\labelenumi}{\Roman{enumi}}
Asta pur și simplu redefinește aspectul etichetei, ceea ce e de ajuns, presupunând că nu aveți de gând să transmiteți referințe la un item specific din listă, caz în care referința va fi afișată în formatul anterior. Această problemă nu apare în primul exemplu.
Notați că puteți adăuga și alte simboluri, cum ar fi parantezele și punctele, înainte și după contor. Spre exemplu, pentru a crea o listă indexată de litere mici cu paranteze înainte și după litere, puteți da următoarea comandă:
\renewcommand{\labelenumi}{(\alph{enumi})}
Modificarea listelor cu marcatori
modificareListele cu marcatori nu sunt atât de complexe întrucât nu trebuie să numere. De aceea, pentru a le personaliza, pur și simplu modificați etichetele. Acest lucru se poate face manual pentru fiecare intrare cu comanda \item[etichetă nouă]
, de exemplu \item[$\star$]
.
Etichetele listelor cu marcatori se accesează prin intermediul comenzilor \labelitemi
, \labelitemii
, \labelitemiii
și \labelitemiv
, respectiv pentru cele patru niveluri.
Putem să modificăm aceste etichete în felul următor:
\renewcommand{\labelitemi}{\textgreater}
Exemplul de mai sus ar seta etichetele pentru primul nivel la un simbol "mai mare decât" (>). Desigur, simbolurile textuale din Latex nu sunt foarte atrăgătoare. Puteți folosi unul dintre simbolurile ZapfDingbat, descrise în secțiunea Alte simboluri din capitolul Formatare. Sau puteți utiliza un simbol matematic:
\renewcommand{\labelitemi}{$\star$}
Puteți crea o listă cu marcatori, fără spații verticale între itemi consecutivi, în felul următor:
\begin{itemize}
\setlength{\itemsep}{0cm}
\setlength{\parskip}{0cm}
\item Primul item din listă
\item Itemul următor
\end{itemize}
Detalii ale personalizării listelor
modificareNotați că este necesar ca \renewcommand
să apară după instrucțiunea \begin{document}
, astfel încât schimbările realizate să fie luate în considerare. Acest lucru este necesar atât pentru liste numerotate, cât și pentru cele cu marcatori.
Liste inline
modificareListele inline sunt un caz special întrucât necesită utilizarea pachetului paralist, care oferă mediul inparaenum
(cu o specificație opțională de formatare în paranteze drepte):
|
Pentru a schimba stilurile contoarelor, simbolurile A, a, I, i, și 1 pot fi utilizate în argumentul opțional pentru a produce contoare cu unul din stilurile \Alph
, \alph
, \Roman
, \roman
și \arabic
. Spre exemplu:
\begin{inparaenum}[(i)]
produce etichetele (i), (ii), (iii) ...
Această pagină foloseşte materiale din cartea lui Andy Roberts, Getting to grips with Latex, cu permisiunea autorului.