Do wpisywania literalnych fragmentów tekstu używam otoczenia
Verbatim
z pakietu fancyvrb
. Otoczenie to m.in. może
być wstawione do przypisu oraz jest możliwość umieszczania
w tekście literalnym poleceń formatujących. To drugie przydaje się przykładowo w sytuacji
gdy w opisie składni jakiegoś języka pewne fragmenty są meta, tj. nie należy
przepisywać ich literalnie ale oznaczają pewne pojęcia (jak dajmy na to
element replaceable
wewnątrz
literallayout
w Docbook), przykładowo:
\begin{list}{punktor}{deklaracje} zestawienie \end{list}
Można wpisać:
\begin{Verbatim}[commandchars=@\{\}] \begin{list}{@emph{punktor}}{@emph{deklaracje}} @emph{zestawienie} \end{list}
Jeżeli fragmenty literalne mają być mniejsze
to można dopisać po przecinku fontsize=\small
. Inną potencjalnie
przydatną opcją jest numerowanie wierszy:
\begin{Verbatim}[commandchars=@{},fontsize=\small,numbers=left] \begin{list}{@emph{punktor}}{@emph{deklaracje}} @emph{zestawienie} \end{list}
Numery nie muszą się zaczynać od 1. Opcja firstnumber
pozwala
na kontynuację. Można w szczególności wpisać firstnumber=last
i numerowanie rozpocznie się od wartości o 1 większej niż ostatni wiersz
w poprzednim otoczeniu Verbatim
.
Można też wykorzystując polecenie \fvset
zdefiniować
powtarzające się opcje globalnie a nie wpisywać je za każdym razem:
\usepackage{fancyvrb} \VerbatimFootnotes % <-- verbatim można umieszczać w przypisie \DefineShortVerb{\"} % <-- krótka forma zapisu "foo" zamiast \verb@foo@ \fvset{commandchars=¤´˝} \makeatactive \newenvironment{literalexample}{\begingroup \endgraf \small \medskip \Verbatim}% {\endVerbatim \par \medskip \endgroup \@doendpe } \makeatother \begin{document} \begin{literalexample} \@startsection{¤emph´nazwa˝}{¤emph´poziom˝}{¤emph´wcięcie˝}{¤emph´odstęp-przed˝}{¤emph´odstęp-po˝}{¤emph´styl˝} \end{literalexample}
W powyższym przykładzie \@doendpe
powoduje, że
w pierwszym akapicie po otoczeniu literalexample
nie będzie wcięcia.
\Verbatim
i \endVerbatim
,
to otoczenie Verbatim
zapisane w postaci pary poleceń (każde otoczenie LaTeXa można
zapisać jako
\Otoczenie
i \endOtoczenie
.
Ponieważ w kodzie LaTeXa praktycznie występują wszystkie znaki z klawiatury
jako commandchars zastosowałem znaczki z górnej połówki ASCII:
¤
(dziesiętnie 164) ´
(180) oraz ˝
(189).
Można by stosować np. ¤{}
, ale wolałem nie używać {}
w roli ograniczników do ¤
, żeby mi się nie mieszało z nawiasami
klamrowymi wstawionymi literalnie.
Teraz większy przykład, jak to działa
%& --translate-file=il2-pl \documentclass[a4page]{book} \usepackage{fancyvrb} \fvset{commandchars=¤´˝} \usepackage{polski} \begin{document} \begin{Verbatim} \begin{list}{¤emph´punktor˝}{¤emph´deklaracje˝} ¤emph´zestawienie˝ \end{list} \end{Verbatim} \end{document}
Znaczki ¤´
oraz ˝
wstawiam w Emacsie wciskając
C-c [
oraz C-c ]
.
W tym celu w .emacs
zdefiniowałem co następuje:
(defun insert-commandchars-open () "Insert sequence of characters character 164-180" (interactive) (insert "¤emph´") ) (defun insert-commandchars-close () "Insert sequence of characters character 189" (interactive) (insert "˝") ) (global-set-key "\C-c\C-[" 'insert-commandchars-open) (global-set-key "\C-c\C-]" 'insert-commandchars-close)
Teraz jeżeli byśmy na-rympał chcieli to używać z opcją utf-8
albo latin2
pakietu inputenc
, to no-way:
\documentclass[a4page]{book} \usepackage[utf8]{inputenc} \usepackage{lmodern} \usepackage[T1]{fontenc} \usepackage{fancyvrb} \fvset{commandchars=¤´˝} \usepackage{polski} \begin{document} \begin{Verbatim} \begin{list}{¤emph´punktor˝}{¤emph´deklaracje˝} ¤emph´zestawienie˝ \end{list} \end{Verbatim} \end{document}
LaTeX zgłasza błąd:
! Package inputenc Error: Keyboard character used is undefined
BTW: zapewne \fvset{commandchars=@\{\}}
zadziała, ale nie
chce mi się sprawdzać...
Można spróbować też XeTeXa:
\documentclass[a4page]{book} \usepackage{fontspec} %<-- włącza LM wymaga xetexa \usepackage{fancyvrb} \fvset{commandchars=¤´˝} \usepackage{polski} \begin{document} \begin{Verbatim} \begin{list}{¤emph´punktor˝}{¤emph´deklaracje˝} ¤emph´zestawienie˝ \end{list} \end{Verbatim} \end{document}
Działa...