PerfectVector
Autor: Irene Kim9 min czytania

SVG w LaTeX: zachowaj kształty i składaj tekst etykiet ilustracji

Wybierz sposób pracy z ilustracją SVG: PDF lub PDF wraz z LaTeX. Zachowaj możliwość edycji etykiet, poznaj wymagania dotyczące Inkscape i sprawdź końcowy dokument PDF.

Na tej stronie

Aby użyć ilustracji SVG w LaTeX, zdecyduj, co ma renderować jej etykiety. Wyeksportuj zwykły PDF, jeśli obecna typografia ilustracji jest odpowiednia. Użyj PDF wraz z LaTeX, jeśli LaTeX ma składać tekst etykiet razem z tekstem dokumentu.

Pakiet svg może zautomatyzować eksport przez Inkscape, a następnie dołączyć pliki wynikowe. Nie eliminuje konwersji; zarządza tym etapem za Ciebie. Omówienie pakietu w CTAN opisuje podział na eksportowaną grafikę i tekst renderowany przez LaTeX.

W przypadku przygotowanej ilustracji warto zapytać, czy jej kształty i treść etykiet przetrwają kolejną zmianę. Zachowaj źródłowy SVG, zdecyduj, jak obsługiwać etykiety, i sprawdź złożony dokument w docelowym rozmiarze. Jeśli generujesz dokument w Pythonie, skorzystaj z osobnej procedury umieszczania grafiki SVG w plikach PDF tworzonych przez ReportLab, obejmującej jawne określenie rozmiaru i sprawdzenie gotowego pliku.

Wybierz pliki, których będzie używać dokument

Twoje wymaganieSposób dostarczeniaCo utrzymujesz
Zachowanie obecnego wyglądu ilustracjiWyeksportuj zwykły PDF i użyj graphicxŹródłowy SVG i wyeksportowany PDF
Skład tekstu etykiet ilustracji przez LaTeXWyeksportuj PDF wraz z LaTeXŹródłowy SVG i pasującą parę plików PDF/LaTeX
Odświeżanie eksportów podczas kompilacji dokumentuUżyj pakietu svg z InkscapeŹródłowy SVG i środowisko kompilacji

Rozważmy na przykład niewielką ilustrację soczewki obok karty. Jej dwie etykiety to po prostu „Soczewka” i „Karta”. W tym przykładzie nie ma wymiarów, zmierzonych promieni ani wyników przedstawionych na wykresie.

Recenzent prosi Cię o zmianę „Karta” na „Karta docelowa”. Nie trzeba rysować grafiki od nowa, ale dłuższa etykieta potrzebuje miejsca. To przydatny test wprowadzania zmian: czy możesz zmienić słowa bez odrysowywania kształtów liter i czy nowa etykieta nadal się mieści?

Ilustracja soczewki i karty rozdzielona na grafikę i etykiety tekstowe, a następnie złożona w ilustrację z etykietami
Ilustracja podziału na PDF i LaTeX: geometria rysunku i tekst etykiet stanowią osobne dane wejściowe dla jednej złożonej ilustracji. Po składzie tekstu nadal trzeba sprawdzić rozmieszczenie etykiet.

Sposób 1: wyeksportuj zwykły PDF

Użyj tego sposobu, gdy etykiety już wyglądają właściwie i nie muszą przejmować typografii dokumentu.

Poradnik eksportu PDF w Inkscape opisuje polecenie File → Save a Copy (Plik → Zapisz kopię), wybór PDF oraz opcji eksportu tekstu. Zachowaj oryginalny SVG. W przypadku zwykłego tekstu, który ma być przeszukiwalny, sprawdź osadzanie fontów; zamiana liter na ścieżki utrwala ich kształty, ale odbiera im rolę edytowalnego tekstu.

Zapisz ten przykład jako lens-card.pdf obok głównego pliku .tex. W projekcie LaTeX generującym PDF podstawowy sposób dołączania wygląda tak:

