Archive for category 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: , , ,

Spis treści w prezentacji utworzonej przy użyciu Latex

W przypadku Latexa i tworzenia prezentacji przy użyciu pakietu Beamer tworzenie spisu treści jest proste, i składa się z dwóch kroków:

  1. Dodać do prezentacji informacji o podziale jej na sekcje, podsekcje i pod podsekcje (czyli rozdziały i pod rozdziały). Można to zrobić przy pomocy poleceń:
    \section{Tytuł sekcji}

    \subsection{Tytuł podsekcji}

    \subsubsection{Tytuł pod podsekcji
    }

    Jeżeli użyjemy któregoś polecenia w takiej formie: \section*{Tytuł sekcji}, to wybrana sekcja nie będzie uwzględniania w spisie treści.

  2. Wygenerować wpis przy użyciu polecenia \tableofcontents. Pozwoli to na wstawienie spisu treści w miejscu wystąpienia tego polecenia.

I tak jak z punktem pierwszym problemów raczej być nie powinno, to mamy spory wpływ na generowanie spisu treści. I poniżej kilka przykładów, jak może wyglądać spis treści, generowany zarówno na początku dokumentu, jak również przed większymi fragmentami prezentacji.

Podstawowy spis treści, generuje na slajdzie wszystkie sekcji, podsekcje i pod podsekcje:

\begin{frame}{Spis treści 1}
    \tableofcontents
\end{frame
}

W przypadku niewielkich prezentacji, taki spis treści może być w porządku. Jednak jeżeli prezentacja jest długa, jest podzielona na wiele części, to nie będzie to zbyt przejrzyste.

Można wobec tego wygenerować spis treści zawierający tylko główne punkty:

\begin{frame}{Spis treści 2}
    \tableofcontents[pausesections,hideallsubsections]
\end{frame
}

Powyższy wpis wyświetli tylko główne sekcje dokumentu (parametr hideallsubsections) oraz pozwoli na wyświetlenie spisu treści stopniowo, po jednym punkcie (parametr pausesections). Dzięki temu można spokojnie omówić, co będzie przedmiotem wykładu w każdej części prezentacji.

Przydatne także może być generowanie spisu treści przed rozpoczęciem danej sekcji, dzięki czemu można przedstawić dokładny plan prezentacji.

\begin{frame}{Spis treści 3}
    \tableofcontents[currentsection, hideothersubsections,sections={<1-3>}]
\end{frame
}

Pojawiły się się 3 nowe parametry:

  • currentsection – powoduje, że wszystkie sekcje poza aktualną będą wyświetlono jako przyciemnione, czyli aktualna sekcja zostanie wyróżniona
  • hideothersubsections – podsekcje z innych sekcji niż aktualna zostaną ukryte, czyli zostaną tylko główne sekcje
  • sections – pozwala określić, które sekcje mają zostać wyświetlone, w tym przypadku, czyli tutaj od 1 do 3, a aktualna sekcja ma numer 2

Pojawia się jednak pewien problem, gdy nie chcemy wyświetlić pod podsekcji. Nie ma w takim przypadku możliwości wyłączenia ich wyświetlenie (przy pozostawieniu wyświetlania tylko podsekcji). Sposobem na to jest użycie dodatkowej komendy \setcounter, która pozwala na zdefiniowanie poziomu zagłębienia spisu treści:

\begin{frame}{Spis treści 4}
        \setcounter{tocdepth}{2}
        \tableofcontents[sectionstyle=show/hide,subsectionstyle=show/show/hide]
\end{frame
}

Oprócz nowej komendy pojawiły się dwie dodatkowe opcje:

  • sectionstyle – pozwala na określenie, czy i jak mają być wyświetlane sekcje, pierwszy parametr dotyczy aktualnej sekcji (ma zostać pokazana), drugi mówi o pozostałych sekcjach (mają zostać schowane)
  • subsectionstyle – ten parametr natomiast pozwala określić co ma się dziać z podsekcjami: pokaż aktualną podsekcję, pokaż podsekcje aktualnej sekcji, ukryj inne podsekcje

Zamiast hide można także użyć przełącznika shaded.

Jak widać, te dwie ostatnie opcje tak naprawdę pozwalają zdefiniować co ma się dziać ze spisem treści, pozostałe przełączniki tylko w odpowiedni sposób je konfigurują.

Źródła

Tags: , ,