Archive for category LaTeX

Dostępne formaty prezentacji w LaTeX

Podczas tworzenia prezentacji w LaTeXu przy użyciu rozszerzenia Beamer prędzej czy później trzeba będzie wybrać jej odpowiedni wygląd. W przypadku Beamera do dyspozycji mamy:

  • zestawy tematów – 29
  • zestawy kolorów – 17
  • zestawy czcionek – 6

Istnieje strona Beamer Theme Matrix, gdzie można obejrzeć jak wygląda każdy z tych tematów, ale najlepiej sprawdzić to na własnej prezentacji. Można to zrobić ręcznie, modyfikując odpowiednie parametry w prezentacji, ale roboty z tym trochę jest. Druga możliwość to utworzenie skryptu, który wygeneruje dla nas prezentację w wybranych formatach.

Utworzenie prezentacji przy użyciu zdefiniowanych styli

Jestem z natury leniwym człowiekiem, więc prościej było napisać krótki skrypt, który w razie potrzeby zapisze mi prezentację w każdym dostępnym formacie, a ja będę mógł wybrać sobie ten, który mi najbardziej pasuje. Skrypt generujący prezentację we wszystkich dostępnych tematach:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/bash

# theme list
#THEMES="AnnArbor Antibes Bergen Berkeley Berlin Boadilla boxes CambridgeUS Copenhagen Darmstadt default Dresden Frankfurt Goettingen Hannover Ilmenau JuanLesPins Luebeck Madrid Malmoe Marburg Montpellier PaloAlto Pittsburgh Rochester Singapore Szeged Warsaw"

THEMES=`ls /usr/share/texmf/tex/latex/beamer/themes/theme/ | grep "^beam" | cut -d . -f 1  | sed "s/beamertheme//" | tr '\n' ' '`

TEX_FILE="subversion-jak_dziala-prezentacja"
OUTPUT_DIR="out"

for THEME in $THEMES
do
        INPUT_FILE="$TEX_FILE.tex"
        OUTPUT_FILE="$TEX_FILE-theme-$THEME.tex"

        cp $INPUT_FILE $OUTPUT_FILE
        sed -i "s/^\\\usetheme.*/\\\usetheme{$THEME}/" $OUTPUT_FILE

        pdflatex -output-directory=out $OUTPUT_FILE
        pdflatex -output-directory=out $OUTPUT_FILE

        rm $OUTPUT_FILE
done;