\documentclass{article}
\usepackage{graphicx}
\begin{document}
\includegraphics[width=0.7\linewidth]{lens-card.pdf}
\end{document}

Pakiet graphicx i polecenie \includegraphics to udokumentowany sposób dołączania obrazów w poradniku Overleaf dotyczącym obrazów. Podana szerokość jest przykładem układu, a nie wymaganym rozmiarem ilustracji.

Otwórz wyeksportowany PDF przed dodaniem go do dokumentu. Upewnij się, że zawiera oba obiekty i etykiety. Po kompilacji ponownie sprawdź ilustrację: etykieta czytelna na ilustracji zajmującej całą stronę może być zbyt mała w wąskiej kolumnie.

Jeśli zmienisz etykietę w SVG, ponownie wyeksportuj PDF. Stosuj jednoznaczne nazwy, aby dokument nie używał nadal starszej kopii przeznaczonej do dołączenia.

Sposób 2: wyeksportuj razem grafikę i tekst LaTeX

Użyj tego sposobu, gdy tekst etykiet ilustracji ma składać LaTeX. Omówienie PDF wraz z LaTeX wyjaśnia, że rysunek i tekst są obsługiwane osobno, dzięki czemu tekst ilustracji może korzystać z typografii dokumentu.

W oknie eksportu PDF w Inkscape wybierz Omit text in PDF and create LaTeX file (Pomiń tekst w PDF i utwórz plik LaTeX), zgodnie z opisem w poradniku eksportu. Przechowuj wynikowe pliki lens-card.pdf i lens-card.pdf_tex razem. Po otwarciu samego PDF nie zobaczysz pominiętych etykiet.

Podręcznik pakietu svg, sekcja 2.5 opisuje polecenie \includeinkscape służące do dołączania plików już wyeksportowanych przez Inkscape. Gdy para plików znajduje się obok głównego pliku .tex, sposób dołączania wygląda tak:

\documentclass{article}
\usepackage{svg}
\begin{document}
\includeinkscape[width=0.7\linewidth]{lens-card.pdf_tex}
\end{document}

Ten sposób wykorzystuje przygotowaną parę plików zamiast zlecać eksport SVG podczas budowania dokumentu. Zachowaj oba pliki przy przenoszeniu projektu.

W przykładzie z soczewką i kartą porównaj położenie etykiet w złożonej ilustracji z jej plikiem źródłowym. Szerszy font dokumentu może przesunąć „Kartę docelową” w stronę soczewki, mimo że wyeksportowana geometria się nie zmieniła. Zostaw wystarczająco dużo miejsca wokół etykiet i przetestuj dłuższą treść przed ukończeniem układu.

Jeśli litery zostały już zamienione na ścieżki, stanowią geometrię grafiki. Jeśli chcesz, aby tekst etykiety składał LaTeX, zachowaj lub odtwórz zamierzoną etykietę jako edytowalny tekst w pliku źródłowym. Poradnik dotyczący fontów w SVG wyjaśnia, jak odróżnić edytowalny tekst od liter zamienionych na ścieżki.

Sposób 3: pozwól pakietowi svg eksportować podczas kompilacji

Przy częstych zmianach ilustracji wygodny może być sposób automatyczny:

\documentclass{article}
\usepackage{svg}
\begin{document}
\includesvg[width=0.7\linewidth]{lens-card}
\end{document}

Tutaj źródłem jest lens-card.svg. Podręcznik pakietu wymaga działającego pliku wykonywalnego Inkscape do automatycznego eksportu i opisuje użycie opcji shell escape do jego uruchamiania. Dla zaufanego projektu lokalnego udokumentowane wywołanie wygląda tak:

pdflatex --shell-escape main.tex

Shell escape pozwala uruchamiać polecenia zewnętrzne; używaj tej opcji tylko z zaufanymi plikami źródłowymi projektu. Jeśli Twoje środowisko na to nie pozwala, przygotuj eksporty poza procesem budowania i użyj jednego z poprzednich sposobów.

