LaTeX (carte)/Importarea de imagini


Strict vorbind, LaTeX nu poate gestiona imaginile direct: pentru a introduce elemente grafice în documente, LaTeX creează o căsuță cu aceeași dimensiune ca imaginea pe care vreți s-o includeți și încorporează imaginea, fără a face alte procesări. Asta înseamnă că va trebui să aveți grijă ca imaginile să fie în formatul corespunzător pentru a putea fi incluse. Asta nu e o problemă prea mare întrucât LaTeX suportă cele mai cunoscute formate de imagini.

Pachetul graphicx

modificare

După cum am spus mai devreme, LaTeX nu poate gestiona imaginile direct, așadar vom folosi facilități adiționale: trebuie să încărcăm pachetul graphicx în preambulul documentului:

\usepackage{graphicx}

Acest pachet acceptă ca argument driverul extern de utilizat pentru gestionarea imaginilor; totuși, ultima versiune a acestui pachet se ocupă de toate aspectele, schimbând driverul în funcție de compilatorul folosit, astfel că nu trebuie să vă ocupați personal de aceste lucruri. Și totuși, presupunând că vreți să înțelegeți mai bine cum merge, iată opțiunile posibile pe care le puteți pasa pachetului:

  • dvips (implicit dacă compilați cu comanda latex), dacă faceți compilarea cu latex pentru a obține un DVI și vreți să vizualizați documentul cu un program pentru DVI sau PS.
  • dvipdfm, dacă compilați cu latex pentru a obține un DVI, pe care intenționați apoi să-l convertiți într-un PDF cu comanda dvipdfm, putând vizualiza documentul cu orice program pentru PDF.
  • pdftex (implicit dacă realizați compilarea cu pdflatex), dacă compilați cu pdftex pentru a obține un PDF pe care îl puteți vedea cu un program de vizualizare pentru PDF-uri.

Din nou, nu trebuie să pasați nicio opțiune pachetului, întrucât setările implicite sunt destul de bune în cele mai multe cazuri.

În multe privințe, importarea imaginilor în document folosind sistemul LaTeX este destul de simplă, îndată ce aveți imaginile în formatul corespunzător! De aceea, mă tem că pentru cei mai mulți utilizatori, efortul cel mai mare va fi convertirea fișierelor grafice. În continuare vom vedea ce formate pot avea imaginile pe care le puteți include, iar apoi vom vedea cum puteți face asta.

Opțiunile documentului

modificare

Pachetele graphics și graphicx recunosc opțiunile "draft" și "final" date în comanda \documentclass[...]{...} la începutul fișierului. Opțiunea "draft" va împiedica includerea imaginii în fișierul de ieșire și va înlocui conținutul cu numele fișierului ce conține imaginea. Opțiunea "final" va face ca imaginea să fie inclusă în fișierul de ieșire. Valoarea implicită este "draft".

Formate suportate de imagini

modificare

După cum am explicat mai devreme, formatele de imagini pe care le vom putea folosi depind de driverul utilizat de graphicx, însă, de vreme ce driverul este ales în mod automat în funcție de compilator, formatele permise de imagini vor depinde de compilatorul folosit.

Compilarea cu latex

modificare

Singurul format pe care îl puteți include când compilați cu comanda latex este Encapsulated PostScript (EPS).

Formatul EPS a fost definit de firma Adobe Systems pentru a facilita importarea de către aplicații a elementelor grafice bazate pe formatul PostScript în documente. Deoarece un fișier EPS declară dimensiunea imaginii, facilitează sistemelor de genul LaTeX aranjarea textului și graficii. EPS este un format vectorial — asta înseamnă că poate avea o calitate foarte mare dacă este creat în mod corespunzător cu programe de grafică vectorială. Putem stoca de asemenea imagini bit-map în format EPS, însă vor necesita foarte mult spațiu pe disc.

