Archive for Wrzesień, 2010

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