Ustawienie pakietu inkscapelatex=true oddziela tekst do renderowania przez LaTeX i jest ustawieniem domyślnym. Ustaw inkscapelatex=false w \includesvg, gdy chcesz zamiast tego użyć tekstu wyeksportowanego przez Inkscape. Wybierz to zachowanie świadomie, zanim zaczniesz dostosowywać rozmiary etykiet.

To udokumentowane sposoby dołączania. Przetestuj wybrany sposób w niewielkiej kopii własnego projektu, zanim zastosujesz go w długim dokumencie lub współdzielonym szablonie.

Zdiagnozuj brakujący element, zanim zmienisz formaty

Co widziszCo sprawdzić najpierw
SVG istnieje, ale brakuje wygenerowanego PDFCzy eksport się uruchomił, czy Inkscape jest dostępny i czy ścieżka wyjściowa jest poprawna
Grafika jest widoczna, ale brakuje etykietCzy dołączono tylko PDF z pary PDF/LaTeX
Etykiety nachodzą na siebie lub mają nieoczekiwane odstępyWybrany sposób obsługi tekstu, font dokumentu i dostępną przestrzeń na etykiety
PDF wywołuje błędy typowe dla przetwarzania tekstuCzy przekazano go do \input zamiast do polecenia dołączania obrazu
Ilustracja ma nieoczekiwaną pustą przestrzeń lub jest przyciętaObszar eksportu i granice strony grafiki

Zajmij się pierwszym istotnym błędem kompilatora, zanim zmienisz kilka ustawień naraz. Jeśli brakuje wyeksportowanego pliku, sprawdź ten plik na dysku. Jeśli etykieta jest źle umieszczona, sprawdź złożoną ilustrację. Te kontrole dotyczą różnych etapów pracy.

W projekcie Overleaf prześlij pliki potrzebne do wybranego sposobu pracy. Przygotowany PDF lub pasująca para wyeksportowanych plików pozwala uniknąć eksportu SVG podczas kompilacji. Nie zakładaj, że instalacja lokalna, serwer utrzymywany samodzielnie i projekt na platformie hostingowej mają dostęp do identycznych narzędzi zewnętrznych.

Odzyskuj tylko tę ilustrację, która tego wymaga

Jeśli masz już edytowalny SVG, użyj go. Jeśli źródłem jest wykres danych liczbowych, wygeneruj ilustrację ponownie z danych wykresu i kodu źródłowego. Zachowaj równania i etykiety naukowe jako tekst; odrysowanie ich pikseli nie przywraca ich znaczenia. W przypadku ilustracji wygenerowanej w Pythonie skorzystaj z procedury łączenia wykresu Matplotlib z grafiką SVG, aby zachować osobne logo jako ścieżki przed eksportem do dokumentu.

Wektoryzacja przydaje się w węższym przypadku: gdy brakuje oryginalnego rysunku i masz tylko rastrową kopię prostego obiektu przedstawionego na ilustracji. Przytnij kopię do samej grafiki, pozostawiając etykiety i dane poza obszarem odrysowywania. Za pomocą narzędzia PerfectVector do wektoryzacji ilustracji naukowych wyświetl podgląd tej grafiki jako kształtów wektorowych i sprawdź cienkie obrysy, puste otwory oraz niepożądane obszary tła. Pobierz SVG, dodaj oryginalne etykiety osobno w edytorze i użyj wybranego sposobu dołączenia ilustracji do dokumentu LaTeX.

W przykładzie z soczewką i kartą odzyskiwanie dotyczyłoby narysowanej soczewki lub obrysu karty. Treść etykiet powinna pozostać w ich pliku źródłowym. Wstępna wersja grafiki wektorowej nadal wymaga sprawdzenia po eksporcie do PDF i dołączeniu do dokumentu; nie zapewnia geometrii opartej na pomiarach ani zatwierdzenia zgodności z zasadami publikacji.