Krótkie wyjaśnienie tego co się w nim dzieje:

  • THEMES=`ls ....
    Utworzenie listy dostępnych tematów, należy zwrócić przede wszystkim uwagę na to, czy istnieje zdefiniowana ścieżka do ich definicji, w moim przypadku katalogu /usr/share/texmf/tex/latex/beamer/themes/theme/. Można także usunąć tę linię i odkomentować linię 4, która zawiera listę predefiniowanych tematów.
  • TEX_FILE="subversion-jak_dziala-prezentacja"
    Nazwa pliku TeX, który zawiera definicję prezentacji. Nazwa powinna być podana bez rozszerzenia.
  • OUTPUT_DIR="out"
    Katalog na dane tymczasowe i wynikowe pliki PDF.
  • cp $INPUT_FILE $OUTPUT_FILE
    Utworzenie kopii aktualnej prezentacji, po inną nazwą , która zawiera m.in. nazwę przetwarzanego tematu.
  • sed -i "s/^\\\usetheme.*/\\\usetheme{$THEME}/" $OUTPUT_FILE
    Podmiana w zawartości pliku nazwy użytego tematu. Ważne! W danej prezentacji należy określić temat przy użyciu \usetheme. Jeżeli parametr ten nie zostanie zdefiniowany to skrypt nie zadziała poprawnie.
  • pdflatex -output-directory=out $OUTPUT_FILE
    Wygenerowanie prezentacji z wybraną prezentacją. Polecenie wywołane dwukrotnie, przy pierwszym przebiegu tworzy spis treści.
  • rm $OUTPUT_FILE
    Usunięcie zbędnego już pliku tymczasowego z prezentacją.

Utworzenie prezentacji przy użyciu dostępnych kolorów

Skrypt ten przypomina bardzo poprzedni, więc omówię tylko różnice pomiędzy nimi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/bash

# colors list
#COLORS="albatross beaver beetle crane default dolphin dove fly lily orchid rose seagull seahorse sidebartab structure whale wolverine"

COLORS=`ls /usr/share/texmf/tex/latex/beamer/themes/color/ | grep "^beamer" | cut -d . -f 1 | sed "s/beamercolortheme//" | tr '\n' ' '`

TEX_FILE="subversion-jak_dziala-prezentacja"
OUTPUT_DIR="out"

for COLOR in $COLORS
do
        INPUT_FILE="$TEX_FILE.tex"
        OUTPUT_FILE="$TEX_FILE-color-$COLOR.tex"

        cp $INPUT_FILE $OUTPUT_FILE
        sed -i "s/^\\\\usecolortheme.*/\\\\usecolortheme{$COLOR}/" $OUTPUT_FILE

        pdflatex -output-directory=out $OUTPUT_FILE
        pdflatex -output-directory=out $OUTPUT_FILE

        rm $OUTPUT_FILE
done;
  • COLORS=`ls ....
    Zdefiniowanie zmiennej zawierającej listę dostępnych motywów kolorystycznych. Można odkomentować linię 4 a tę usunąć, jeżeli ścieżka dostępu się nie zgadza.
  • sed -i "s/^\\\\usecolortheme.*/\\\\usecolortheme{$COLOR}/" $OUTPUT_FILE
    Podmiana polecenia \usecolortheme. Polecenie to musi istnieć w pliku z prezentacją, inaczej nic nie zadziała.

Utworzenie prezentacji przy użyciu dostępnych czcionek

Ostatnim skryptem będzie ten, który generuje prezentację dla wybranych czcionek:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/bash

# theme list
#FONTS="default professionalfonts serif structurebold structureitalicserif structuresmallcapsserif"

FONTS=`ls /usr/share/texmf/tex/latex/beamer/themes/font/ | grep '^beamerfonttheme' | cut -d . -f 1 | sed "s/beamerfonttheme//" | tr '\n' ' '`

TEX_FILE="subversion-jak_dziala-prezentacja"
OUTPUT_DIR="out"

for FONT in $FONTS
do
        INPUT_FILE="$TEX_FILE.tex"
        OUTPUT_FILE="$TEX_FILE-font-$FONT.tex"

        cp $INPUT_FILE $OUTPUT_FILE
        sed -i "s/^\\\usefonttheme.*/\\\usefonttheme{$FONT}/" $OUTPUT_FILE

        pdflatex -output-directory=out $OUTPUT_FILE
        pdflatex -output-directory=out $OUTPUT_FILE

        rm $OUTPUT_FILE
done;

Różnice jak powyżej, w linii 6 definicja dostępnych formatów czcionek. A w linii 17 zmiana wartości na aktualnie wybraną czcionkę.

Skrypty te powinny pomóc w wyborze odpowiedniego tematu dla prezentacji, co powinno ułatwić zarówno jej tworzenie jak i późniejszy odbiór.

Źródła

Tags: , , ,

Tworzenie prezentacji przy użyciu LaTeX cz. 4: budowa konspektu

Ostatnim elementem tworzenia prezentacji będzie budowa konspektu. Będzie on składał się zarówno z prezentacji, jak i materiałów dodatkowych, mających poszerzyć wiedzę o kolejne elementy.

W poprzednich częściach został przygotowany plik main.tex, który zawiera prezentację o Subversion. Teraz trzeba będzie zrobić:

  • stworzyć plik PDF z konspektem
  • dodać dodatkowe informacje potrzebne do budowy konspektu

Utworzenie pliku PDF

