Posts Tagged latex

Pakiet minted w praktyce – konfiguracja

Poniżej można znaleźć kilka informacji o sposobach użycia pakietu minted, pozwalającego na kolorowanie składni w Latexu.

Oznaczanie kodu źródłowego w dokumencie

Kod źródłowy można w przypadku tego pakietu włączyć na kilka sposobów, każdy może się przydać w określonych sytuacjach:

  • \mint – osadzenie pojedynczej linii kodu.
    Kod Latex Efekt działania
    1
    Osadzenie kodu \mint{java}|public class HelloWorld|
    Użycie mint

    Do oznaczenia kodu źródłowego można użyć praktycznie dowolnych znaków, które w nim nie występują. Można także dodać dodatkowe opcje konfiguracyjne.

  • minted – osadzanie większej ilości kodu

    Oznaczenie obszaru kodu źródłowego można zrealizować w następujący sposób:

    Kod Latex Efekt działania
    1
    2
    3
    4
    5
    \begin{minted}{java}
      private boolean hello() {
        return true;
      }
    \end{minted
    }
    Użycie minted
  • listing – pozwala na otoczenia kodu źródłowego i dodanie jeszcze dodatkowego opisu i referencji do kodu
    Kod Latex Efekt działania
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Bardzo interesująca funkcję można
    znaleźć w przykładzie \ref{java:hello}

    \begin{listing}
      \begin{minted}[gobble=4]{java}
        private boolean hello() {
          return true;
        }
      \end{minted}
      \caption{Funkcja hello}
      \label{java:hello}
    \end{listing
    }
    Użycie listing

    Z takim sposobem wyświetlania kodu łączą się jeszcze dodatkowe polecenia:

    • \listoflistings – wyświetlenie listy wszystkich listingów
    • \renewcommand\listingscaption{Kod źródłowy} – przedefiniowanie standardowego podpisu pod kodem źródłowym
    • \renewcommand\listoflistingscaption{Lista kodów źródłowych} – przedefiniowawszy standardowego opisu do listy kodów źródłowych

Definicja własnych skrótów

Istnieje możliwość zdefiniowania własnych sposobów na oznaczanie kodu źródłowego. W połączeniu wyborem języka oraz zestawem domyślnie używanych opcji może to bardzo ułatwić wprowadzanie kodu źródłowego w ramach dokumentu i zapewni jego spójny wygląd.

  • \newminted – pozwala na definicję skrótu dla środowiska minted:
    Kod Latex Efekt działania
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    \newminted{java}{gobble=2,linenos}

    \begin{javacode}
      private boolean hello() {
        return true;
      }
    \end{javacode
    }

    % definicja dodatkowych opcji

    \begin{javacode*}{linenos=false}
      private boolean hello() {
        return true;
      }
    \end{javacode*
    }
    Użycie newminted

    Istnieje także możliwość definicji własnej nazwy dla środowiska:

    Kod Latex Efekt działania
    1
    2
    3
    4
    5
    6
    \newminted[ja]{java}{frame=single}
    \begin{ja}
      private boolean hello() {
        return true;
      }
    \end{ja
    }
    Własna nazwa środowiska

Niektóry opcje konfiguracyjne