Poradnik przygotowania rysunków konturowych opisuje oczyszczanie źródłowego obrazu rastrowego. Jeśli jedynym zachowanym plikiem jest PDF, poradnik konwersji PDF do SVG pomoże odróżnić istniejącą zawartość wektorową od zeskanowanej strony, zanim zaczniesz cokolwiek odrysowywać. Szersze omówienie wyboru źródła znajdziesz w artykule o tym, co odzyskuje wektoryzacja obrazu.

Sprawdź złożony dokument, a następnie zachowaj jego źródła

Przeprowadź w kopii test zmiany samej etykiety. Zmień „Karta” na „Karta docelowa”, w razie potrzeby odśwież eksport i skompiluj dokument. Sprawdź poprawność pisowni i położenie tekstu przy końcowej szerokości ilustracji. Następnie przywróć zamierzoną treść.

Sprawdź też otwory w rysunku, cienkie linie i granice eksportu. Poradnik eksportu PDF w Inkscape wyjaśnia, że efekty filtrów mogą zostać zrasteryzowane, więc sama nazwa pliku PDF nie dowodzi, że każda widoczna część jest geometrią wektorową.

Przechowuj edytowalny SVG razem z plikami używanymi przez dokument. W przypadku pary PDF/LaTeX dostarcz oba pliki. Otwórz ponownie dokładnie tę kopię projektu, którą zamierzasz udostępnić, i powtórz w niej kontrolę ilustracji.

Najczęściej zadawane pytania

Czy mogę przekazać SVG bezpośrednio do includegraphics? W opisanych tu sposobach pracy najpierw wyeksportuj obsługiwany plik graficzny, na przykład PDF, lub użyj pakietu svg do zarządzania eksportem przez Inkscape. Pakiet nadal dołącza wyeksportowaną grafikę.

Dlaczego w wyeksportowanym PDF nie ma etykiet? Eksport PDF wraz z LaTeX pomija tekst etykiet w PDF. Dołącz pasujący składnik LaTeX, aby złożyć ilustrację, lub wyeksportuj zwykły PDF, jeśli chcesz mieć jeden samodzielny plik obrazu.

Czy potrzebuję Inkscape podczas każdego budowania dokumentu? Automatyczny eksport SVG wymaga go w środowisku budowania. Wcześniej wyeksportowany PDF lub parę PDF/LaTeX możesz dołączyć bez uruchamiania tego eksportu podczas kompilacji.

Czy do LaTeX warto odrysować zrzut ekranu wykresu? Wykresy danych liczbowych generuj ponownie z ich danych i kodu źródłowego wykresu. Odrysowywanie stosuj tylko do odpowiednich grafik ilustracyjnych, których edytowalne źródło zaginęło, a etykiety utrzymuj osobno.

Źródła

  1. CTAN — SVG package — Automatyczny eksport przez Inkscape i osobny tekst renderowany przez LaTeX.
  2. Inkscape — Exporting a PDF File — Kopie PDF, opcje eksportu tekstu, efekty filtrów i obszar eksportu.
  3. Overleaf — LaTeX code for including images — Pakiet graphicx i polecenia dołączania grafiki.
  4. CTAN — SVG and Inkscape workflow overview — Podejście PDF wraz z LaTeX do typografii dokumentu.
  5. Falk Hanisch and Philip Ilten — The svg package manual — Dołączanie wcześniej wyeksportowanych plików, wymagania automatycznego eksportu i opcje renderowania tekstu.

Wybierz sposób składu tekstu etykiet, a następnie sprawdź jedną kompletną ilustrację w dokumencie. Jeśli pozostała tylko ilustracja rastrowa, przygotuj wstępną wersję grafiki wektorowej, sprawdź jej kształty, odtwórz etykiety osobno i skontroluj złożony PDF.

Więcej z bloga

Zacznij od czystszego SVG,
który łatwiej edytować