Pierwszym krokiem będzie utworzenie pliku PDF formie książki a nie prezentacji. Można to zrobić bardzo prosto, modyfikując pierwszą instrukcję z pliku main.tex:

\documentclass[t]{beamer}

Wystarczy tę linie zmienić na:

\documentclass[a4paper,12pt]{article}
\usepackage{beamerarticle
}

Teraz wystarczy skompilować plik main.tex i już konspekt jest gotowy. Oczywiście, zmienianie za każdym razem nagłówka pliku aby zmienić format prezentacji nie jest najlepszym rozwiązaniem. Dużo lepiej jest przygotować dwa dodatkowe pliki tex, w których należy umieścić specyficzne rzeczy związane zarówno z prezentacją jak i konspektem, a w pliku main.tex zostawić już tylko samą treść i elementy wspólne dla obu formatów.

  1. Usunięcie formatowania z pliku main.tex.
    Pierwszym krokiem będzie usunięcie zbędnych elementów z pliku głównego, należy zakomentować lub usunąć linię z formatem prezentacji:

    1
    2
    % Rodzaj dokumentu
    %\documentclass[t]{beamer}
  2. Utworzenie pliku subversion-jak_dziala-prezentacja.tex.
    Należy utworzyć plik o nazwie subversion-jak_dziala-prezentacja.tex, w którym zostanie zdefiniowany format prezentacji oraz włączona zawartość pliku main.tex. Od tego momentu będzie trzeba kompilować plik subversion-jak_dziala-prezentacja.tex, aby otrzymać prezentację w formacie PDF:

    1
    2
    3
    \documentclass[t,ignorenonframetext]{beamer}

    \input{main.tex
    }

    Jak widać, zostaje w praktyce typ dokumentu na prezentację i załączony plik z jej treścią.

  3. Utworzenie pliku subversion-jak_dziala-konspekt.tex.
    Ostatnim krokiem będzie utworzenie pliku subversion-jak_dziala-konspekt.tex, dzięki któremu będzie można utworzyć plik PDF z konspektem:

    1
    2
    3
    4
    \documentclass[a4paper,12pt]{article}
    \usepackage{beamerarticle}
    \setjobnamebeamerversion{subversion-jak_dziala-prezentacja}
    \input{main.tex
    }

Od tego momentu kompilacja któregoś z tych plików będzie pozwala na utworzenie odpowiedniego dokumentu, czy też prezentacji czy też konspektu.

Uzupełnienie konspektu

Teraz czas na uzupełnienie prezentacji o dodatkowe elementy, które mają znaleźć się nie w prezentacji, ale tylko w konspekcie. Generalnie należy pamiętać o jednym: w prezentacji znajdą się tylko elementy pomiędzy tagami \begin{frame} oraz \end{frame}, wszystkie inne elementy będę umieszczone już na konspekcie.

Czyli najprościej mówiąc, należy dodatkowe treści umieścić po prostu po zakończeniu każdego slajdu.

Jak to wygląda w praktyce, można zobaczyć w archiwum z pełnym projektem prezentacji o Subversion, umieszczonym poniżej.

Źródła

Tags: , , ,

Tworzenie prezentacji przy użyciu LaTeX cz. 3: budowa prezentacji

We wcześniejszych wpisach przedstawiłem w jaki sposób utworzyć szkielet prezentacji w LaTeXu. Teraz czas na utworzenie właściwych slajdów. Od razu uprzedzę, znajdą się tu tylko same podstawowe informacje, akurat to co było mi potrzebne do utworzenia prezentacji o Subversion.

Konstrukcja slajdu

Slajdy w klasie Beamer są zawarte między dwoma tagami: \begin{frame} oraz \end{frame}. Tylko to co zostanie umieszczone pomiędzy nimi zostanie wzięte pod uwagę i na tej podstawie zostaną wygenerowane slajdy.

Generalnie wynikiem pojedynczej ramki (frame) jest utworzenie pojedynczego slajdu w pliku PDF. Nie zawsze jednak tak będzie, istnieją polecenia, których użycie spowoduje wygenerowanie większej ilości slajdów.