minted pozwala na użycie szeregu opcji konfiguracyjnych, które mają wpływ na sposób formatowania kodu źródłowego. Poniżej lista tych parametrów dla mnie najważniejszych.

  • baselinestretch (auto|dimension) – ustalenie odstępu pomiędzy wierszami:
    Kod Latex Efekt działania
    1
    2
    3
    4
    5
    6
    \begin{minted}[gobble=2,
          baselinestretch=1.5
    ]{java}
      private boolean hello() {
        return true;
      }
    \end{minted
    }
    baselinestretch
  • firstline (integer) – pierwsza linia kodu źródłowego do pokazania, domyślnie wartość 1
    Kod Latex Efekt działania
    1
    2
    3
    4
    5
    6
    \begin{minted}[gobble=2,
          firstline=2
    ]{java}
      private boolean hello() {
        return true;
      }
    \end{minted
    }
    firstline
  • lastline (integer) – ostatnia linia kodu źródłowego do wyświetlania, pozostałe będą ignorowane, domyślnie ostatnia linia
    Kod Latex Efekt działania
    1
    2
    3
    4
    5
    6
    \begin{minted}[gobble=2,
          lastline=2
    ]{java}
      private boolean hello() {
        return true;
      }
    \end{minted
    }
    lastline
  • firstnumber (auto|integer) – numer pierwszej linii, jeżeli włączone jest ich numerowanie
    Kod Latex Efekt działania
    1
    2
    3
    4
    5
    6
    7
    \begin{minted}[gobble=2,
          linenos,
          firstnumber=43
    ]{java}
      private boolean hello() {
        return true;
      }
    \end{minted
    }
    firstnumber
  • frame (none|leftline|topline|bottomline|lines|single) – format ramki wokół kodu xródłowego
    Kod Latex Efekt działania
    1
    2
    3
    4
    5
    6
    \begin{minted}[gobble=2,
          frame=lines
    ]{java}
      private boolean hello() {
        return true;
      }
    \end{minted
    }
    frame
  • gobble (integer) – wycięcie określonej ilości znaków na początku kodu, przydatne aby niwelować wcięcia z kodu Latex
    Kod Latex Efekt działania
    1
    2
    3
    4
    5
    \begin{minted}[gobble=2]{java}
      private boolean hello() {
        return true;
      }
    \end{minted
    }
    gobble
  • linenos (boolean) – dodanie numeracji do poszczególnych linii
    Kod Latex Efekt działania
    1
    2
    3
    4
    5
    6
    \begin{minted}[gobble=2,
          linenos
    ]{java}
      private boolean hello() {
        return true;
      }
    \end{minted
    }
  • samepage (boolean) – nie dzieleniu kodu między różne strony
  • showspaces (boolean) – zaznaczenie spacji (i u mnie nie zadziałało…)

Źródła

Tags: , , ,

Kolorowanie kodu źródłowego w Latex przy użyciu pygments

Do kolorowania (czy też może formatowania) kodu źródłowego można w przypadku Latexa używać pakietu listings. Zapewnia on całkiem spore możliwości formatowania kodu źródłowego, ale ma kilka wad:

  • pakiet ten nie rozumie składni kodu źródłowego, po prostu koloruje tekst wg wprowadzonych słów kluczowych
  • istnieją problemy z obsługą standardu UTF8 (do przeskoczenia, ale zawsze)

Ratunkiem na to może być użycie pakietu pygments napisanego w Pythonie i zintegrowanie go z Latexem przy użyciu pakietu minted.

Instalacja aplikacji pygments

Pierwszym krokiem będzie zainstalowanie pakietu pygments, który będzie odpowiedzialny za generowanie odpowiednio kolorowanej składni. W przypadku systemu Debian oraz Ubuntu wystarczy zainstalować pakiet python-pygments:

$ sudo aptitude install python-pygments

Instalacja pakietu minted

Teraz czas integrację pygments z Latexem. Będzie tutaj pomocny pakiet o nazwie minted. Niestety nie jest on dostępny w ramach pakietów dostarczany z Ubuntu, więc należy go zainstalować w ramach Latexa ręcznie. Poniżej krótka instrukcja jak można to zrobić:

  1. Pobranie plików.

    Pliki można pobrać w formie archiwum (ze strony projektu). Ja jednak wybrałem pobranie aktualnej wersji bezpośrednio z repozytorium (w wersji pakietowej znajduje się błąd, uniemożliwiający kompilacje dokumentacji na Linuksie: Issue 5):

    $ wget "http://minted.googlecode.com/hg/minted.ins" \
            "http://minted.googlecode.com/hg/Makefile" \
            "http://minted.googlecode.com/hg/README" \
            "http://minted.googlecode.com/hg/minted.dtx" \
            "http://minted.googlecode.com/hg/minted.sty"
  2. Kompilacja dokumentacji.
    $ make minted.pdf
    $ make clean
  3. Instalacja pakietu.
    $ sudo mkdir -p /usr/local/share/texmf/tex/latex/minted
    $ sudo cp minted.sty /usr/local/share/texmf/tex/latex/minted
  4. Instalacja dokumentacji
    $ sudo mkdir -p /usr/local/share/texmf/doc/latex/minted
    $ sudo cp minted.pdf /usr/local/share/texmf/doc/latex/minted

    Po instalacji pakietu i dokumentacji należy jesze upewnić się, że uprawnienia nadane plikom będą odpowiednie.

  5. Rejestracja nowych pakietów.
    $ sudo mktexlsr

Dzięki takiej instalacji pakiet będzie dostępny dla wszystkich użytkowników, także jego dokumentacja będzie dostępna poprzez polecenie:

$ texdoc minted

Kolorowanie składni

Aplikacja zainstalowana, moduł do Latexa także więc czas uruchomić i sprawdzić jak działa kolorowanie składni, przykładowy kod:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
\documentclass[a4paper]{article}
\usepackage{fontspec}
\usepackage{minted}