Multe pachete cu programe grafice au abilitatea de a salva imagini în format EPS (extensia e în mod normal .eps). Iată câteva exemple de programe ce pot genera fișiere EPS:

  • Tipărirea sub forma unui fișier EPS:
    • În Windows, PDFCreator este un program open source ce poate crea atât fișiere PDF, cât și EPS. Instalează o imprimantă virtuală care poate fi accesată din alte programe ce au o intrare "print..." în meniu (practic orice program).
  • Crearea și convertirea elementelor de grafică vectorială:
    • Programele comerciale de grafică vectorială, de genul Adobe Illustrator, CorelDRAW și FreeHand pot citi și scrie fișiere EPS. Totuși, aceste produse sunt limitate la platformele Windows și Mac OS.
    • Inkscape poate salva fișiere în formatul vectorial EPS și rulează pe platforme multiple. Inkscape nu poate deschide fișiere EPS direct; totuși, cu programul utilitar epstopdf puteți converti EPS în PDF, iar Inkscape poate importa PDF-uri. Începând cu versiunea 0.48, Inkscape are o opțiune specială de output PDF+LaTeX (și EPS/PS). Vezi site-ul Inkscape.
    • Dia este un program utilitar cross platform pentru diagrame, ce poate exporta EPS-uri.
  • Crearea și convertirea elementelor grafice bazate doar pe raster în EPS:
    • GIMP are o interfață grafică și este multi-platform.
    • Pentru linia de comandă:
    • Aceste trei programe operează cam la fel, și pot face conversii între cele mai multe formate grafice. Sam2p este totuși cel mai recent dintre ele și pare să ofere cea mai bună calitate, dar și să dea cele mai mici fișiere de ieșire.
      • imgtops. Un mic program utilitar pentru grafică.
  • Crearea de reprezentări grafice vectoriale de calitate pentru publicații:
    • Gnuplot, ce produce grafică științifică din 1986.
    • R, figuri statistice și științifice.
    • Generic Mapping Tools (GMT), care generează hărți și o serie de reprezentări grafice foarte personalizabile.
    • Gnumeric, ce generează foi de calcul, poate exporta SVG, EPS, PDF.
    • matplotlib, bibliotecă pentru reprezentări grafice, scrisă în Python, ce poate exporta în formate PDF și EPS.

Trebuie să apelați la câteva trucuri pentru a putea importa alte formate decât EPS în documentele DVI, însă acestea sunt foarte complicate. Pe de altă parte, convertirea oricărei imagini în format EPS este foarte simplă, astfel că nu are rost să le luăm în considerare aici.

Compilarea cu pdflatex

modificare

Dacă compilați cu pdflatex pentru a produce un PDF, aveți mai multe opțiuni. Nu puteți insera fișiere EPS. Puteți insera:

  • JPG, folosit foarte mult pe Internet, camere digitale, etc. Reprezintă cea are bună alegere dacă vreți să inserați fotografii.
  • PNG, un format foarte comun (chiar dacă nu în așa măsură ca JPG); este un format fără pierderi la dezarhivare (lossless) și reprezintă cea mai bună alegere pentru diagrame (dacă nu ați reușit să generați o versiune vectorială) și instantanee ale ecranului ('screenshots').
  • PDF, foarte mult folosit pentru documente, însă poate fi utilizat și pentru a stoca imagini. Suportă atât imagini vectoriale, cât și imagini bit-map, însă nu se recomandă pentru ultimele, de vreme ce JPG sau PNG oferă același rezultat folosind mai puțin spațiu pe disc.
  • Formate vectoriale, ce pot fi folosite cu Inkscape. Există instrucțiuni legate de cum puteți salva imaginile vectoriale în format PDF înțeles de LaTeX și puteți face sistemul LaTeX să gestioneze automat stilurile și dimensiunile textului din imagini.

JPG și PNG sunt suportate de orice program de procesare de imagini, astfel că puteți să folosiți formatul preferat. Dacă vreți să creați PDF-uri vectoriale de calitate înaltă pe care să le încorporați în documentul final PDF, puteți utiliza programul Inkscape: acesta oferă suport pentru numeroase formate vectoriale, astfel că poate face conversii dintr-un format în altul. De asemenea, puteți crea imaginile direct cu Inkscape. Dacă vreți să realizați reprezentări grafice matematice, Gnuplot poate salva datele în orice format.