I tak wygląda podstawowy slajd:

Przykładowy slajd w LaTeXu

Jego definicja:

237
238
239
240
241
242
243
244
245
246
247
248
249
250
\begin{frame}[c]{Kiedy blokowanie jest potrzebne}
  Model kopiuj -- modyfikuj -- scal sprawdza się bardzo
  dobrze przy założeniu, że mamy do czynienia z plikami
  tekstowymi, które są łatwe w zarządzaniu i sprawdzaniu
  co się zmieniło.

  \pause

  W przypadku pracy z plikami binarnymi, których nie da się
  łatwy czy też nawet automatyczny sposób scalić, przydatne
  może być blokowanie plików przed rozpoczęciem ich
  modyfikacji.

\end{frame
}

Slajd ten jest zbudowany w nastepujący sposób:

  • \begin{frame} – rozpoczęcie slajdu
  • [c] – mówi, że zawartość slajdu ma zostać wycentrowana na środku, można też użyć [t] mówiącego, że zawartość slajdu ma zostać wyrównana do góry
  • {Kiedy blokowanie jest potrzebne} – tytuł slajdu, można także umieścić podtytuł w kolejnym nawiasie klamrowym, do dyspozycji są także dwa polecenie: \frametitle oraz \framesubtitle, które pozwalają na ich ustawienie wewnątrz slajdu
  • zawartość slajdu, w tym przypadku po prostu akapit tekstu, poszczególne akapity muszą być rozdzielone przynajmniej dwoma znakami końca linii (jeden znak końca linii pozwala na dzielenie długiej linii w pliku źródłowym, ale przez LaTeX będzie on zastąpiony znakiem spacji)
  • \pause – powoduje, że zostanie zatrzymane wyświetlenie slajdu w momencie napotkania znaczka, w praktyce w tym przypadku spowoduje wygenerowanie dwóch stron w pliku PDF: pierwsza będzie zawierała tylko pierwszy akapit, druga oba
  • \end{frame} – koniec slajdu

Wypunktowania na slajdach

Jednym z najczęściej używanych elementów prezentacji są różnego rodzaju wypunktowania. W przypadku tworzenia prezentacji mamy można zdefiniować ich trzy rodzaje:

  • lista
  • numerowane
  • użycie definicji do numerowania

Lista wartości

Przykładowy wygląd listy wartości:

LaTeX - lista wartości

LaTeX - lista wartości

I kod który odpowiada za wygenerowanie tej strony:

73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
\begin{frame}{Czym jest repozytorium}
    \begin{itemize}
        \item scentralizowany system współdzielenia danych
        \item operacje jakie można wykonać na repozytorium:
        \begin{itemize}
            \item dodawanie plików
            \item usuwanie plików
            \item zmiany nazwy pliku
            \item przeniesienie pliku do innego katalogu
            \item zmiana właściwości
        \end{itemize}
        \item historia zmian
        \item odczyt danych przez klienta
    \end{itemize}
\end{frame
}

Nowe elementy, które się pojawiły:

  • \begin{itemize} – rozpoczęcie listy numerowanej
  • \item – nowy element listy
  • \end{itemize} – koniec listy numerowanej

Jak widać, listy można także zagnieżdżać poprzez ponowne rozpoczęcie definicji listy numerowanej. Jeżeli z jakiś powodów chcemy wyświetlić część elementów listy, lub wyświetlać je po kolei, to zawsze można w odpowiednim miejscu dodać polecenie \pause.

Lista numerowana

Tworzenie list numerowanych wygląda praktycznie tak samo jak tworzenie zwykłej listy (zmienia się tylko jej typ). Tak wygląda slajd w wybranym temacie:

LaTeX - lista numerowana

LaTeX - lista numerowana

I kod odpowiedzialny za jego wygenrowanie:

