Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

[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.shSkrypt wypełniamy następującą zawartością:#!/bin/bash pdfcrop $1Zapisujemy, zamykamy, nadajemy prawa wykonywania:chmod +x pc.shDla 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.

 

oprogramowanie porady

Komentarze

0 nowych
Ardziej   5 #1 21.02.2013 14:53

tl;dr ;-D

Jaahquubel_   12 #2 21.02.2013 15:23

ts;liczyłem na więcej. ;P

Druedain   13 #3 21.02.2013 15:27

Ładny wpis :) , takie chcieć-to-móc.

kwpolska   5 #4 21.02.2013 18:12

ja sugeruję zmienić marginesy w dokumencie, przecież w TeXu nie robisz na sztywno i wymiary artykułu znaczenia nie mają. Poza tym sugeruję TeXworks do edycji (też Qt).

Shaki81 MODERATOR BLOGA  37 #5 21.02.2013 20:52

Czegoś tu nie rozumiem, zrobiłeś marginesy o to aby ich nie oglądać? Nie kapuje, ale i tak najważniejsze, że efekt przez Ciebie założony został osiągnięty i to jest najważniejsze.

Demagog   4 #6 21.02.2013 21:03

All you need is... Texmaker.
Fajny edytorek LaTeX-u. No i ma podgląd PDF w tym samym oknie co kod.

iluzion   5 #7 21.02.2013 21:38

Pomysłowe, ale prościej skorzystać z Texmaker z wbudowaną przeglądarką PDF i opcją przechodzenia z kodu do PDF i odwrotnie poprzez Ctrl+clik. Texmaker jest również w Qt napisany (niebawem powinien wyjść dla Qt5). Bardzo szybki i wygodny.

http://i.imgur.com/nMXn9C1.png

Autor edytował komentarz.
Saskatchewan   7 #8 21.02.2013 22:39

Gdy pisałem w LaTeX-u, przez większość czasu używałem podglądu w SumatraPDF (pod Windows). Przy automatycznym odświeżeniu, po zmianie pliku, nie resetował(a) ustawionego powiększenia, ani przesunięcia pasków przewijania (a przynajmniej tak mi się wydaje, bo mnie też te marginesy denerwowały).

@Shaki81: Krótko mówiąc: marginesy miały zostać, ale miało ich nie być w podglądzie, bo wtedy niewygodnie się czyta.

Autor edytował komentarz.
Jaahquubel_   12 #9 22.02.2013 10:15

Mogłem zmienić marginesy przez \usepackage{geometry}, ale zmieniłby się układ dokumentu. Przecież wspomniałem o tym w długim wstępie.
Ja mam tam strasznie długie, wielolinijkowe równości, które musiałbym najpierw poustawiać do węższych marginesów, potem do szerszych. Szkoda roboty. Tak samo szkoda było czasu na uczenie się innego edytora. A TeXworks i TeXmaker działają mi na nerwy - nie wiem czemu, ale ich nie trawię. A to, że mają podgląd wyniku w tym samym oknie - nic nie zmienia.
Okular też zapamiętuje powiększenie i ułożenie, ale nie da się ustawić powiększenia dokładnie do szerokości tekstu, a przycinanie marginesów szwankuje. W zasadzie cała opisana operacja byłaby zbędna, gdyby Okular był lepiej zrobiony, albo gdybym znał lepszą przeglądarkę PDF-ów na Linuksy.

Rozwiązanie, które tu opisałem, wynalazłem w jakieś 15 minut. To niewiele w porównaniu z opisywaniem tego na blogu. :)

  #10 23.02.2013 10:24

"(...) szablon (...) 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.)"

Szablon zazwyczaj jest ustawiony na format A4, a druk artykułu robiony jest na znacznie mniejszym formacie np. B5. Więc te marginesy są tak ustawione żeby tekst zmieścił się na tym mniejszym formacie.

Jaahquubel_   12 #11 23.02.2013 20:09

@kg13
W ogólności tak, ale w przypadku czasopisma elektronicznego? Pewnie z przyzwyczajenia.

  #12 24.02.2013 18:22

Nie kumam, nie prościej i szybciej zaptaszyć w okularze "trim margins"? Nie usuwa marginesów do zera ale wystarczy dwa kliki i wg. mnie lepiej to wygląda niż kompletny brak marginesów.

  #13 25.02.2013 02:09

> Mogłem zmienić marginesy przez \usepackage{geometry}, ale zmieniłby się układ dokumentu.

A gdybyś spróbował tak. Powiedzmy, że na początku jest format A4 + duże marginesy:
\geometry{total={210mm,297mm},
left=25mm,right=25mm,bindingoffset=10mm, top=25mm,bottom=25mm}
zmieniasz wymiary strony, ustawiasz brak marginesów, ale powinno być tyle samo miejsca na tekst właściwy:
\geometry{total={150mm,247mm},
left=0mm,right=0mm,bindingoffset=0mm, top=0mm,bottom=0mm}
gdzie oczywiście 150mm=210mm-25mm-25mm-10mm; 247mm=297mm-25mm-25mm

Poza tym, podejrzałem na obrazku kod szablonu LaTeX-a którego używasz i wydaje mi się on dziwny. Po pierwsze - jeżeli czasopismo jest tylko wydawane w formie elektronicznej to po co bindingoffset=10mm? Po drugie - dlaczego lewy margines jest mniejszy od prawego?

Jaahquubel_   12 #14 25.02.2013 14:32

@Guest123456789
Prościej, ładniej, ale to źle działa. Jedną stronę przytnie, drugą nie.

@KK
O tym, że w geometry można dać "total" to nie pamiętałem (bo raczej kiedyś widziałem).
Twoje rozwiązanie jest bardzo eleganckie. Nie wpadłem na nie.
Inna sprawa, że szablon czasopisma nie ma podanych wymiarów marginesów w kodzie pliku .tex. To siedzi w klasie, a tam nie zaglądałem.

Plik, którym się posłużyłem przy robieniu zrzutów ekranu do tego wpisu nie jest plikiem jakkolwiek powiązanym z plikiem do czasopisma - tutaj wziąłem pierwszy z brzegu kawałek kodu, a do czasopisma jest klasa siamltex. Dlatego tutaj widzisz niezerowe bindingoffset i nierówne marginesy.
Nie miałem zamiaru chwalić się na blogu nawet najmniejszym kawałkiem nieopublikowanego artykułu.