Notați că fișierele EPS nu pot fi folosite cu comanda pdflatex, totuși pot fi convertite în format PDF cu ajutorul programului utilitar epstopdf, inclus în majoritatea distribuțiilor LaTeX. Acesta poate fi chemată automat de LaTeX folosind pachetul epstopdf. În Windows, puteți converti mai multe fișiere scriind următoarea linie într-un fișier batch (un fișier text cu extensia .BAT) situat în același director cu imaginile:

for %%f in (*.eps) do epstopdf %%f

și care poate fi rulat din linia de comandă. Dacă epstopdf produce pagini întregi, în care sunt incluse undeva imaginile, utilizați

$ epstopdf --gsopt=-dEPSCrop foo.eps

sau încercați programul utilitar ps2pdf

$ ps2pdf -dEPSCrop foo.eps

pentru a obține documentul final PDF.

Imaginile pot fi salvate în diverse formate în scopuri diferite. Spre exemplu, un director poate conține un fișier "diagram.pdf" pentru tipărirea la rezoluție înaltă, în timp ce "diagram.png" poate fi folosit pentru previzualizarea pe monitor. Puteți specifica imaginea de utilizat de programul pdflatex prin intermediul următoarei comenzi plasate în preambulul documentului:

\DeclareGraphicsExtensions{.pdf,.png,.jpg}

care specifică fișierele ce vor fi incluse în document, dacă există fișiere cu același nume de bază, însă cu extensii diferite.

Includerea imaginilor

modificare

Acum că am văzut ce formate putem include și cum putem gestiona aceste formate, este timpul să învățăm cum le putem include în document. După ce ați încărcat pachetul graphicx în preambul, puteți include imagini cu comanda \includegraphics, a cărei sintaxă se prezintă după cum urmează:

\includegraphics[atr1=val1, atr2=val2, ..., atr_n=val_n]{nume_imagine}

După cum sper că știți deja, argumentele din paranteze drepte sunt opționale, în vreme ce argumentele din acolade sunt obligatorii. Argumentul din acolade este numele imaginii. Scrieți fișierul cu imaginea fără extensie. În felul acesta, compilatorul LaTeX va căuta formatele suportate de imagini din acel director și-l va alege pe cel mai bun (EPS dacă outputul este DVI; JPEG, PNG sau PDF dacă outputul este PDF). Varietatea atributelor posibile ce pot fi setate este destul de mare, astfel că le descriem în continuare numai pe cele mai cunoscute:

width=xx Specifică lățimea dorită a imaginii importate la xx. Notă: raportul dintre lățime și înălțime se va menține numai dacă specificați doar una dintre dimensiuni.
height=xx Specifică înălțimea dorită a imaginii importate la xx.
keepaspectratio Acesta poate fi setat la valorile adevărat (true) sau fals (false). La valoarea adevărat, va redimensiona imaginea după lățime și înălțime, însă nu va distorsiona imaginea, astfel că nu se vor depăși nici lățimea, nici înălțimea.
scale=xx Redimensionează imaginea cu factorul de scară dorit. De exemplu, 0,5 va reduce la jumătate dimensiunile imaginii, în vreme ce o valoare de 2 le va dubla.
angle=xx Această opțiune poate roti imaginea cu xx grade (în sens trigonometric, invers acelor de ceasornic).
trim=l b r t Această opțiune va decupa imaginea importată după l la stânga (left), b din partea inferioară (bottom), r de la dreapta (right) și t din partea superioară (top), unde l, b, r și t sunt lungimi.
clip Pentru ca opțiunea trim să meargă, trebuie să setați clip=true.
page=x Dacă fișierul ce conține imaginea este un PDF cu mai multe pagini, acest parametru vă permite să utilizați o altă pagină decât prima.

Pentru a folosi mai mult decât o opțiune la un moment dat, separați opțiunile prin virgule. Ordinea opțiunilor contează. Spre exemplu, mai întâi ar trebui să rotiți imaginea (cu un unghi), iar apoi să-i specificați lățimea.

Imaginile incluse vor fi inserate doar acolo unde scrieți codul, iar compilatorul le va trata ca pe niște "căsuțe mari". După cum vom vedea într-un capitol ulterior, asta va genera un output de slabă calitate, astfel că ar fi mai bine să plasați imaginile în obiectele flotante.