129
130
131
132
133
134
135
136
137
138
\begin{frame}{Zablokuj -- zmodyfikuj -- odblokuj}{Schemat działania}
    \begin{itemize}
        \item sposób działania:
        \begin{enumerate}
            \item zablokuj plik
            \item zmodyfikuj plik
            \item odblokuj plik
        \end{enumerate}
    \end{itemize}
\end{frame
}

Elementy nowe:

  • \begin{enumerate} – rozpoczęcie listy numerowanej
  • \item – kolejny element listy
  • \end{enumerate} – zakończenie listy numerowanej

Listy z wartościami definiowanymi

Można także stworzyć listę, w której będzie się podawało definicję, która jest opisywana:

LaTeX - lista definiowanych wartości

LaTeX - lista definiowanych wartości

Kod, który definiuje tę stronę:

340
341
342
343
344
345
346
347
\begin{frame}{Budowa repozytorium}
    Zalecany podział repozytorium na katalogi:
    \begin{description}[\texttt{branches}]
        \item[\texttt{trunk}] aktualna wersja danych (np. bieżący rozwój projektu)
        \item[\texttt{branches}] poszczególne odgałęzienia projektu
        \item[\texttt{tags}] oznakowane wersje
    \end{description}
\end{frame
}
  • \begin{description}[\texttt{branches}] – rozpoczęcie listy opisowej, w nawiasach [] można podać wartość najszerszego elementu, dzięki temu będzie możliwe odpowiednie ustawienie szerokości kolumny na wartości opisowe
  • \item[\texttt{trunk}] – kolejny element listy, w nawiasach [] podaje się wartość etykiety
  • \texttt{trunk} – wyświetlenie podanego tekstu (w nawiasach {}) przy użyciu czcionki o stałej szerokości znaków
  • \end{description} – koniec listy opisowej

Wstawienie grafiki

Kolejnym elementem często umieszczanym w prezentacjach są rożnego rodzaju obrazki. W prezentacji wyglądają one tak:

LaTeX - grafika na slajdzie

LaTeX - grafika na slajdzie

Kod, który generuje ten slajd:

98
99
100
101
102
103
\begin{frame}{Współdzielenie plików}{Pobranie plików z repozytorium}
    \begin{figure}[t]
        \includegraphics[height=0.62\textheight,keepaspectratio=true,clip=true,trim=0 0 0 100]{img/wsp_plik_1.png}
        \caption{Użytkownicy pobierają plik z repozytorium}
    \end{figure}
\end{frame
}

