Krok 1 – przygotowanie pliku LaTeX-owego – nazwijmy go roboczo plik.tex. Ważnym jest aby każdy element, który ma w wyniku dać plik graficzny, znajdował się na oddzielnej stroni PDF-a powstałego po kompilacji. Jeśli w pliku TeX znajdują się tylko elementy do przetworzenia, możemy w kodzie oddzielić je po prostu za pomocą \newpage; na przykład:
\documentclass[12pt]{article}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\pagestyle{empty}
\begin{document}
$$a^2 = b^2 + c^2$$
\newpage
$$E = m c^2$$
\newpage
\begin{tikzpicture}
\draw[->] (0,0) -- (1,1);
\end{tikzpicture}
\end{document}
Możemy też użyć pakietu preview, który, gdy aktywny (parametr active), z wyjsciowego PDF-a wycina nam wszystko z wyjątkiem zdefiniowanych środowisk – w poniższym przykładzie są to eksponowane środowiska matematyczne (czyli $$…$$, displaymath, equation; użyty parametr displaymath) oraz środowisko tikzpicture (użyte polecenie \PreviewEnvironment{tikzpicture}).
\documentclass[12pt]{article}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usepackage[active,displaymath]{preview}
\PreviewEnvironment{tikzpicture}
\begin{document}
To jest ważny wzór
$$a^2 = b^2 + c^2$$
Ten wzór też jest ważny
$$E = m c^2$$
ale ten $x^2=1$ już nie.
A to taki tam obrazek
\begin{tikzpicture}
\draw[->] (0,0) -- (1,1);
\end{tikzpicture}
\end{document}
Plik plik.tex kompilujemy do pliku plik.pdf, który będzie bazą dla następnych operacji.
Krok 2 – skrypt bash – nazwijmy go roboczo skrypt.sh.
#!/bin/bash
pdfcrop $1
mv `basename $1 .pdf`-crop.pdf $1
pdftk $1 burst
rm doc_data.txt
for i in pg_*.pdf
do
j=`basename $i .pdf`
pdftops -eps $i $j.eps
convert -density 150 -background transparent $i $j.png
pdf2svg $i $j.svg
rm $i
done
Skrypt uruchamiamy podając jako parametr nazwę utworzonego wcześniej pliku PDF:
./skrypt.sh plik.pdf
Co robi powyższy skrypt? Objaśnienie linia po linii:
- pdfcrop $1 — przycina ładnie każdą stronę pliku plik.pdf (aby usunąć nadmiarowe marginesy wokół np. równań) i zapisuje wynik do pliku plik-crop.pdf
- mv `basename $1 .pdf`-crop.pdf $1 — zmienia nazwę pliku plik-crop.pdf na plik.pdf
- pdftk $1 burst — dzieli plik plik.pdf na pliki zawierające po jednej stronie; powstają wtedy pliki pg_0001.pdf, pg_0002.pdf, itd.
- rm doc_data.txt — ponieważ pdftk tworzy nam niepotrzebny plik doc_data.txt — usuwamy go
- for i in pg_*.pdf — tu mamy początek pętli po wszystkich plikach pg_0001.pdf, pg_0002.pdf, itd.
- j=`basename $i .pdf` — wyodrębniamy rdzeń nazwy bez rozszerzenia, który będzie potrzebny przy nazywaniu następnych plików
- pdftops -eps $i $j.eps — konwertujemy pliki pg_0001.pdf, pg_0002.pdf, itd. do plików pg_0001.eps, pg_0002.eps, itd. (uwaga! zamiast pdftops można też użyć ghostscripta jak kto woli)
- convert -density 150 -background transparent $i $j.png — konwertujemy pliki pg_0001.pdf, pg_0002.pdf, itd. do plików pg_0001.png, pg_0002.png, itd. (parametry konwersji: przezroczyste tło i dpi=150)
- pdf2svg $i $j.svg — konwertujemy pliki pg_0001.pdf, pg_0002.pdf, itd. do plików pg_0001.svg, pg_0002.svg, itd.
- rm $i — usuwamy niepotrzebne już teraz pliki pg_0001.pdf, pg_0002.pdf, itd.
That's all folks!
Brak komentarzy:
Prześlij komentarz