[LaTeX] Przycinanie PDF-a i jego podgląd, czyli PDFCrop w Kile

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.