OK, a venit timpul să vedeți graphicx în acțiune. Iată câteva exemple:

\includegraphics{chick}

Această comandă importă pur și simplu imaginea, fără altă procesare suplimentară. Totuși, este foarte mare (așadar n-o voi afișa aici!). Deci, să-i reducem dimensiunile:

\includegraphics[scale=0.5]{chick}

Dimensiunile imaginii au fost reduse la jumătate. Dacă vreți să fiți mai specifici și să dați lungimi efective dimensiunilor imaginii, puteți proceda în felul următor:

\includegraphics[width=2.5cm]{chick}

Puteți specifica scara și în raport cu lățimea liniei din mediul local (\linewidth), cu lățimea textului de pe o pagină (\textwidth) sau cu înălțimea textului de pe pagină (\textheight) (iamginile nu sunt afișate):

\includegraphics[width=0.5\linewidth]{chick}

\includegraphics[width=0.75\textwidth]{chick}

\includegraphics[height=0.75\textheight]{chick}

Pentru a face o rotație (am redus de asemenea dimensiunile imaginii):

\includegraphics[scale=0.5, angle=180]{chick}

Și în sfârșit, iată un exemplu de decupare a imaginii dacă vreți să evidențiați o anumită zonă a acesteia:

% ordinea parametrilor opțiunii de decupare (''trim''): stânga jos dreapta sus
\includegraphics[trim = 10mm 80mm 20mm 5mm, clip, width=3cm]{chick}

Observați prezența opțiunii clip, fără de care nu se poate efectua operația de decupare.

După cum probabil ați observat, denumirea fișierului ce conține imaginea este dată întotdeauna fără extensie: LaTeX va avea grijă să obțină versiunea corespunzătoare din directorul curent. Considerați situația următoare: ați adăugat câteva imagini în format JPG documentului și l-ați compilat cu succes pentru a obține un format de ieșire PDF. Acum îl compilați pentru a obține un DVI, rulați comanda latex și obțineți o mulțime de erori... întrucât ați uitat să includeți în director versiunile EPS ale imaginilor pe care vreți să le inserați. La începutul acestei cărți, am spus că aceeași sursă LaTeX poate fi compilată atât în format DVI, cât și PDF fără nicio modificare. Acest lucru este adevărat, atâta vreme cât nu utilizați anumite pachete, iar graphicx este unul dintre acestea. În orice caz, încă puteți folosi ambele compilatoare și cu documente ce includ imagini, atâta timp cât vă amintiți să furnizați imaginile în ambele formate (EPS și unul dintre JPG, PNG și PDF).

Puteți crea margini în jurul unei imagini în LaTeX cu ajutorul comenzii fbox:

\setlength\fboxsep{0pt}
\setlength\fboxrule{0.5pt}
\fbox{\includegraphics{chick}}

Puteți controla spațiul liber dintre margini și imagine cu comanda \setlength\fboxsep{0pt}, în cazul de față valoarea 0pt înseamnă lipsa unui asemenea spațiu liber, astfel încât marginile vor fi plasate strâns în jurul imaginii. Puteți controla grosimea marginilor cu comanda \setlength\fboxrule{0.5pt}.

Stocarea imaginilor

modificare

Există o cale să transmiteți sistemului LaTeX unde să caute după imagini: spre exemplu, poate fi util să stocați imaginile într-un singur loc pentru a putea fi utilizate în mai multe documente. Răspunsul îl constituie comanda \graphicspath, care are un argument ce dă calea unui director adițional în care vreți ca sistemul LaTeX să caute imagini când un fișier folosește comanda \includegraphics. Iată câteva exemple (/ de la sfârșit este necesar):