Znaczenie nowych elementów:

  • \begin{frame}{Współdzielenie plików}{Pobranie plików z repozytorium} – podanie tytułu i jednocześnie podtytułu slajdu
  • \begin{figure}[t] – oznaczenie, że będzie wstawiany obrazek, który zostanie wyrównany do góry (znacznik [t]
  • \includegraphics – wstawienie grafiki
    • height=0.62\textheight – ustawienie nowej wysokości obrazka, w tym przypadku to będzie 0,62 pomnożone przez wielkość miejsca na wprowadzenie tekstu
    • keepaspectratio=true – przy skalowania obrazka zachowaj proporcje
    • clip=true – obcięcie marginesów, należy ustawić aby działał parametr trim
    • trim=0 0 0 100 – zdefiniowanie marginesów do obcięcia
    • {img/wsp_plik_1.png} – ścieżka dostępu do grafiki
  • \caption – definicja podpisu pod obrazkiem
  • \end{figure} – koniec wstawianie obrazka

Tworzenie ramek

Można na prezentacji także umieszczać rożnego rodzaju ramki pozwalające na grupowanie informacji znajdujących się na slajdzie.

LaTeX - tworzenie ramek

LaTeX - tworzenie ramek

I kod pozwalający na wygenerowanie tego slajdu:

329
330
331
332
333
334
335
336
337
338
\begin{frame}{Utworzenie repozytorium}
    \begin{block}{Linia poleceń}
        \texttt{svnadmin create NoweRepozytorium}
    \end{block}
    \begin{block}{TortoiseSVN}
        \begin{figure}
            \includegraphics[scale=0.45,keepaspectratio=true]{img/20_tortoise_create_new_repository.png}
        \end{figure}
    \end{block}
\end{frame
}

Jak widać, za utworzenie ramki odpowiada konstrukcja \begin{block}{Linia poleceń}. Pozwala ona na zdefiniowanie ramki oraz jej tytułu.

Pojawia się także dodatkowa opcja w polecenie \includegraphics: scale=0.45. Pozwala ona na skalowanie obrazka o zadaną wielkość.

Wstawienie fragmentów kodu

Przy normalnym używaniu LaTeXa musimy uważać na obecność znaków specjalnych, które są w odpowiedni sposób przez niego interpretowane. Czasem istnieje potrzeba wstawienia fragmentu np. kodu źródłowego, który zawiera pokaźna ilość tych znaków specjalnych (np. przykład użycia jakiejś metody w LaTeXu). Przydatna wtedy jest możliwość wyłączenia interpretacji tekstu jako poleceń Tex.

LaTeX - wyłączenie interpretacji poleceń TeX

LaTeX - wyłączenie interpretacji poleceń TeX

I kod źródłowy, który pozwala na wygenerowanie powyższego slajdu:

445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
\begin{frame}[fragile]{Konflikty związane z plikami}{Zmiany w wewnątrz pliku}
    W przypadku wystąpienia tego rodzaju konfliktu w pliku
    źródłowym można znaleźć następujące linie:
   
    \begin{verbatim}
        < <<<<<< nazwa pliku
        twoje zmiany       
        =======
        kod pobrany z repozytorium
        >>>>>>> nr rewizji
    \end{verbatim}
   
    Można teraz tak zmodyfikować plik, aby najlepiej
    odzwierciedlał stan faktyczny.
\end{frame
}

Na co zwrócić uwagę:

  • \begin{frame}[fragile] – podczas definiowania slajdu należy ustawić parametr [fragile], włącza ona odpowiedni sposób interpretacji slajdu i pozwala na użycie poniższego polecenia
  • \begin{verbatim} – rozpoczęcie bloku, które ma zawierać wrażliwy tekst
  • \end{verbatim} – koniec bloku
  •  

Przykładowy projekt – prezentacja Subversion

Powyższe informacje wystarczyły mi do utworzenia prezentacji o Subversion. Poniżej link zarówno do pliku PDF z prezentacją, jak i do jej źródeł w LaTeXu:

Źródła

Tags: , , ,

Kodowanie polskich znaków w LaTeXu

Po ustawieniu kodowania pliku pisanego w LaTeXu na UTF8 genralnie nie ma problemów z polskimi znakami występującymi w treści prezentacji. Jednak zdarzało mi się, że występowały kłopoty jeżeli polskie znaki występowały np. w tytułach nagłówku, we właściwościach pliku PDF. Aby się one wyświetlił poprawnie, trzeba było je zapisać w formie zakodowanej.

Poniżej znajduje się tabela, w której znajdują się informacje jak zapisać poprawnie polskie znaki w formie zakodowanej:

Polska litera Kod TeX Polska litera Kod TeX
ą \k{a} Ą \k{A}
ć \'c Ć \'C
ę \k{e} Ę \k{E}
ł \l{} Ł \L{}
ń \'n Ń \'N
ó \'o Ó \'O
ś \'s Ś \'S
ż \.z Ż \.Z
ź \'z Ź \'Z

Źródła

Tags: , , ,

Automatyczna kompilacja pliku LaTeX, czyli o monitorowaniu zmian w plikach

Spotkałem się z następującym problemem: w momencie wykonania modyfikacji pewnych plików lub katalogów chciałem wykonać określoną akcję. W moim przypadku chodzi o automatyczne utworzenie pliku PDF na podstawie plików źródłowych stworzonych w LaTeXu.

W przypadku Linuksa mamy do dyspozycji podsystem jądra o nazwie inotify, który pozwala na powiadamianie aplikacji o różnych zmianach mających miejsce w ramach systemu plików. Ponieważ jest to moduł pracujący w przestrzeni jądra systemu, nie ma potrzeby skanowania systemu plików w celu poszukiwania zmian. Wystarczy jedynie zarejestrować aplikację, podać jakie zdarzenia i pliki (czy też katalogi) mają być monitorowane i o resztę będzie się troszczyć sam systemu operacyjny.

Oczywiście, to że jądro udostępnia jakąś usługę i istnieją odpowiednie biblioteki systemowe nie rozwiązuje problemu (chyba że piszemy własną aplikację). Znalazłem dwie aplikacje, które działają w przestrzeni użytkownika i pozwalają na wykorzystanie inotify:

  • incron – narzędzie to przypomina trochę crona, do działania wymaga zainstalowanego serwera oraz klienta w którym będzie można definiować reguły monitorowania i postępowania z plikami, pozwala ono na zdefiniowanie zarówno co ma być monitorowane o raz jakie akcje (np. jakie skrypty uruchomić) w momencie wykrycia zmian w systemie plików
  • inotify-tools – dwa polecenie, z których jedno pozwoli wyświetlić informacje statystyczne o modyfikacjach w systemie plików (inotifywatch), a drugie wyświetli informacje o zmodyfikowanych plikach (inotifywait)

W moim przypadku incron jest za dużym rozwiązaniem, nie potrzebują także ciągłego monitorowania wybranych katalogów, jedynie na czas pracy z LaTeXem. Idealnym rozwiązaniem okazało się użycie polecenia inotifywait. Nasłuchuje ono na zamiany w wybranych plikach czy katalogach i w momencie ich wystąpienia kończy swoje działanie jednocześnie wyświetlając informacje o tym, co zostało zmienione. Posiada także możliwość pracy w trybie ciągłego nasłuchiwania, czyli informuje nas o zmianach bez kończenia działania, ale tutaj funkcja ta nie będzie potrzebna.

Więc czas na konkrety: instalacja pakietu w Ubuntu:

# aptitude install inotify-tools

Teraz czas na mały skrypt, który będzie odpowiedzialny za uruchomienie nasłuchiwania oraz wykonywanie odpowiednich poleceń:

1
2
3
4
5
6
7
8
9
#!/bin/bash

MONITOR_COMMAND="inotifywait -q -e modify  --format '%w%f' --excludei '.*temp.*' ."

while true
do
        OUTPUT=`$MONITOR_COMMAND` && \
                pdflatex -output-directory=out main.tex
done;

Skrypt robi:

  • linia 3 – definicja wywoływania polecenia inotifywait:
    • -q – tryb cichy, nie wyświetla zbędnych informacji
    • -e modify – lista monitorowanych zdarzeń na plikach, tutaj tylko modyfikacja plików, ale można monitorować np. dostęp do nich, tworzenie, usuwanie, przenoszenie, zmiany metadanych
    • --format '%w%f' – format, w jakim ma być wyświetlona informacje o tym co się zmieniło, w tym przypadku nazwa pliku wraz z katalogiem, w którym się on znajduje
    • --excludei '.*temp.*' – jakich plików nie brać pod uwagę
  • linia 5 – rozpoczęcie pętli, nieskończonej
  • linia 7 – wywołanie polecenia inotifywait, polecenie to skończy działanie dopiero jak wykryje jakieś zmiany w monitorowanych plikach
  • linia 8 – wywołanie akcji, w moim przypadku kompilacja raportu

W zmiennej $OUTPUT znajdzie się lista zmodyfikowanych plików, więc w razie potrzeb można na niej wykonać określone akcje.

Skrypt ten będzie działał w nieskończoność, do momentu przerwania jego wykonywania. Dzięki niemu można mieć podgląd wygenerowanych dokumentów LaTeX prawie w czasie rzeczywistym.

Źródła

Tags: , , , , , ,