\begin{document}

  Fragment kodu Javy:

  \begin{minted
}[linenos,% numeracja linii
                 numbersep=5pt,% separator numeracji od tekstu
                 gobble=2,% domyślne wcięcie kodu
                 frame=lines,% linie ograniczające
                 framesep=2mm
                 ]{java}
  public class HelloWorld extends Hello {
    private final String STALA = "Tekst"

    public HelloWorld() {
      int zmienna = 5;
    }
  }
  \end{minted}
\end{document
}

Czas teraz na kompilację. Tutaj spotkała mnie niespodzianka, bo okazało się że polecenie pdflatex nie zadziałało:

$ pdflatex  -shell-escape kolorowo.tex

...
 ********************************************
 * XeTeX is required to compile this document.
 * Sorry!
 ********************************************.
...

Komunikat błędu całkiem jasny, ale jakoś nie słyszałem wcześniej o czymś co się nazwy XeTeX (a wielka szkoda, z tego co widzę oszczędziłoby mi to kilku problemów z polskimi znakami). Więc mała modyfikacja polecenia i wszystko powinno już działać:

$ xelatex -shell-escape kolorowo.tex

W wyniku działania tego polecenia powinno być wygenerowanie pliku kolorowo.pdf z ładnym kodem źródłowym. Należy pamiętać o użyciu przełącznika -shell-escape, dzięki czemu jest możliwe wywoływanie zewnętrznych aplikacji (w tym przypadku pygments).

Źródła

Tags: , , , , ,

Kolorowanie składni Oracle SQL w Latex

Ostatnimi czasy musiałem umieścić w dokumencie utworzonym przy użyciu Latex przykłady zapytań dla bazy danych Oracle. W związku z czym sięgnąłem do pakietu listings, który pozwala na odpowiednie wyróżnienie słów kluczowych SQL.

Dokładny sposób włączenia tego pakietu i jego podstawowe parametry można znaleźć we tym wpisie: Kolorowanie składni Javy w systemie LaTeX przygotowanym przez Marcina Stachniuka. Dla Oracle deklaracja może wyglądać tak:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
\documentclass[a4paper,12pt]{article}

\usepackage[T1]{fontenc}
\usepackage[utf8x]{inputenc}

\lstset{language=SQL,
    basicstyle=\small,
    showstringspaces=false,
    tabsize=4,
    inputencoding=utf8x,
    extendedchars=\true,
}

\begin{document}

\begin{lstlisting}
    SELECT MIN(DISTINCT kolumna2)
    FROM table
    WHERE NVL(kolumna, 0) = 0
\end{lstlisting}

\end{document
}

Taki zapis spowoduje wygenerowanie zapytania SQL, gdzie słowa kluczowe oraz niektóre funkcje zostaną wypisane czcionką pogrubioną, pozostałem elementy natomiast zwykłą. Także nie wszystkie elementy Oracle SQL zostają poprawnie zakwalifikowane i część z nich wyświetla się w „zwykły” sposób.

Drugim problem są nazwy funkcji, ja chciałbym aby zostały one wyświetlone pochyłą czcionką a nie pogrubioną.

Najprostszym rozwiązaniem oczywiście byłoby dodanie odpowiednich słów kluczowych zarówno z deklaracji języka, oraz utworzenie odpowiedniej klasy dla funkcji, które byłby wypisywane kursywą. Nie można jednak zmienić przyporządkowania już przypisanych funkcji, także mogę np. wypisać funkcję NVL kursywą, ale już z funkcją MIN mi się to nie uda.

Pozostaje więc zdefiniowanie nowego języka, który będzie zachowywał się tak, jak tego oczekuję. Nie jest to trudne, tym bardziej, że dysonujemy już przecież definicją dla języka SQL, wystarczy tylko odpowiednio ją zmodyfikować.

Najpierw należy odszukujemy definicję języka SQL, w moim przypadku znajduje się ona w tym pliku /usr/share/texmf-texlive/tex/latex/listings/lstlang1.sty:

