[LaTeX] Przycinanie PDF‑a i jego podgląd, czyli PDFCrop w Kile
21.02.2013 | aktual.: 21.02.2013 15:56
Przed przeczytaniem tego wpisu warto chyba przeczytać wpis Przycinanie dokumentu w pdf‑ie, bo tam już o samym PDFCrop nieco pisałem.
tl;dr
Jeśli nie chce Ci się czytać długiego wstępu, przejdź do nagłówka "Wstęp krótki". Jeśli nie interesuje Cię wywód o rozwiązaniu niedziałającym, omiń "Pierwsze podejście" i przejdź do nagłówka "Rozwiązanie problemu". Jeśli nic Cię nie interesuje, naciśnij czerwoną słuchawkę.
Wstęp długi
Ostatnio skończyłem pisać artykuł naukowy w LaTeX-u, w edytorze Kile (gdzie Kile znaczyło kiedyś "Kile Isn't LaTeX Editor" :P). Był to pierwszy dłuższy dokument, który robiłem na komputerze z dużym monitorem. Zamiast przełączać się z Kile'a na wynikowy PDF (w programie Okular) i z powrotem, otworzyłem sobie Kile z lewej, Okular z podglądem z prawej i działałem. Było jednak pewne "ale"... Otóż szablon, w którym pisałem ów artykuł, miał ustawione bardzo szerokie marginesy (to częste w przypadku czasopism matematycznych, ale skąd się to bierze - nie wiem, może i wygodniej, jak nie jest tak szeroko, jak w przypadku podań itp.). Tak szerokie marginesy powodują, że litery na ekranie są mniejsze, niżby mogły być. A chciałem, aby czytało mi się wygodniej.
Mogłem włączyć w Okularze opcję "Obetnij marginesy", ale nie lubię jej mieć włączonej na stałe, ani za każdym razem włączać i wyłączać. Zwłaszcza, że raz ona działa, a raz nie. Mogłem zainstalować Acrobat Readera, zmienić ustawienia Kile i mieć podgląd wyniku w programie Adobe, który ma opcję "Fit Visible". Ale nie ma on automatycznego odświeżania pliku (a przynajmniej nie widzę żeby miał). Poza tym, zostaje problem szerokich marginesów u góry i u dołu strony, co też chciałem wyeliminować. Mogłem jeszcze zmienić na siłę rozmiar marginesów w samym kodzie latechowym, ale to spowodowałoby zmianę układu tekstu i (co gorsze) matematycznych krzaków na stronie, przez co potem musiałbym się użerać z formatowaniem całego bałaganu z powrotem w domyślnych marginesach.
Stwierdziłem, że najlepiej użyć do tego celu wspomnianego PDFCrop, którego i tak często używam i o którym pomyślałem jako o pierwszym. Poza tym, kliknięcie opcji w programie to rozwiązanie niegodne prawdziwego zawodowca. Więcej, odpalanie "pdfcrop artykuł.pdf" w konsoli po każdej kompilacji pliku LaTeX-a też mnie nie zadowalało - za dużo trwa. Fachowo trzeba sobie było to zautomatyzować. A do tego Kile nadaje się wyśmienicie!
Wstęp krótki
Chodzi o to, żeby tak skonfigurować edytor latechowy Kile, żeby na wynikowym PDF‑ie uruchamiał jeszcze PDFCrop, żeby w podglądzie mieć obcięte marginesy przy tym samym układzie zawartości na stronie.
Pierwsze podejście
W ustawieniach Kile'a, w dziale Tools jest sekcja Build. Są w niej różnorakie narzędzia operujące na plikach: konwertery, kompilatory, przeglądarki itp., oraz sekwencje powyższych.
Potrzebowałem trzech nowych narzędzi: 1. samego PDFCrop, 2. sekwencji: Kompilacja -> Przycięcie 3. podglądu przyciętego PDF‑a (do odpalenia jednokrotnego, na początku pracy).
Drugie jest banalne: złożenie dwóch/czterech klocków - to wiedziałem na starcie. W trakcie prac nad pierwszym, trzecie (zanim zacząłem o nim myśleć) okazało się równie łatwe, co drugie. A pierwsze? Też banał - pomyślałem. I bardzo mocno się myliłem!
Po kolei: w sekcji "Build" ustawień klikamy na przycisk New... pod listą narzędzi. Prostego "czarodzieja" uzupełniamy jak na obrazku, dowolną sensowną nazwą i wzorcowym istniejącym narzędziem (bierzemy jakiekolwiek konwertujące), żeby były dostępne odpowiednie pola w ustawieniach.
Następnie ustawiamy opcje nowo powstałego narzędzia wedle kolejnego obrazka.
"Command: pdfcrop" powoduje oczywiście wykonanie polecenia "pdfcrop", a "'%S.pdf'" oznacza, że parametrem wywołania będzie nazwa bieżącego pliku .tex, z rozszerzeniem .pdf - a tak się właśnie najprościej korzysta z PDFCrop.
Odpalamy polecenie: menu Build -> Convert -> PDFCrop i...
...błąd! Kile pisze w logu, że nie udało mu się uruchomić pdfcrop, chociaż w Output pokazuje, że próba nastąpiła. Podanie pełnej ścieżki do programu - "/usr/bin/pdfcrop" - też nic nie daje. Czemu tak jest, to ja nie wiem. Nie wnikałem, zrobiłem obejście - prosty skrypt.
Rozwiązanie problemu
W jakimś katalogu tworzymy plik o jakiejś sensownej nazwie, u mnie ~/pc.sh. Możemy to zrobić z Konsole w Kile, np.:
cd ~ touch pc.sh && kile pc.sh
Skrypt wypełniamy następującą zawartością:
#!/bin/bash pdfcrop $1
Zapisujemy, zamykamy, nadajemy prawa wykonywania:
chmod +x pc.sh
Dla sprawdzenia możemy wykonać taką sekwencję:
q@q:~/TeX$ ls -lah pc* -rw-rw-r-- 1 q q 30 lut 30 25:61 pc.sh -rw-rw-r-- 1 q q 0 lut 30 25:61 pc.sh~ q@q:~/TeX$ chmod +x pc.sh q@q:~/TeX$ ls -lah pc* -rwxrwxr-x 1 q q 30 lut 30 25:61 pc.sh -rw-rw-r-- 1 q q 0 lut 30 25:61 pc.sh~
Skrypt bierze jeden argument i wywołuje "pdfcrop" z tym argumentem. Z naszego punktu widzenia to nic nowego, ale dla Kile jest to duża różnica. A dalej to prosto: albo edytujemy narzędzie PDFCrop, albo usuwamy i robimy je od nowa: w sekcji "Build" ustawień klikamy na przycisk New... pod listą narzędzi. Kreator uzupełniamy jak na obrazku:
Następnie ustawiamy opcje nowo powstałego narzędzia wedle kolejnego obrazka.
Odpalamy polecenie: menu Build -> Convert -> PDFCrop i...
...działa!
No to teraz dalsze kroki.
Sekwencja Kompilacja -> Przycięcie
Tworzymy nowe narzędzie do kompilacji, dla spójności nazw: QuickPDFCrop, na podstawie i na wzór istniejącego QuickBuild lub QuickPDF, w zależności od tego czy kompilujemy PDFLaTeX-em, czy LaTeX-em i przechodzimy przez DVI i PS. Ja byłem zmuszony do tego drugiego rozwiązania, stąd zrobiłem tak:
Narzędzie przydzieliłem dla porządku do podmenu Compile i wybrałem mu ikonę.
Podgląd
Tworzymy nowe narzędzie podglądu, dla spójności nazw: ViewPDFCrop, na podstawie i na wzór ViewPDF. Tutaj konfiguracja jest jeszcze prostsza:
Wystarczy powiedzieć, że pdfcrop domyślnie nazywa przycięty plik nazwą oryginalnego, przedłużoną o "‑crop" - to odzwierciedla opcja '%S‑crop.pdf'. Temu narzędziu też możemy dać ikonę.
Na zakończenie całości można jeszcze pozmieniać sobie skróty klawiszowe, aby móc szybko dostać się do stworzonych narzędzi.
Poniższe obrazki demonstrują efekt końcowy.