\graphicspath{{c:\imagini~1\camera}}
\graphicspath{{c:/imagini~1/camera/}} *
\graphicspath{{/var/lib/imagini/}}
\graphicspath{{./imagini/}}
\graphicspath{{dir_imagini/}{alt_dir/}{al_treilea_folder/}}
\graphicspath{{imagini//}}

* merge în Windows XP.

Vă rugăm consultați http://www.ctan.org/tex-archive/macros/latex/required/graphics/grfguide.pdf. Ultima comandă caută recursiv fișierele datorită semnului dublu slash "//". În exemplul prezentat, aveți un director numit "imagini" în același director cu fișierul .tex principal (adresă relativă). În maniera aceasta, puteți crea un arbore de directoare în cadrul acestuia ce ar putea de exemplu să faciliteze sortarea/găsirea/editarea unui număr mare de fișiere ce conțin imagini. Rețineți că această abordare poate acapara foarte multe resurse.

După cum ați observat, în primul exemplu am utilizat o formă "sigură" (MS-DOS) a unui folder de imagini din Windows, întrucât, după cum știți, e o idee proastă să folosiți nume de directoare ce conțin spații. Utilizând căi absolute, \graphicspath face fișierele mai puțin portabile, în timp ce dacă folosiți căi relative (ca în ultimul exemplu), nu ar trebui să aveți vreo problemă de portabilitate, însă rețineți să nu utilizați spații în denumirile de fișiere. Ca o alternativă, dacă utilizați comanda pdflatex pentru compilare, puteți folosi pachetul grffile, care vă va permite să utilizați spații în denumirile fișierelor.

Imagini ca figuri

modificare

Există multe scenarii în care ați putea dori să însoțiți o imagine cu un titlu sau o legendă și poate cu niște referințe. Acest lucru se poate face cu ajutorul mediului figure. Codul următor prezintă minimul necesar pentru a utiliza o imagine ca pe o figură.

\begin{figure}[htb]
\includegraphics{imagine.png}
\end{figure}

Codul de mai sus este relativ simplu și nu oferă multă funcționalitate. Codul ce urmează prezintă o utilizare mai extinsă a mediului figure, care este aproape universal utilizat, oferind un titlu sau o legendă și o etichetă, centrând imaginea și reducând dimensiunile la 80% din lățimea textului.

\begin{figure}[htb]
\begin{center}
\leavevmode
\includegraphics[width=0.8\textwidth]{imagine.png}
\end{center}
\caption{O imagine incredibilă}
\label{fig:imagine_incredibilă}
\end{figure}

Mediul figure nu se folosește exclusiv pentru imagini. Puteți găsi mai multe informații despre acest mediu și utilizarea sa în capitolul Elemente flotante, figuri și note.

Text în jurul imaginilor

modificare

Text poate de asemenea să fie pus în jurul imaginilor. (Acest lucru este deosebit de util dacă includeți imagini înalte.)

% secțiune de import
\usepackage{wrapfig}

% secțiune de conținut
\begin{wrapfigure}{r}{8cm} % "l" pentru stânga (''left'') sau
% "r" pentru dreapta (''right'') paginii, 8cm este lățimea figurii
\centering
\includegraphics[height=80mm]{imagine.jpg}
\caption{Titlul imaginii}
\label{img}
\end{wrapfigure}

Includerea de pagini întregi din PDF-uri

modificare

Există un pachet special pentru asta: pdfpages. Acesta permite inserarea de pagini întregi așa cum sunt și a mai multor pagini pe o pagină din documentul de ieșire (de exemplu, 2x3). Vezi mai multe informații în această documentație.

Crearea de elemente grafice vectoriale

modificare

TikZ/PGF

modificare

Mai multe informații introductive despre TikZ puteți găsi în capitolul Crearea de imagini.

Puteți realiza direct imagini cu comenzi TeX, folosind pachetul tikz: http://ftp.dante.de/tex-archive/help/Catalogue/entries/pgf.html Acesta include foarte multă documentație și numeroase exemple.

% Necesită includerea \usepackage{tikz} în preambul
\begin{figure}
  \centering
  \begin{tikzpicture}
    \draw[thick,rounded corners=8pt] 
(0,0) -- (0,2) -- (1,3.25) -- (2,2) -- (2,0) -- (0,2) -- (2,2) -- (0,0) -- (2,0);
  \end{tikzpicture}
  \caption{Titlul figurii}
  \label{fig:test}
\end{figure}

Puteți găsi o colecție amplă de exemple la adresa: http://www.texample.net/tikz/

Puteți găsi pachete bazate pe TikZ (de exemplu pentru trasarea circuitelor electrice) la această adresă: http://ftp.dante.de/tex-archive/help/Catalogue/bytopic.html#pgftikzsection

Puteți realiza grafică vectorială cu ajutorul programului Xfig (vezi capitolul Instalare), care poate fi exportată în formate potrivite pentru LaTeX. În Xfig, îndată ce ați salvat imaginea sub forma unui fișier test.fig, trebuie să-l exportați cu ajutorul meniului File > Export din fereastra principală a Xfig, iar apoi să selectați "Combined PS/Latex (both parts)" din lista de limbaje. Dacă nu schimbați alte setări, în același director cu test.fig vor fi create două alte fișiere, și anume: test.pstex_t și test.pstex. Puteți plasa atunci figura într-un document LaTeX:

\begin{figure}
  \centering
  \input{./xfig/test.pstex_t}
  \caption{Titlul figurii}
  \label{fig:test}
\end{figure}

Editorul extensibil de imagini Ipe este un program gratuit pentru grafică vectorială ce creează figuri în formate PDF și EPS. Spre deosebire de Xfig, Ipe reprezintă fonturile LaTeX la dimensiunea lor corectă pe ecran, ceea ce facilitează plasarea de etichete textuale la locul potrivit. Ipe are de asemenea numeroase moduri de apucare (snapping) — spre exemplu, apucare de puncte, linii sau intersecții), folosite pentru construcții geometrice.

Inkscape

modificare

Încă un program pentru crearea de grafică vectorială, disponibil la adresa http://www.inkscape.org/. Merge cu fișiere Scalable Vector Graphics (SVG), deși poate exporta în multe alte formate, ce pot fi incluse în fișiere LaTeX, de genul EPS și PDF. Începând cu versiunea 0.48, există opțiunea de output combinat PDF/EPS/PS+LaTeX, ca în cazul programului XFig.

Editarea imaginilor EPS

modificare

După cum a fost descris mai sus, puteți importa conținut grafic în LaTeX din programe externe sub formă de fișiere EPS. Însă câteodată veți dori să editați sau să retușați aceste fișiere grafice. Un fișier EPS poate fi editat cu orice editor de texte, de vreme ce este scris în format ASCII. Într-un editor de texte, puteți realiza operații simple, de genul înlocuirii șirurilor de caractere sau mutării și copierii acestora, însă orice lucru mai complex este greu de realizat.

Pentru a edita cum trebuie un fișier EPS, îl puteți converti într-un format editabil cu ajutorul programului pstoedit. Spre exemplu, pentru a obține un fișier editabil din formatul Xfig, dați următoarea comandă:

$ pstoedit -f fig input.eps output.fig

Iar pentru a obține un fișier SVG pentru Inkscape, scrieți în terminal:

$ pstoedit -f plot-svg input.eps output.svg

Câteodată programul pstoedit nu reușește să creeze formatul țintă (spre exemplu, când fișierul EPS conține informații ce pot fi decupate). O cale mai robustă de editare a fișierelor EPS constă în convertirea mai întâi a fișierului în PDF, urmată de importarea PDF-ului rezultat în Inkscape. Inkscape folosește biblioteca numită Cairo, care face o transformare de calitate ridicată a figurii EPS inițiale:

$ epstopdf input.eps
$ inkscape input.pdf

Când toate cele de mai sus eșuează, puteți simplifica fișierul EPS înainte de a încerca alte conversii, cu ajutorul programului eps2eps (vezi și secțiunea următoare):

$ eps2eps input.eps input-e2.eps

Asta va converti toate fonturile în formate dinainte de generarea imaginilor, lucru care este de dorit când propuneți manuscrise pentru publicare. Totuși, ca dezavantaj, fonturile NU sunt convertite în linii, ci în hărți de biți, ceea ce reduce calitatea fonturilor.

Convertirea EPS color în tonuri de gri

modificare

Câteodată figurile EPS color trebuie convertite în figuri alb-negru sau cu tonuri de gri (grayscale) pentru a corespunde cerințelor de publicare. Asta se poate face cu programele eps2eps din pachetul Ghostscript și pscol:

$ eps2eps input.eps input-e2.eps
$ pscol -0gray input-e2.eps input-gray.eps


Anterior: Scrisori LaTeX Următor: Crearea de imagini