1393
1394
1395
1396
1397
1398
1399
1400
1401
%%
%% SQL definition (c) 1998 Christian Haul
%%                (c) 2002 Neil Conway
%%                (c) 2002 Robert Frank
%%                (c) 2003 Dirk Jesko
%%
\lst@definelanguage{SQL}%
    {morekeywords={ABSOLUTE,ACTION,ADD,ALLOCATE,ALTER,ARE,AS,ASSERTION,%
       AT,BETWEEN,BIT_LENGTH,BOTH,BY,CASCADE,CASCADED,CASE,CAST,%

Pozostaje teraz zdefiniować własny dialekt, skopiować definicję dialektu SQL oraz ją zmodyfikować. Poniżej moja propozycja:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
\lstdefinelanguage[Oracle]{SQL}%
  {morekeywords={ABSOLUTE,ACTION,ADD,ALLOCATE,ALTER,ARE,AS,ASSERTION,%
      AT,BETWEEN,BIT_LENGTH,BOTH,BY,CASCADE,CASCADED,CASE,CAST,%
      CATALOG,CHAR_LENGTH,CHARACTER_LENGTH,CLUSTER,%
      COLLATION,COLUMN,CONNECT,CONNECTION,CONSTRAINT,%
      CONSTRAINTS,CONVERT,CORRESPONDING,CREATE,CROSS,CURRENT_DATE,%
      CURRENT_TIME,CURRENT_TIMESTAMP,CURRENT_USER,DAY,DEALLOCATE,%
      DEC,DEFERRABLE,DEFERED,DESCRIBE,DESCRIPTOR,DIAGNOSTICS,%
      DISCONNECT,DOMAIN,DROP,ELSE,END,EXEC,EXCEPT,EXCEPTION,EXECUTE,%
      EXTERNAL,EXTRACT,FALSE,FIRST,FOREIGN,FROM,FULL,GET,GLOBAL,%
      GRAPHIC,HAVING,HOUR,IDENTITY,IMMEDIATE,INDEX,INITIALLY,INNER,%
      INPUT,INSENSITIVE,INSERT,INTO,INTERSECT,INTERVAL,%
      ISOLATION,JOIN,KEY,LAST,LEADING,LEFT,LEVEL,LIMIT,LOCAL,%
      MATCH,MINUTE,MONTH,NAMES,NATIONAL,NATURAL,NCHAR,NEXT,NO,NOT,NULL,%
      OCTET_LENGTH,ON,ONLY,ORDER,ORDERED,OUTER,OUTPUT,OVERLAPS,%
      PAD,PARTIAL,POSITION,PREPARE,PRESERVE,PRIMARY,PRIOR,READ,%
      RELATIVE,RESTRICT,REVOKE,RIGHT,ROWS,SCROLL,SECOND,SELECT,SESSION,%
      SESSION_USER,SIZE,SPACE,SQLSTATE,SUBSTRING,SYSTEM_USER,%
      TABLE,TEMPORARY,THEN,TIMEZONE_HOUR,%
      TIMEZONE_MINUTE,TRAILING,TRANSACTION,TRANSLATION,%
      TRUE,UNIQUE,UNKNOWN,USAGE,USING,VALUE,VALUES,%
      VARGRAPHIC,VARYING,WHEN,WHERE,WRITE,YEAR,ZONE,%
      AND,ASC,CHECK,COMMIT,DESC,DISTINCT,GROUP,IN,% FF
      LIKE,NUMBER,ROLLBACK,VARCHAR2,% FF
      UNION,UPDATE,% RF
      ALL,ANY,CUBE,CUBE,DEFAULT,DELETE,EXISTS,GRANT,OR,RECURSIVE,% DJ
      ROLE,ROLLUP,SET,SOME,TRIGGER,VIEW},% DJ
   morendkeywords={BIT,BLOB,CHAR,CHARACTER,CLOB,DATE,DECIMAL,FLOAT,% DJ
      INT,INTEGER,NUMERIC,SMALLINT,TIME,TIMESTAMP,VARCHAR},% moved here
   sensitive=false,% DJ
   morecomment=[l]--,%
   morecomment=[s]{/*}{*/},%
   morestring=[d]',%
   morestring=[d]",%

  %% dodatkowe słowa kluczowe dla Oracla oraz definicja funkcji

    morekeywords={SAMPLE,SEED,ROWNUM,SYSDATE,IS,MINUS,WITH,START,%
      PARTITION,OVER,UNBOUNDED,PRECEDING,CURRENT,ROW,FOLLOWING,%
      MODIFY,RENAME,TO,REFERENCES,DISABLE,ENABLE,NOVALIDATE,EXCEPTIONS,%
      TRUNCATE,MERGE,MATCHED,SAVEPOINT,FORCE,OPTION,SEQUENCE,CYCLE,%
      INCREMENT,MINVALUE,MAXVALUE},
    classoffset=1,
    morekeywords={dbms_random,LOWER,UPPER,INITCAP,LPAD,RPAD,LTRIM,%
      RTRIM,TRIM,SUBSTR,SUM,MIN,MAX,INSTR,LENGTH,ROUND,TRUNC,POWER,%
      SQRT,SIGN,ABS,MOD,NULLIF,SIN,COS,TAN,SINH,COSH,TANH,REPLACE,%
      TRANSLATE,TO_CHAR,TO_NUMBER,DECODE,NVL,NVL2,COALESCE,AVG,%
      COLLATE,COUNT,STDDEV,VARIANCE,MEDIAN,MONTHS_BETWEEN,ADD_MONTHS,%
      LAST_DAY,NLSSORT,TO_DATE,GROUPING,RANK,DENSE_RANK,ROW_NUMBER,%
      FIRST_VALUE,LAST_VALUE,LEAD,LAG},
    keywordstyle=\textit,
  }[keywords,comments,strings]%

Oczywiście, każdy będzie musiał dostosować ten zapis pod siebie w zależności od funkcji które są używane, być może o niektórych słowach kluczowych SQL także zapomniałem. Należy pamiętać, że jeżeli jakieś słowo jest wypisywane pogrubionymi literami (a np. powinno być funkcją i chcemy aby zostało zapisane kursywą), to należy sprawdzić czy jest ono zdefiniowane w jakieś wcześniejszej linii. W takim przypadku należy je stamtąd usunąć.

Użycie takiego dialektu wygląda tak:

6
7
8
9
10
11
12
\lstset{language=[Oracle]SQL,
    basicstyle=\small,
    showstringspaces=false,
    tabsize=4,
    inputencoding=utf8x,
    extendedchars=\true,
}

Źródła

Tags: , ,

Polskie znaki podczas formatowania kodu źródłowego w Latexu

Umieszczając przykład kodu źródłowego przy użyciu pakietu listings w Latexu trafiłem na problem: jak wyświetlić poprawnie polskie znaki w dokumencie. Umieszczenie jakiegokolwiek polskiego znaczku w obrębie kodu źródłowego skutkowało zgłoszeniem błędu i koniec, poza zamianą polskiej literki na łacińską wiele zrobić się nie dało.

Okazało się, że problem występuje w sytuacji, gdy plik źródłowy jest zapisany w standardzie UFT-8. W przypadku użycia innego kodowanie, problemów być nie powinno. Pakiet listings nie obsługuje za dobrze kodowania UTF. Po dalszych poszukiwaniach, pojawiło się kilka rozwiązań problemu:

  1. Umieszczenie kodu źródłowego w oddzielnym pliku z kodowaniem np. ISO-8859-2, w włączanie tego kodu do głównego dokumentu (mi to rozwiązanie nie bardzo pasowało, musiałbym bym utrzymywać jakieś 200 dodatkowych plików).
  2. Włączenie obsługi UTF-8 w pakiecie listings:
    \lstset{
            inputencoding=utf8,
            extendedchars=\true
    }

    Teoretycznie rozwiązanie działa, przynajmniej kompilacja raportu przebiega poprawnie, jednak polskie znaki są źle umieszczane w dokumencie (każda polska litera jest zawsze umieszczana na początku wyrazu w którym występuje).

  3. Użycie polecenia \literate i zmiana polskich liter na odpowiednie kodowanie Latexa
  4. Trzecie podejście okazało się najlepsze, ponieważ umożliwiło wstawianie polskich znaków w kodzie źródłowym oraz nie wymagało wprowadzania żadnych zmian zarówno po stronie przykładów jak i samego kodowania plików. Tak wygląda moja definicja języka:

    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    \lstset{
            language=SQL,
        inputencoding=utf8x,
        extendedchars=\true,
        literate={ą}{{\k{a}}}1
                 {Ą}{{\k{A}}}1
                 {ę}{{\k{e}}}1
                 {Ę}{{\k{E}}}1
                 {ó}{{\'o}}1
                 {Ó}{{\'O}}1
                 {ś}{{\'s}}1
                 {Ś}{{\'S}}1
                 {ł}{{\l{}}}1
                 {Ł}{{\L{}}}1
                 {ż}{{\.z}}1
                 {Ż}{{\.Z}}1
                 {ź}{{\'z}}1
                 {Ź}{{\'Z}}1
                 {ć}{{\'c}}1
                 {Ć}{{\'C}}1
                 {ń}{{\'n}}1
                 {Ń}{{\'N}}1
    }

    Użycie tej definicj pozwoli na odpowiednią interpretacją polskich znaków jak i też innych, pod warunkiem że odpowiednio zdefiniujemy mapowanie.

    Źródła

Tags: , , ,

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: , , ,