summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/examplep/eurotex_2005_examplep.tex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/examplep/eurotex_2005_examplep.tex
Initial commit
Diffstat (limited to 'macros/latex/contrib/examplep/eurotex_2005_examplep.tex')
-rw-r--r--macros/latex/contrib/examplep/eurotex_2005_examplep.tex1848
1 files changed, 1848 insertions, 0 deletions
diff --git a/macros/latex/contrib/examplep/eurotex_2005_examplep.tex b/macros/latex/contrib/examplep/eurotex_2005_examplep.tex
new file mode 100644
index 0000000000..e6052aca4d
--- /dev/null
+++ b/macros/latex/contrib/examplep/eurotex_2005_examplep.tex
@@ -0,0 +1,1848 @@
+%
+% eurotex_2005_examplep.tex
+% by pts@fazekas.hu at Thu Nov 11 20:44:25 CET 2004
+% -- Wed Jan 12 00:42:06 CET 2005
+%
+% Dat: this is the supposed final version of the article, without corrections
+% Dat: required houses.{eps,pdf} pexaminipage.{eps,pdf} shorthyp_t1xtts.{eps,pdf}
+% Dat: auxilary files: eurotex_2005_examplep.bib ttt.tex
+% OK: eliminate Overfull \hbox{}es
+% OK: submit to CTAN
+%
+
+\documentclass[a4paper]{article}
+\usepackage[latin2]{inputenc}% Dat: because of `á' etc.; also ÷
+\usepackage{t1enc}
+\usepackage{booktabs}
+\usepackage{graphicx}% Dat: after Babel
+\usepackage{mflogo}
+
+% Dat: for \documentclass[a4paper]{article}
+\special{\string!\expandafter\expandafter\csname @gobble\endcsname
+ \string\%xdvi.dvo: -expert -s 6 -xoffset -1.54cm -yoffset -1.54cm
+ -paper 12.8cmx23cm} % -xoffset 7mm -yoffset 13mm -paper 385ptx576pt}
+
+\title{Verbatim phrases and listings in {\LaTeX}}
+\author{P\'eter Szab\'o $\langle$\texttt{pts@fazekas.hu}$\rangle$
+\thanks{Thanks to Ferenc Wettl for the fruitful long discussion about the
+line syntax of the \texttt{code} environment, and also for reviewing the
+article.}
+\\[3pt]%\par\smallskip
+\normalsize Budapest University of Technology and Ecomomics,\\[-3pt]
+\normalsize Department of Analysis,\\[-3pt]
+\normalsize M\H{u}egyetem rakpart 3--9.,\\[-3pt]
+\normalsize Budapest, Hungary H-1111}
+\date{2004-11-11}
+
+\def\verbatizee#1{\begingroup\ttfamily
+ \toks0{#1}\edef\next{\the\toks0}%
+ %\dimen0=\the\fontdimen2\font % Dat: disable spaces, `=' is required here
+ \dimen0\fontdimen2\font % Dat: disable spaces, `=' is required here
+ %\showthe\dimen0
+ \fontdimen2\font=0pt
+ {\expandafter\stripit\meaning\next}% Dat: grouping to keep \dimen0
+ \unskip % Dat: strip final space, possibly after command
+ \fontdimen2\font=\dimen0
+ %\showthe\dimen0
+ \endgroup}
+\def\next{}
+\expandafter\def\expandafter\stripit\meaning\next{}
+
+%** So \verb+÷+ works.
+\DeclareInputText{247}{\ensuremath{\div}}
+
+\belowcaptionskip0pt
+
+\begin{document}
+
+\maketitle
+
+\begin{abstract}
+
+ The \textsf{examplep} package written by the author recently provides
+ sophisticated features for typesetting verbatim source code listings,
+ including the display of the source code and its compiled \LaTeX{} or
+ \textsf{METAPOST} output side-by-side, with automatic width detection and
+ enabled page breaks (in the source), without the need for specifying the
+ source twice. Special care is taken so section, page and footnote numbers
+ do not interfere with the main document. For typesetting short verbatim
+ phrases, a replacement for the \verb+\verb+ command is also provided
+ in the package, which can be used inside tables and moving arguments such as
+ footnotes and section titles. The listings package is used for syntax
+ highlighting.
+
+ The article reviews the design decisions
+ made during the package development and also presents some interesting
+ implementation internals. \textsf{examplep} is compared to standard
+ \LaTeX{} packages such as \textsf{listings}, \textsf{ltxdoc},
+ \textsf{sverb} and \textsf{moreverb}. The new \textsf{codep} package and
+ its accomanying \textsf{Perl} script,
+ which provide a convenient interface to the \textsf{examplep} package for
+ authors of manuals, is also presented. With \textsf{codep} it is possible
+ to generate the source code, the \LaTeX{} or \textsf{METAPOST} output and
+ the compilable example file onto the CD from a single source embedded
+ into the appropriate place of the \texttt{.tex} document file.
+%%%WF A CD-re irasnak semmi koze a lenyeghez, sajnos a dolgozat
+%%% hatralevo reszeben is folyton CD-file es egyebekrol szolsz, de
+%%% valojaban csak arrol van szo, hogy kulon file-ba irjuk a
+%%% futtathato kodot (amit aztan a web-re, CD-re, DVD-re... lehet tenni).
+%% -- kellett neki nevet adni, ez lett
+\end{abstract}
+
+
+\section{Terminology}
+
+\begin{description}
+
+\item[verbatim text] A visually distinguishable textual part of the
+ document (usually typeset with a monospaced, or typewriter font) that is
+ allowed to contain the full ASCII character set. Verbatim text is often
+ used to typeset parts of program source files, including \TeX{} source.
+ Verbatim text must be marked up (i.e.\ surrounded)
+ in the source of the \LaTeX{}
+ document, so backslash and other control characters are typeset verbatim
+ instead of being interpreted as commands or special \LaTeX{} characters.
+
+%%%WF a kovetkezo 2 def nem pontos, nem biztos, hogy paragrafusok kozt
+%%% van a kiemelt verbatim. Sorban? vagy sorok kozt van?
+%% -- lehetne még pontosítani, de szerintem ebből rögtön lehet tudni, mire
+%% gondolok
+\item[inline verbatim] A verbatim text passage inside a paragraph
+ or table cell.
+
+\item[display verbatim] is a vertical verbatim text block between
+ paragraphs.
+
+\item[side-by-side display]
+ When typesetting program source in a display verbatim, it is often
+ desirable to show the output of the program as well. This is especially
+ useful when teaching scripting languages, so the reader can see the
+ command and its effect side-by-side in a quick glance. For \TeX{} or
+ \textsf{METAPOST} sources and EPS and PDF source files it is also useful to
+ see the source and the typeset result side-by-side.
+
+\item[Source and Sample]
+ Side-by-side displays can be divided to \emph{Source} and \emph{Sample},
+ the latter being program output or typeset material.
+
+\item[CD-files]
+ Files accompanying a book, usually on a CD or DVD shipped with the book,
+ or avalable for download on the home page of the book. These
+ files usually contain some of the display verbatim material in the book,
+ so readers do not have to retype them.
+
+\end{description}
+
+\section{Special characters in the \LaTeX{} source}
+
+The special meaning of the input characters in the source file must be
+disabled in verbatim mode -- except for the character(s) that delimit the end
+of the verbatim text. The following characters have to be dealt with:
+
+\begin{description}
+
+\item[ASCII symbols] The ligatures have to be disabled, especially \verb+?`+ $\to$
+\texttt{?`} etc. The safest way is to make both characters of such a ligature
+active, and %then
+defining \verb+\def?{\relax\string?\relax}+
+and \verb+\def`{\relax\string`+\allowbreak\verb+\relax}+. \hskip0pt
+minus3.3pt\relax \textsf{examplep} issues similar
+definitions covering all such ligatures in the OT1- and T1-encoded CM fonts.
+
+\item[ASCII letters] Most verbatim fonts don't contain the ``fi'' or similar
+ligatures, so \textsf{examplep} takes no care to disable them.
+
+\item[special \TeX{} source symbols] To disable the special meaning of the symbols
+\verb+\+
+\verb-{-
+\verb-}-
+\verb+$+ %%%$
+\verb+%+
+\verb+^+
+\verb+&+
+\verb+_+,
+\textsf{examplep} redefines their \verb+\catcode+ for display verbatim.
+However, catcode changes are not always appriopriate for inline verbatim,
+so \textsf{examplep} provides \verb+\÷+ (see below) which doesn't change
+catcodes at all.
+
+\item[other ASCII punctuation] Some of these characters (%
+\verb+[+
+\verb+]+
+\verb+;+
+\verb+'+
+\verb+,+
+\verb+.+
+\verb+/+
+\verb+~+
+\verb+!+
+\verb+@+
+\verb+*+
+\verb+(+
+\verb+)+
+\verb-+-
+\verb-|-
+\verb-:-
+\verb-"-
+\verb-<-
+\verb->-
+\verb-?-
+\verb+`+
+\verb+-+
+\verb+=+) may be active, for example, \verb+~+ is ÷\nobreakspace÷,
+\verb+`+ is a Babel shorthand (e.g.\ in the Hungarian language module,
+\textsf{magyar.ldf}); \verb+"+ is a Babel shorthand (e.g\ in the German
+language module); \verb+?+, \verb+!+, \verb+:+ and \verb+;+ are activated
+(e.g.\ by the French language module), and other characters may be activated,
+too. So \textsf{examplep} sets the catcode of all characters in the range
+$33\ldots126$ to other (12). This includes all ASCII punctuation, letter and
+digit characters.
+
+\item[double carets] For example, the letter
+``J'' can be input as its ASCII code in hex,
+prefixed by double carets: \verb+^^4a+. However, in verbatim mode we want the
+4 characters, not the letter {J}. There is no problem in inline verbatim
+mode, because \verb+^+ loses its special meaning once its catcode is changed.
+However, when the verbatim material is written to a file or to the terminal,
+\TeX{} may change ``unprintable'' characters to escapes prefixed by \verb+^^+.
+These changes must be reverted when reading the file back. See Subsection
+\ref{tcx} for more.
+
+\item[high characters] Input characters in the range $128\ldots255$ are
+usually activated by the \textsf{inputenc} package, and they know how to
+typeset themselves -- so \textsf{examplep} leaves the catcode of such
+characters intact. However, in some modes, \textsf{examplep} has already
+changed all catcodes to 12 and 10 (with \verb+\meaning+), so it has to change
+the catcodes of such high codes back to 13 (active).
+
+\end{description}
+
+\section{Features of \textsf{examplep}}
+
+These are the most important, unique features:
+
+\begin{itemize}
+
+\item layout of side-by-side display may depend on maximum Source width
+\item automatic hyphenation of inline verbatim. The text is divided into
+ words and punctuation symbols (based on catcodes). For words, the normal
+ \TeX{} hyphenation patterns apply, and it is allowed to break the line on
+ both sides of a punctuation symbol.
+\item customizable isolation of page, section etc.\ numbers in the Sample
+ and the host document with the \texttt{PexaMiniPage} environment
+\item besides the outer level, inline verbatim (when properly escaped inside
+ \verb+\Q+ or \verb+\÷+) works safely inside macro arguments, section
+ titles, footnotes, table cells and index entries
+\item generated CD-files with automatic page and chapter number
+\item writing verbatim data to CD-files with a \textsf{Perl} script; exact,
+ binary reproduction of verbatim text is guaranteed
+\item ability to write different material to Source, Sample and CD-files
+\item the accents \verb+\H+ and \verb+\.+ work as expected with monospaced
+ fonts in the OT1 encoding. By default, \verb+\texttt{\H o}+ produces
+ \hbox to0pt{\verb+}+\hss}\verb+o+ in OT1 encoding, because such
+ typewriter fonts (such as \textit{cmtt10}) have those accents
+%%%WF repaced
+ replaced
+ by ASCII symbols. \textsf{examplep} solves the problem by getting the
+ accent from the \textit{cmr} font family.
+
+\end{itemize}
+
+\noindent Some other features:
+
+\begin{itemize}
+
+\item side-by-side display of the Source and the Sample
+\item between-word hypenation of inline verbatim
+\item customizable left and right indentation of display verbatim
+\item specifying inline verbatim with nested braces (\verb+\PVerb+,
+ \verb+\Q+) or terminating character (\verb+\PVerb+, \verb+÷+, \verb+\÷+)
+\item automatic line breaks with hyphenation in display verbatim
+\item the discretionary hyphen (\verb+\hyphenchar+) of verbatim text is
+ different from the one in normal text
+\item line numbering in display verbatim
+\item writing to temporary files only if needed
+\item reading back contents of any file in display verbatim
+%\item writing verbatim data to temporary files (\verb+^+\relax\verb+^+ab, .tcx)
+% Dat: not a feature: automatic \textsf{METAPOST} processing, see the \texttt{eempost} package
+\item inline verbatim with a single character ($\div$) and its escaped
+ version (\textbackslash$\div$ and \verb+\Q+)
+\item automatic \verb+\indent+\allowbreak/\allowbreak\verb+\noindent+,
+ based on empty line above \verb+\begin{...}+
+\item ISO Latin accented input character support in all modes (also present
+ in \verb+\verb+)
+\item support for syntax highlighting with the \textsf{listings} package
+ \cite{listings}
+%%%WF a (\cite{...}) kicserelendo \cite{...} -re az EGESZ DOLGOZATBAN,
+%%% nem kell kerek zarojel, ott van mar a szogletes
+%% -- javítva
+\item emits a tab as eight spaces in normal mode, but tabs are supported
+ properly with \texttt{ttlistings=yes} and \texttt{ttlistings=showtabs}
+\item simple side-by-side display emulation without temporary files,
+ using \texttt{src\allowbreak style=leftboth} or \texttt{srcstyle=leftleft}
+
+\end{itemize}
+
+
+\subsection{Escaped mode of inline verbatim locations}\label{escaped}
+
+For compatibility reasons, \textsf{examplep} doesn't change the original
+%%%WF ÷\verb+ and ÷\verb*+
+\verb+\verb+ and \verb+\verb*+
+%%%
+commands in any way, but defines its own commands:
+\verb+\PVerb+, \verb+\PVerbH+, \verb+\PVerbInner+,
+\verb+\PVerbOpt+, \verb+\Q+, \verb+÷+ and \verb+\÷+. Most of the
+\verb+\PVerb+\ldots{}
+commands are historical. For new documents, only the use of
+\verb+\PVerbOpt+, \verb+\Q+, \verb+÷+ and \verb+\÷+ is recommended. Some of
+these commands have to be activated with package load options:
+\verb+\usepackage[Q=yes,div=yes,bsdiv=yes]{examplep}+. The reason why
+\verb+÷+ was introduced is that it is a high Latin-1 (and Latin-2) character
+available on the Hungarian keyboard, which is usually not used in \LaTeX{}
+documents (in fact, \verb+$\div$+ is used instead). Inline verbatim sources
+with such a character are compact, and they can contain all ASCII symbols.
+
+\begin{table}
+\caption{Contexts and features of inline verbatim commands}\label{contexts}
+\vskip\abovecaptionskip
+\small
+\noindent\hfil\begin{tabular}{@{}llllll@{}}\toprule
+ & outer& argument& tablular& elsewhere& escaped \\\midrule
+\verb+\verb+ & + & $-$$^1$ & + & $-$$^1$ & no \\
+\verb+\PVerbOpt+ & + & +$^2$ & + & $-$ & no \\
+\verb+÷+ & + & +$^2$ & $-$ & +$^2$ & no \\
+\verb+\÷+ & + & + & + & + & yes \\
+\verb+\Q+ & + & + & + & + & yes \\
+\bottomrule
+\end{tabular}
+\par\smallskip
+$^1$sometimes displays the proper error message\par
+$^2$inner mode only (spaces compressed or lost, \verb+%+ is comment etc.)
+\end{table}
+
+\textsf{examplep} supports inline verbatim text at the outer level,
+inside macro arguments, in table cells and elsewhere (in section titles, in
+footnotes and in index entries), see also in Table \ref{contexts}.
+The reason why some of these cases are treated differently
+is that catcode changes must be timed correctly so that the proper catcodes
+are active by the time \TeX{} reads the verbatim text from the input file for
+the first time. (Please note that section titles and index entries are also
+written to and read back from auxilary files.)
+
+This is quite hard to accomplish in several cases (because \TeX{}'s mouth
+gathers macro arguments at high speed, a way before \TeX{}'s stomach could
+change the catcodes), so \textsf{examplep} provides the commands \verb+÷+
+and \verb+\Q+, which do not change catcodes at all, so they work everywhere.
+Each special (say, not alphanumeric) character of the source text of these
+commands must be prefixed by a backslash, so \TeX's eyes will see it as a
+controls sequence token. The backslashes are retained when the construct is
+written to auxilary files, but they get removed upon typesetting. Letters,
+when prefixed by a backslash, get special meaning, for example \verb+\V+
+denotes a visible space. For example, The construct
+\verb+\÷\\\}÷+ is seen by \TeX's eyes as
+\verb+\÷+$_{13}$\allowbreak
+\verb+\\+$_{13}$\allowbreak
+\verb+\}+$_{13}$\allowbreak
+\verb+÷+$_{13}$, and its gets typeset as \verb+\}+ (by running the command
+\verb+\÷+). Please note that the construct is properly nested, because all
+braces are inside control sequence names. The same result (\verb+\}+) can be
+achieved with \verb+\Q{\\\}}+. Both constructs are safe, because they can be
+freely moved to anywhere in the source file. However, for compatibility
+reasons, \verb+\Q+ is recommended, because its execution doesn't rely on the
+current catcode of the terminating \verb+÷+ of \verb+\÷+. A more complicated
+example: \verb+``\Q{\\\V X\ }''+ gets typeset as ``\verb*+\ X+\verb+ +''.
+In escaped mode, \verb+\V+ dentoes a visible, unbreakable space,
+\verb+\S+ and \verb*+\ + denote default space (affected by the
+\texttt{pverb-space=} option), \verb+\B+ allows a line break there with a
+discreationary hyphen (affected by the \texttt{pverb-linebreak=} option),
+and \verb+\n+ flushes left and starts a new line.
+
+The \verb+\PVerb+ macros can detect whether they have been invoked from
+within a macro argument. If so, they do not insist on catcode changes, but
+they emit all the tokens that has been seen by \TeX's eyes. (Spaces are
+already compressed now, and everything after \verb+%+
+is ignored etc., so this is not purely verbatim anymore.) However, this works
+only if the macro argument is properly nested with respect to braces, and it
+is delimited by braces (not a terminator character).
+
+Please note that there might be problems with verbatim material in index
+entries processed by \textsf{makeindex} if characters
+\verb+"+, \verb+@+, \verb+!+ and \verb+|+ are not quoted properly with
+\verb+"+. This is a generic \textsf{makeindex} issue. The quoting must be
+applied even inside verbatim material.
+
+\subsection{Horizontal alignment of the Source lines}\label{srcstyle}
+
+The \texttt{verbatim} environment of standard \LaTeX{} reads the whole
+verbatim text into a macro argument, thus limiting the length of the verbatim
+material to the available main memory. This is enough for about 3400
+80-character lines. The \textsf{verbatim}, \textsf{moreverb},
+\textsf{listings} and
+% Dat: moreverb pkg uses verbatim pkg
+\textsf{examplep} packages parse the input line-by-line, so there is no such
+limit. However, with \textsf{examplep}, additional memory is required for
+aligned mode, which limits the maximum number of lines to about 2200
+(32 pages) when the average line width is 80 characters. Please note that
+the maximums mentioned here may be lower if more packages are loaded; in
+another situatian the maximum number of lines was 375. As a reference,
+a plain \verb+\halign+ with all lines having
+\verb+(9999)\hfil\cr+ only could accomodate about 5000 lines when no packages
+were loaded. The
+maximum memory can be increased by increasing the \verb+extra_mem_bot+
+variable in \textsf{texmf.cnf} or in the environment.
+%As a reference measurement.
+%%%WF mi itt ez az utso mondat?
+%% -- tényleg hülyeség, hihúzva
+
+There are two display modes used for display verbatim: paragraph and aligned
+(see the \verb+\pexa@show@pars+ and \verb+\pexa@show@halign+ macros,
+respectively, in the source). Aligned mode is used when multiple columns
+(such as line numbers and text) have to be aligned horizontally. Aligned mode
+uses the \TeX{} \verb+\halign+ primitive to do the alignment, and this
+primitive reads the whole construct into memory before typesetting it (in
+order to be able to calculate the column widths). The other one,
+paragraph mode, is used when
+horizontal alignment is not needed and side-by-side display is not used. In
+paragraph mode, each line is typeset as a seperate paragraph, so the length
+of the verbatim text is only limited by the available disk space to hold the
+resulting DVI file. \textsf{examplep} chooses the mode automatically: for
+side-by-side display it always chooses aligned mode (so it can measure the
+width of the Source before typesetting it), otherwise, if the
+\texttt{srcstyle=} makes it possible, it chooses paragraph mode, otherwise
+it chooses aligned mode. See Figure \ref{fig:srcstyle} for details about
+Source styles.
+
+\begin{figure}\small
+{\relax\normalsize \parindent1em
+ \advance\leftskip\parindent %\advance\rightskip\parindent % Dat: automatic for \hsize
+ \advance\hsize-2\parindent
+ \parindent0pt
+\texttt{srcstyle=left} \emph{PAF}\par
+\leavevmode\hbox to0pt{\hss\scriptsize9}\texttt{srcstyle=leftnumhang} \emph{PAF}\par
+{\scriptsize9}\texttt{srcstyle=leftnum} \emph{PAF}\par
+\leavevmode{\scriptsize\phantom99}\texttt{srcstyle=leftnumcol} \emph{AF} when the last page number has 2 digits\par
+\hfil\texttt{srcstyle=center} \emph{PAF}\par
+\hfill\texttt{srcstyle=right} \emph{PAF}\par
+\texttt{srcstyle=paralign}\hfill\emph{PF}\hfill with\hfill \texttt{source-par-align=justjust}\par
+\strut\texttt{srcstyle=leftboth}\ \vrule\ srcstyle=leftboth \emph{A}\par
+\leavevmode{\scriptsize\phantom99}\strut\texttt{srcstyle=leftbothnumcol}\ \vrule\ srcstyle=leftbothnumcol \emph{A}\par
+\strut\texttt{srcstyle=leftleft}\ \vrule\ anything \emph{A}\par
+%%%WF eleg zavaros egy tablazat, es harom sorban a | utani dolgok is
+%%% erthetetlenek
+%% -- mivel nincs jobb ötletem, marad ez
+% Imp: boxed?
+}
+\medskip
+\emph{P:} works in paragraph mode\\
+\emph{A:} works in aligned mode\\
+\emph{F:} works when Source is read back from file
+\caption{The effect of the \texttt{srcstyle=} option}\label{fig:srcstyle}
+\end{figure}
+
+Please note that the Source styles \texttt{leftboth} and
+\texttt{leftbothnumcol} display each line twice, as Source and as Sample,
+too. This is different from regular side-by-side display, because lines of
+the Source and Sample here are forcibly aligned, and this solution doesn't
+use a temporary file. The source style \texttt{leftleft} is similar, but it
+lefts the author specify different Source and Sample for the same line (they
+should be separated by \verb+&+ in the source).
+
+
+\subsection{Display verbatim isolation}\label{pexaminipage}
+
+The \texttt{PexaMinipage} environment is provided, which is similar to the
+%%%WF bulilt-in
+built-in
+%%%
+\texttt{minipage} environment, but provides better isolation of the
+Sample from the container document, because it saves and restores section,
+page, equiation (etc.) numbers and also marks (section titles in
+page headers).
+Labels (for \verb+\label+, \verb+\ref+ etc.) are not isolated, because many
+packages use them in a non-standard way.
+See Figure \ref{fig:pexaminipage} for an example.
+
+\begin{figure}\small
+\noindent\hfil\hbox to0pt{\hss\includegraphics{pexaminipage}\hss}
+\caption{Display verbatim isolation with the \texttt{PexaMinipage} environment}%
+\label{fig:pexaminipage}
+\end{figure}
+
+The environment also
+cancels vertical skips (including \verb+\belowdisplayskip+) at the bottom
+of its contents. For space conservation, \verb+\abovedisplayskip+ above the
+very first displayed equation is also canceled. To vaid this, put
+\verb+\everydisplay{}+ before the formula. The environment starts with
+\verb+\noindent+, but subsequent paragraphs are indented.
+
+
+\subsection{Feature comparison}
+
+Although there are several \LaTeX{} packages providing display and/or inline
+verbatim environments for \LaTeX{}, \textsf{examplep} has some important
+unique features not found in other packages (see the beginning of this
+section for details). The author has tried the following packages before
+deciding to write \textsf{examplep}:
+
+\begin{description}
+
+\item[\normalfont\textsf{verbatim}]
+ Although the \texttt{verbatim} environment is built-in into \LaTeX{}, its
+ most important limitation is that it eats up \TeX{} memory when typesetting
+ very long verbatim material (of several hundred or thousand lines). The
+ \textsf{verbatim} package fixes this, and provides the
+ \verb+\verbatiminput+ command (similar to the \verb+\PexaShowSource+
+ command of \textsf{examplep}) and the \texttt{comment} environment (similar
+ to \texttt{PIgnore} in \textsf{examplep}).
+
+\item[\normalfont\textsf{moreverb}]
+ This package extends the \textsf{verbatim} package with additional
+ features: proper handling of tabulators (also accessible from
+ \textsf{examplep} with the \textsf{listings} interface), line numbering
+ (also available in \textsf{examplep} with much more customization),
+ verbatim surrounded by a frame (this is not available in \textsf{examplep},
+ but it works with \textsf{listings}, with page breaks allowed), the
+ \texttt{verbatimwrite} environment writes its contents to a file (similar
+ to the \texttt{WFile} environment in \textsf{examplep}).
+
+\item[\normalfont\textsf{sverb}]
+ It provides display verbatim with tabulators and long environments, and it
+ can read and write text from files. It also has a side-by-side environment
+ (\texttt{demo}) with fancy frames.
+ The \textsf{verbfwr} package (part of the \textsf{examplep} distribution)
+ was derived from parts of this package.
+
+\item[\normalfont\textsf{syntax}]
+ This package is written by the author of \textsf{sverb}. It provides
+ generic and customizable inline verbatim support and it also has powerful
+ features to typeset BNF-like grammars and syntax diagrams. It is documented
+ that no attempt is made to make the constructs work inside macro arguments
+ or section titles.
+
+\item[\normalfont\textsf{alltt}]
+ This standard \LaTeX{} package defines the \texttt{alltt} environment in
+ which the characters \verb+\ { }+ retain their original meaning, so it is
+ possible to do some manual formatting in the verbatim text.
+
+\item[\normalfont\textsf{fancyvrb}] \cite{fancyvrb}
+ This is extremely configurable verbatim package provides inline
+ verbatim even in footnotes, display verbatim even with side-by-side, line
+ numbers on any side, all
+ kinds of francy frames even with page breaks, text formatting and
+ writing and reading from files; and very long diplay verbatim text.
+ Options can be specified any time within the argument of the \verb+\fvset+
+ command. The original \texttt{verbatim} environment is not modified,
+ but a new one, \texttt{Verbatim} is defined. Setting the background color
+ is not possible.
+
+ This package is not actively developed. Version 2.7 (dated
+ 2000/03/21) is part of te\TeX{}. Oddly enough, the newest version on CTAN
+ is 2.6, which a file timestamp in 2004, but it dated 1998/07/17).
+
+\item[\normalfont\textsf{fvrb-ex}]
+ This package is part of the \textsf{fancyvrb} distribution and uses the
+ \textsf{fancyvrb} package. It provides a
+ side-by-side display verbatim environment (\texttt{SideBy\allowbreak SideExample}). A
+ page break is not allowed in the Source after the Sample. % Dat: tested
+ The \texttt{xrightmargin} option has to be specified manually (e.g.\,%
+ \texttt{xrightmargin\allowbreak=3cm}. The first two
+ characters of each line in the environment are ignored.
+
+\item[\normalfont\textsf{ltxdoc}]
+ The most important features of \textsf{examplep} inspired by the \LaTeX{}
+ documentation package are display verbatim line numbering with
+ \texttt{srcstyle=left\allowbreak num} and inline verbatim started with \verb+÷+.
+ The \textsf{ltxdoc} package typesets everything between two \verb+|+
+ characters as inline verbatim. This is not supported by \textsf{examplep}
+ to avoid making an ASCII character active.
+
+\item[\normalfont\textsf{listings}] \cite{listings}
+ The most important layout elements of this sophisticated, highly
+ customizable, actively developed package missing from
+ \textsf{examplep} are: background color, frames (with page breaks allowed),
+ syntax highlighting and proper tabulator support. Except for the background
+ color and frames, these features can be used from \textsf{examplep} with
+ its interface to \textsf{listings}, see in Subsection \ref{listings}.
+ Use \verb+\lstset{columns=fullflexible,lang+\allowbreak\verb+uage=C,back+\allowbreak\verb+groundcolor=\color{red},frame=trBL}+
+ to try these features. \textsf{listings} also provides inline verbatim
+ mode (with syntax highlighting), in the character-delimited argument of the
+ command \verb+\lstinline+;\,unfortunately, spaces at line breaks (with
+ option \texttt{breaklines}) are rendered in an inconsistent way, and line
+ breaks do not work well with background color.
+
+ \textsf{listings} has an important weak point: it cannot typeset ISO Latin
+ accented characters with the \textsf{inputenc} package;
+ the way described in the manual doesn't work as expected: it puts the
+ accented characters to the wrong place in the line. This problem,
+ however, is solved when \textsf{listings} is invoked from
+ \textsf{examplep}. See more about listings in Subsection \ref{listings}.
+
+%%%WF This package is actively developed.
+%%% ezt mar emlitetted a bekezdes elejen
+\end{description}
+
+\section{Customization}\label{customization}
+
+The operation of \textsf{examplep} can be customized with options as
+$\langle$key$\rangle${}$=${}$\langle$value$\rangle$ pairs. Global options, which affect all subsequent commands within
+the current block, can be specified as package load options
+(\verb+\usepackage[+\ldots\verb+]{examplep}+) or as argument of the \verb+\PexaDefaults+
+command. \LaTeX{} doesn't allow complicated option values (such as values
+containing some expandable macros, for example after \texttt{linenumberformat=})
+to be specified in the \verb+\usepackage+
+line -- use \verb+\PexaDefaults+ in such cases.
+Many commands and environment accept local options, which affect
+only that construct.
+
+All options have default values, which are indicated below right after the
+option name. If the option has a fixed set of possible values, all of them
+are mentioned, and they are prefixed by \texttt{=}. The defaults have been
+chosen so the \texttt{PSource} environment matches the builtin
+\texttt{verbatim} environment as closely as possible. Note that the original
+environment is not overridden before the \texttt{verbatimenv=yes} is
+specified.
+
+\begin{description}
+\makeatletter % Dat: for \verbatizee{\z@}
+
+\item[\verbatizee{Q=unchanged}]
+ To enable \verb+\Q+, use \texttt{=yes} instead of the default.
+\item[\verbatizee{abreak=unchanged}]
+ To enable \verb+\abreak+, use \texttt{=yes} instead of the default.
+\item[\verbatizee{addvspace-bottom={\vskip\z@skip\addvspace}}]
+ \hskip0pt plus4pt
+ Specifies the command to add vertical space below display verbantim. The default works
+ fine, but e.g.\ packages maintaining the baseline grid might want to
+ change it.
+\item[\verbatizee{addvspace-top=\addvspace}]
+ Command to add vertical space above display verbantim. The default works
+ fine, but for example, packages maintaining the baseline grid might want to
+ change it.
+\item[\verbatizee{allowbreak=yes}]
+ Use \texttt{=no} to disable page breaks in the Source of display verbatim.
+\item[\verbatizee{allowshrink=yes}]
+ The default will shrink the Sample horizontally if the
+ Source is too wide. Use \texttt{=no} to disable this.
+ Use \texttt{=force} to enable shrinking of Source, and with
+ \texttt{srcstyle=leftleft} or \texttt{srcstyle=leftboth}, also enable
+ shrinking of the Source if it is narrow.
+\item[\verbatizee{baseline-grid=no}]
+ Use \texttt{=yes} to adjust the height of the Sample to be an integer
+ multiply of \verb+\baselineskip+ (with \texttt{yalign=u} and
+ \texttt{yalign=v}).
+\item[\verbatizee{boxstyle=p}] Controls how the Sample is boxed. Capital
+ letters are not allowed for side-by-side display. By default (\texttt{=p}),
+ a \texttt{PexaMinipage} environment is put inside a \verb+\vtop+. Use
+ \texttt{=h} to put a \verb+\hbox+ only, \texttt{=v} to put a \verb+\vtop+
+ only, \texttt{=V} to put a \verb+\vbox+ only,
+ \texttt{=m} to put a \texttt{minipage} environment inside a \verb+\vtop+,
+ \texttt{=M} to put a \texttt{minipage} environment inside a \verb+\vbox+,
+ \texttt{=P} to put a \texttt{PexaMinipage} environment inside a \verb+\vbox+,
+ \texttt{=G} to add \verb+\begingroup+ and \verb+\endgroup+ only.
+ The default is recommended for most cases, because the \verb+\vtop+
+ provides proper alignment with the Source, and the \texttt{PexaMinipage}
+ environment provides isolation (of page and section numbers etc.) from the
+ main document.
+\item[\verbatizee{bsdiv=unchanged}]
+ To enable \verb+\÷+, use \texttt{=yes} instead of the default.
+\item[\verbatizee{div=unchanged}]
+ To enable \verb+÷+, use \texttt{=yes} instead of the default.
+\item[\verbatizee{firstlinenum=1}]
+ Specifies the number of the first line of a numbered Source listing.
+ Useful with \texttt{srcstyle=leftnumcol} and \texttt{srcstyle=leftnumhang}.
+\item[\verbatizee{linenumberformat={{...}}}]
+ %\item[\verbatizee{linenumberformat={{\normalfont\rmfamily\scriptsize\number-\pexa@@cntb}\pexa@default@linenumbersep}}]
+ Commands to display a line number and the separator in a numbered Source
+ listing. See the default value in \texttt{examplep.sty}.
+\item[\verbatizee{linenumbersep={}}]
+ Commands to display the separator in a numbered Source listing.
+\item[\verbatizee{listings=no}]
+ Use \texttt{=yes} to display each Source line with the \textsf{listings}
+ package. Specify options (to be executed in \verb+\lstset+), separated by
+ commas in the argument. Read more about the options in the documentation of
+ the \textsf{listings} package. For example, \verb+listings=yes+ and
+ \verb+listings={}+ uses \textsf{listings} with default options (no syntax
+ highlighting), and \verb+listings={language=+\allowbreak\verb+C,showtabs}+ enables syntax
+ highlighting for C language and enables visible tabulators. See
+ Subsection \ref{listings} for more information.
+\item[\verbatizee{listings-verbatimfont=pexavf}]
+ Set the font to be used in the Source when \texttt{listings=} is active. See
+ \texttt{source-verbatimfont=} for the possible values.
+\item[\verbatizee{mp-equation-reset=yes}]
+ Use \texttt{=no} to make the main document and the Samples inside
+ \texttt{PexaMinipage} share the same equation counter.
+\item[\verbatizee{mp-varioref-reset=no}]
+ Use \texttt{=yes} to make the internal counter \texttt{vrcnt} of the
+ \textsf{varioref} package to be reset for each Sample inside
+ \texttt{PexaMinipage}. This option doesn't affect the final output, and
+ \textsf{varioref} expects this counter not to be reset, so it is not
+ recommended to change the default.
+\item[\texttt{noligs=some}]
+ By default, only those ligatures are disabled whose second character is one
+ of \verb+`+ \verb+'+ \verb+,+ \verb+-+ \verb+<+ \verb+>+. Use
+ \texttt{=kernel} to get the same effect, but using the \LaTeX{} built-in
+ \verb+\@noligs+. Use \verb+=most+ to get all ligatures with either the
+ first or the second character having code between 32 and 127 and catcode
+ 12. Please note that ligatures in inline verbatim mode are disabled anyway,
+ because \verb+\allowbreak+ is inserted between characters of catcode 12,
+ depending on the value of \texttt{pverb-linebreak=}.
+\item[\verbatizee{pexaminipage-setuphook={}}]
+ Extra commands to run when starting the \texttt{Pexa\allowbreak MiniPage} environment,
+ just after the environment has finished its own initialization.
+\item[\verbatizee{pverb-hash=full}]
+ Use \texttt{=half} to make \verb+\PVerb+ convert \verb+##+ to \verb+#+.
+ The command \verb+\PVerbH+ is the same as \verb+\PVerb+ but
+ forces \texttt{=half}. This is required when \verb+\PVerb+ or \verb+÷+ is
+ used inside a macro argument. For example, \verb+\textit{÷#÷}+ yields
+ the error message \textit{Illegal parameter number in definition of
+ \string\reserved@a}, but \verb+\textit{\PVerbH{##}}+ works fine. The error
+ message is a general \LaTeX{} kernel limitation, for example
+ \verb+\textit{\@gobb+\allowbreak\verb+le{#}}+ doesn't work either.
+\item[\verbatizee{pverb-hyphenchar=hyphen}]
+ By default, the minus character (ASCII code 45) is used to for automatic word
+ hyphenation in inline verbatim. Use \texttt{=char'30} to have character
+ with code 24; see also Subsection \ref{char'30}. Use \texttt{=none} to
+ disable word hyphenation (by setting \verb+\hyphenchar+ to $-1$).
+ Use \texttt{=unchanged} to get the hyphenchar from
+ the font (the \textit{cmtt} and \texttt{ectt} fonts have word hyphenation
+ disabled). Please note that hyphenation around symbols is affected
+ the \texttt{pverb-linebreak=} option, not this one.
+\item[\verbatizee{pverb-leftbreakmin=2}]
+ Specifies the minimum number of characters in inline verbatim after which it
+ is allowed to break the line (with \texttt{pverb-linebreak\allowbreak=}). Values
+ allowed are $0$, $1$ and $2$, but $0$ usually doesn't make sense.
+\item[\verbatizee{pverb-linebreak=char}]
+ By default, \verb+\PexaAllowBreak+ is inserted around symbols in inline
+ verbatim, so a line break (with a discreationary hyphen affected by
+ \texttt{pverb-linebreakchar=}) is allowed there. Use \texttt{=yes} to insert
+ \verb+\allowbreak+ instead, which allows a line break without
+ discretionaries. Use \texttt{=no} to disable line breaks around symbols in
+ inline verbatim. The option \texttt{pverb-hyphenchar=} affects
+ intra-word hyphenation in inline verbatim, not this one.
+\item[\verbatizee{pverb-linebreakchar={$\lnot$}}]
+ Specifies the discreationary hyphen to be used in \verb+\PexaAllowBreak+.
+ See also \texttt{pverb-linebreak=}.
+\item[\verbatizee{pverb-space=invbreak}]
+ By default, spaces in inline verbatim are invisible, variable width (as
+ allowed by the font, see also \texttt{pverb-stretchshrink=})
+ and breakable (i.e.\ a space can be replaced by a line
+ break if necessary). Use \texttt{=invdisc} to get an invisible, variable
+ width space which becomes visible (\verb*+ +) when it is broken at the end
+ of the line. Use \texttt{=invfixbreak} to get an invisible, fixed width and
+ breakable space. Use \texttt{=invnobreak} to get an visible, variable width
+ and unbreakable space. Use \texttt{=visnobreak} to get a visible, fixed
+ width and unbreakable space. Use \texttt{=visbreak} to get a visible, fixed
+ width space with line breaks allowed on both sides. Use
+ \texttt{=invbreakleft} to get a visible, variable width space with infinite
+ stretchablility if the line is broken there (this may have strange effect
+ on other line breaks in the paragraph, so please try to avoid it).
+ The built-in \verb+\verb*+ command uses
+ \texttt{source-space=visnobreak}.
+\item[\verbatizee{pverb-stretchshrink=yes}]
+ By default, spaces in inline verbatim are forced to be stretchable and
+ shrinkable (by \verb+\quad+${}/9$). Use \texttt{=no} to disable
+ stretchability and shrinkability. Use \texttt{=unchanged} to keep the
+ settings in the font. Note that \verb+\fontdimen+$3$ and
+ \verb+\fontdimen+$4$ are changed by this option, and the changes are local
+ to inline verbatim mode.
+\item[\verbatizee{pverb-verbatimfont=pexavf}]
+ Set the font to be used in inline verbatim mode. See
+ \texttt{source-verbatimfont=} for the possible values.
+\item[\verbatizee{samplewidth=.5\PexaWidth}]
+ Specifies the maximum width of the Sample in side-by-side display as a
+ \TeX{} dimension. The actual Sample can become actually narrower (see
+ \texttt{allowshrink=}. The dimensions \verb+\hsize+, \verb+\linewidth+ and
+ \verb+\PexaWidth+ can be used. (Our \LaTeX{} book used
+ \verb+sample+\allowbreak\verb+width=.45\PexaWidth+.) \verb+\leftskip+ and \verb+\rightskip+
+ do not affect this option. \verb+\hsize+ can be used, which is the total
+ width available (including the extra margins added by surrounding list
+ environments), \verb+\linewidth+ is \verb+\hsize+ widtout the extra margins
+ produced by lists, and \verb+\PexaWidth+ is the total width of the Source,
+ the separator (see \texttt{vrule=}) and the Sample.
+\item[\verbatizee{source-par-align=left}]
+ Specifies the alignment of Source lines when \texttt{srcsty\allowbreak le=paralign} is
+ active. Use \texttt{=left} (default), \texttt{=right} or \texttt{=center} to
+ specified flush-left, flush-right or centered alignment, respectively. Use
+ \texttt{=justi\allowbreak fy} to have the last line flush-left and the previous line
+ justified (please note that each Source line is mapped to a single
+ paragraph, so the paragraph will have more than 1 line only if the source
+ line is too long). Use \texttt{=justjust} to have all lines justified.
+ Use \texttt{=unchanged} to keep the alignment of the enclosing block.
+\item[\verbatizee{source-sepwidth=\tabcolsep}]
+ Specifies the horizontal distance between the Source and the Sample.
+ See also \texttt{vrule=}.
+\item[\verbatizee{source-space=invfixbreak}]
+ Specifies how to typeset spaces of the Source. See \texttt{pverb-space=}
+ for the possible values. The built-in \texttt{verbatim*} environment uses
+ \texttt{source-space=visnobreak}.
+\item[\verbatizee{source-verbatimfont=pexavf}]
+ Sets the font to be used for the Source when \texttt{listings=} is not
+ active (see also \texttt{listings-verbatimfont=} for
+ \texttt{listings\allowbreak=}).
+ Give
+ \texttt{=ttfamily} to use \verb+\ttfamily+,
+ \texttt{=pexavf} to use \verb+\pexa@@verbatim+\allowbreak\verb+font+ (which defaults to
+ \verb+\verbatim@font+),
+ \texttt{=latexvf} to use \verb+\verbatim@+\allowbreak\verb+font+ (which defaults to \verb+\normalfont\ttfamily+),
+ \texttt{=unchanged} to keep the current font,
+ or \texttt{=normalfont} to use \verb+\normalfont+.
+\item[\verbatizee{srcstyle=left}]
+ Specifies the horizontal alignment of the Source lines. See more in
+ Subsection \ref{srcstyle} and Figure \ref{fig:srcstyle}.
+\item[\verbatizee{ttlistings=}\normalfont\ (no default)] % Dat: $\varnothing$
+ Shorthand of \texttt{listings-verbatimfont=ttfamily,\allowbreak listings=}.
+\item[\verbatizee{url=unchanged}]
+ To enable \verb+\url+, use \texttt{=yes} instead of the default. The
+ \verb+\url+ will be defined as \verb+\def\url{\PVerbOpt{}}+. This has the
+ disadvantage that inside \verb+\textit+ etc.\ it cannot typeset URLs having
+ a single \verb+#+ (see \texttt{pverb-hash=} for more), but the \textsf{url}
+ package has the same limitation. A quick fix: use \verb+\itshape+ instead
+ of \verb+\textit+ etc.
+\item[\verbatizee{usewidth=skipwidth}]
+ Specifies which horizontal part of the main text should be used in a
+ display verbatim. By default, left and right margins introduced by list
+ environments (such as \texttt{itemize}) and \verb+\leftskip+ and
+ \verb+\rightskip+ are respected. Use \texttt{=linewidth} to ignore
+ \verb+\leftskip+ and \verb+\rightskip+ but respect list environments. Use
+ \texttt{=hsize} to use the whole width of main text. Note that this option
+ affects the calculation of \verb+\PexaWidth+.
+\item[\verbatizee{vextrabotdepth=\z@}]
+ Dimension to add to the depth of the display verbatim with
+ \texttt{yalign=v}. The default works
+ fine, but for example, packages maintaining the baseline grid might want to
+ change it for each instance.
+\item[\verbatizee{vextravskip=\z@}]
+ Amount of vertical space to be added above display verbantim with
+ \texttt{yalign=v}. The default works
+ fine, but for example, packages maintaining the baseline grid might want to
+ change it for each instance.
+\item[\verbatizee{vsmallht=1pt}]
+ Specifies Sample height threshold for \texttt{yalign=v}. If the Sample is
+ lower than this (or sample a higher than the 1st line of the Source plus
+ \verb+\vextravskip+ --
+ typical for \verb+\includegraphics+), its top will be aligned to the top of
+ the Source, otherwise
+ its top baseline (with \verb+\vtop+) will be aligned to the top baseline of
+ the Source.
+\item[\verbatizee{xalign=l}]
+ Specifies horizontal alignment (\texttt{=l} for left, \texttt{=r} for
+ right) of the Sample box (and the separator) within its allocated width for
+ side-by-side display. Please note that \texttt{=r} works only
+ with \texttt{boxstyle=h}, because all other box sizes use their
+ full allocated width.
+\item[\verbatizee{xindent=deeppre}]
+ Specifies additional horizontal indentation in display verbatim mode. Use
+%%%WF \texttt{=nonoe}
+ \texttt{=none}
+%%%
+ to get no extra indentation. Use \texttt{=narrower} to get
+ \verb+\narrower+ (both \verb+\leftskip+ and \verb+\rightskip+ are decreased
+ by \verb+\parindent+).
+ Use \texttt{=deeper} to move one level deeper in the list environment
+ hierarchy and get that indentation.
+%%%WF na most akkor mi a default? a deeper vagy a deeppre?
+ Use \texttt{=deeppre} (default) to move one level deeper, but don't change
+ indentation (this is useful with \texttt{yindent=deeper} --
+ otherwise it is equivalent to \texttt{=none}). % Dat: really??
+ Use \texttt{=deepright} to set both left and right indentation from
+ the left indentation of \texttt{=deeper}.
+\item[\verbatizee{yalign=u}]
+ Specifies vertical alignment in side-by-side display. By default, the top
+ of the bounding boxes of the Source and the Sample is aligned, which looks
+ nice if the Sample is an image, but doesn't align properly if the Sample is
+ text with a font of similar size to the Source. Use \texttt{=b} to align
+ the topmost baselines of the Sample and the Source. This looks nice if the
+ Sample is text, but it is ugly if the Sample is an image higher than
+ \verb+\baselineskip+. The use of \texttt{=v} is recommended, which decides
+ between \texttt{=b} and \texttt{=u} based on the height of the Sample (see
+ \texttt{vsmallht=} for the details).
+\item[\verbatizee{yindent=deeper}]
+ Specifies the vertical space separating display verbatim from the
+ surrounding text. Use \texttt{=none} no have no extra vertical space, the
+ display verbatim appears to be a new paragraph as far as
+ \verb+\baselineskip+ and \verb+\vskip+s are concerned. Use \texttt{=deeper}
+ (default) to move one level deeper in the list environment hierarchy
+ (and use the \verb+\parsep+ and \verb+\partopsep+ etc.\ specified there).
+ It is recommended to have \texttt{yindent=deeper} and
+ \texttt{xindent=deeppre} together, so there is no extra horizontal
+ indentation.
+\item[\verbatizee{verbatimenv=unchanged}]
+ Use \texttt{=yes}
+ to change the implementation of the \texttt{verba\allowbreak tim} and \texttt{verbatim*}
+ environments to use the \texttt{PSource} environment.
+\item[\verbatizee{vrule=rule}]
+ By default, the Source and the Sample are separated with a vertical rule
+ of width \verb+\arrayrulewidth+ in the middle of a horizontal space
+ specified by \texttt{source-sepwidth=}. Use \texttt{=skip} to omit the rule
+ but keep the space. Use \texttt{=none} to have no separator at all.
+
+\end{description}
+
+The other packages (\textsf{codep} and \textsf{verbfwr}) shipped with
+\textsf{examplep} do not have load options.
+
+
+\subsection{Interface to the \textsf{listings} package}\label{listings}
+
+The \textsf{listings} package \cite{listings} provides advanced typographic for display
+verbatim, including proper typesetting of tabulators and syntax highlighting
+for more than a hundred languages. \textsf{examplep} doesn't try to
+reimplement these features, but it supports calling the \textsf{listings}
+package to typeset the Source lines in display verbatim. The surroundings
+(line numbers, vertical separation, horizontal margins and the Sample) are
+not effected, only the Source line contents are passed to \textsf{listings}.
+This implies that the border and the background color support provided by the
+\textsf{listings} package doesn't work with \textsf{examplep}. To use the
+interface, the \textsf{listings} package must be loaded, and either the
+\textsf{listings=} or the \textsf{ttlistings=} options of \textsf{examplep}
+has to be active when the Source is typeset. Additional options
+can be specified to \textsf{listings} in the argument of \verb+\lstset+ at
+any time. The interface has been tested
+with the \textsf{listings} package dated 2000/08/23 and 2004/09/07.
+
+\textsf{examplep} treats tabulators (ASCII code 9) as 8 spaces. This is
+acceptable at the beginning of the line, but it may be incorrect elsewhere.
+To get tabs right, specify the \verb+ttlistings=yes+, or, to be more precise,
+the \verb+ttlistings={tabsize+\allowbreak\verb+=8}+ option to \textsf{examplep}. It is also
+possible to have visible tabulators: specify, for example,
+\verb+ttlistings={tabsize=8,showtabs}+. In our tests \textsf{listings} failed
+to detect the width of a character of a fixed width font, so
+\textsf{examplep} enforces character width using the natural width of the
+space each time it calls \textsf{listings}. This workaround made the
+\texttt{showtabs} \textsf{listings} option work properly.
+See the documentation of the
+\textsf{listings} package for options that affect the typesetting of
+Source line contents. See an example of using \textsf{listings} from
+\textsf{examplep} on page \pageref{pag:use-listings}.
+
+\textsf{listings} supports fixed width characters with a variable with fonts.
+However, this support seems to be broken when used with \textsf{examplep}, so
+the \texttt{columns=full\allowbreak flexible} \textsf{listings} option is enforced so
+proportional fonts will look proportional. Although the
+\textsf{listings} package claims that it has accented letter support, this
+didn't work well with the single-character accented letters input using
+the \textsf{inputenc} package (those characters were positioned to a wrong
+place inside the line, possibly because \textsf{listings} has failed to
+recognise that \verb+\lst@UseLostSpace\lst@+\allowbreak\verb+PrintToken+ has to be inserted
+in front of the accented character into its internal token list).
+\textsf{examplep} contains a work-around to this problem, with the following
+limitations: multibyte input encodings such as UTF-8 are not supported (will
+print strange error message); accented characters may not be part of keyword
+names in syntax highlighting; accented characters are shown as \verb+^^+ hex
+escapes in aligned mode (see in Subsection \ref{srcstyle}), so they don't
+work with \verb+\PexaShowBoth+.
+
+\textsf{listings}, when called from \textsf{examplep}, failed to break
+ligatures such as \verb+`?+ and \verb+<<+. This has the side effect that
+guillemots would be typeset instead of bitwise right shift in C language
+sources. \textsf{examplep} modifies
+the \verb+\lst@FillOutputBox@+ macro so it will add a \verb+\relax+ between
+each character displayed -- so all ligatures are broken. (This approach is
+quite differrent from the way \LaTeX{} disables a few ligatures
+with \verb+\@noligs+; \verb+\pexa@noligs+ is similar to \verb+\@noligs+ in
+this respect.)
+
+It is possible to customize the \textsf{listings} package so it typesets some
+strings differently. For example, with the
+\verb+literate={<=}{{$\leq$}}1+ \textsf{listings} option, all occurences of
+\verb+<=+ (even those inside strings of the target programming language)
+are typeset as $\leq$. There are no problems when using this feature from
+within \textsf{examplep}. It is also possible for strings and comments in the
+syntax-highlighted Source to span multiple lines -- \textsf{listings} takes
+care to remember its internal state between lines.
+
+
+\section{Commands and environments}
+
+The arguments between brackets (\verb+[+ and \verb+]+) are optional: either
+the the argument and the brackets are all missing all all present. The
+arguments named ``options'' is a comma-separated list of local customization
+options, defined in Section \ref{customization}. The \texttt{\{}$^+$ notation
+in front of an argument means that the argument can be delimited by braces
+(thus it must be properly nested), or with any symbol in
+\verb+\dospecials+ (%
+\verb+\+ \verb+$+ \verb+&+ \verb+#+ \verb+^+ \verb+_+ \verb+%+
+\verb+~+) %%%WF $
+or in \verb+\pexa@cverb@donormals+ (%
+\verb+`+ \verb+!+ \verb+@+ \verb+*+ \verb+-+ \verb-+- \verb+=+ \verb+|+
+\verb+:+ \verb+;+ \verb+'+ \verb+"+ \verb+,+ \verb+.+ \verb+/+ \verb+?+
+\verb+<+ \verb+>+ \verb+(+ \verb+)+ \verb+[+ \verb+]+).
+
+\begin{description}
+
+\def\cearg #1{{\normalfont\texttt{\{}$\langle $\relax#1\relax$\rangle$\texttt{\}}}}
+\def\verarg#1{{\normalfont\texttt{\{}$^+\langle$\relax#1\relax$\rangle$\texttt{\}}}}
+\def\delarg#1{{\normalfont $\langle $\relax#1\relax$\rangle $}}
+\def\optarg#1{{\normalfont[$\langle$\relax#1\relax$\rangle$]}}
+
+\item[\verbatizee{\PVerb}\optarg{options}\verarg{verbatimtext}]
+ Typesets its argument in inline verbatim mode. Similar to the \LaTeX{}
+ \verb+\verb+ macro, but respects the options. The use of \verb+[]+ is
+ recommended instead of omitting the options altogether, because \verb+[]+
+ will ensure that the proper catcode changes are in effect even for the
+ first verbatim character.
+ This command is robust.
+\item[\verbatizee{\PVerbH}\verarg{verbatimtext}]
+ Shorthand for \verb+\PVerb[pverb-hash=half]+\ \hskip0pt plus2pt
+ (extra options cannot be specified).
+ This command is robust.
+\item[\verbatizee{\PVerbInner\PVerb}\ldots]
+ Forces the \verb+\PVerb+\ldots{} command immediately following it to work
+ in inner mode, thus compressing spaces, respecting comment characters etc.
+ Because of how \TeX{} works, it is impossible to go the other way round,
+ and force outer mode, because it is too late change catcodes -- the
+ argument has already been tokenized in inner mode.
+ This command is robust.
+\item[\verbatizee{\PVerbOpt}\cearg{options}\verarg{verbatimtext}]
+ Equivalent to \verb+\PVerb+, but uses a different syntax.
+ For example, \verb+\item[\PVerb[pverb-space=visbreak]{xy+\allowbreak\verb+}]+ doesn't work
+ because of the nested \verb+[+. Use this instead:
+ \verb+\item[\PVerb+\allowbreak\verb+Opt{pverb-space=+\allowbreak\verb+visbreak}{xy}]+,
+ \hskip0pt plus4pt or \hskip0pt plus4pt
+ \verb+\item[{\PVerb[pverb-space=+\allowbreak\verb+visbreak]{xy}}]+.
+ This command is robust.
+\item[\verbatizee{\Q}\cearg{verbatimtext}]
+ Similar to \verb+\PVerb+, but its argument must be escaped
+ (see in Subsection \ref{escaped}), and it can be used in section titles etc.
+ Must be enabled with \texttt{Q=yes}.
+ This command is robust.
+\item[$\div$\delarg{verbatimtext}$\div$]
+ Similar to \verb+\PVerb+, but it can be used in section titles etc. (but not
+ int \texttt{tabular}) (see in Subsection \ref{escaped}).
+ Must be enabled with \texttt{div=yes}.
+ This command is robust.
+\item[\textbackslash$\div$\delarg{verbatimtext}$\div$]
+ Equivalent to \verb+\Q+, but the argument delimiter is different.
+ Similar to \verb+\PVerb+, but its argument must be escaped
+ (see in Subsection \ref{escaped}), and it can be used in section titles etc.
+ Must be enabled with \texttt{bsdiv=yes}.
+ This command is robust.
+\item[\verbatizee{\url}\cearg{url}]
+ Must be enabled with \texttt{url=yes}.
+ This command is robust.
+%%%WF az eleme jelet NE HASZNALD, osszesen 3-szor szerepel, irj
+%%% valamit, hogy pl.: (after laoding verbfwr package)
+%%% vagy valami hasonlot
+%% -- javítva
+\item[\verbatizee{\begin{WFile}}\cearg{filename}] (defined in the \textsf{verbfwr} package)
+ Writes its contents verbatim to the specified file.
+ \TeX{} \texttt{.tcx} and line ending transformations apply, so it is
+ possible that accented letters will be converted to \verb+^^+hex according
+ to the input encoding.
+\item[\verbatizee{\begin{WAux}}] (defined in the \textsf{verbfwr} package)
+ Writes its contents verbatim into the current \texttt{.aux} file.
+ \TeX{} \texttt{.tcx} and line ending transformations apply, so it is
+ possible that accented letters will be converted to \verb+^^+hex according
+ to the input encoding.
+\item[\verbatizee{\begin{PWSource}}\optarg{options}]
+ Comination of \verb+\begin{WSource}+ and \verb+\PexaShow+\allowbreak\verb+Source+.
+ It is recommended to have a \verb+[]+ even if there are no
+ options, so the very first token of the contents will be read with proper
+ catcodes.
+\item[\verbatizee{\begin{WBoth}}]
+ Writes its contents to the Source and the Sample temporary file. It is
+ a combination of \texttt{WSample} and \texttt{WSample}.
+\item[\verbatizee{\begin{WSample}}]
+ Writes its contents to the Sample temporary file (\texttt{pexa-sam.\allowbreak tex}),
+ to be typeset by a subsequent \verb+\PexaShowSample+ or
+ \verb+\PexaShowBoth+.
+ The line must end at \verb+\end{WSample}+ because of technical reasons.
+\item[\verbatizee{\begin{WSource}}]
+ Writes its contents to the Source temporary file (\texttt{pexa-src.\allowbreak tex}),
+ to be typeset by a subsequent \verb+\PexaShowSource+ or
+ \verb+\PexaShowBoth+. It is similar to
+ \verb+\begin{verbwrite}+ in the \texttt{sverb} package
+ and the \verb+\begin{+\allowbreak\verb+filecontents}+ \LaTeX{} built-in environment.
+ The line must end at \verb+\end{+\allowbreak\verb+WSource}+ because of technical reasons.
+\item[\verbatizee{\begin{PIgnore}}]
+ Ignores everything up to \verb+\end{PIgnore}+. The environment closer must
+ be at the end of its line. Similar to the \texttt{comment} environment in
+ some other packages.
+\item[\verbatizee{\begin{PSource}}\optarg{options}]
+ Typesets its contents in display verbatim. Similar to the \LaTeX{}
+ \verb+\begin{verbatim}+ environment, but respects the customization
+ options. It is recommended to have a \verb+[]+ even if there are no
+ options, so the very first token of the contents will be read with proper
+ catcodes. This environment is similar to \texttt{PWSource}, but it doesn't
+ create a temporary file, so it is faster, \texttt{srcstyle=leftboth} (etc.)
+ can be used, and there is no ambiguity between \verb+^^e1+ and
+ \texttt{\'a} (etc., see more in Subsection \ref{tcx}). Page breaks are
+ allowed between each Source line. (The implementation of this environment
+ is fairly complex compared to \texttt{PWSource}.)
+\item[\verbatizee{\begin{verbatim}}]
+ Equivalent to \verb+\begin{PSource}[]+.
+ Must be enabled with \texttt{verbatimenv=yes}.
+\item[\verbatizee{\begin{verbatim*}}]
+ Equivalent to \verb+\begin{PSource}[source-space=visbrea+\allowbreak\verb+k]+.
+ Must be enabled with \texttt{verbatimenv=yes}.
+\item[\verbatizee{\begin{PexaMinipage}}\optarg{vbox-type}\cearg{width}]
+ Similar to the \LaTeX{} \texttt{minipage} environment (and
+ accepts the same arguments), but
+ isolates (concerning section numbers etc.) of its contents from the main
+ document more thoroughly. See Subsection \ref{pexaminipage} for
+ details of isolation.
+\item[\verbatizee{\PexaShowBoth}\cearg{options}]
+ Typeets the Source and the Sample side-by-side in display verbatim mode.
+ The Source comes from the temporary file written by the last
+ \texttt{WSource} or \texttt{WBoth} environment, and
+ the Sample comes from the temporary file written by the last
+ \texttt{WSample} or \texttt{WBoth} environment.
+ By default, a vertical separator line is drawn between the Source and the
+ Sample, and page breaks are allowed in the Source after the end of
+ Sample.
+ It can be called multiple times with different options for the same file.
+%\item[\verbatizee{\PexaShowBothMany}]% Dat: for internal use
+\item[\verbatizee{\PexaShowSample}\cearg{options}]
+ Typesets the Sample (written by\,the\,last
+ \texttt{WSample} or \texttt{WBoth} environment) in display mode.
+ It can be called multiple times with different options for the same file.
+%\item[\verbatizee{\PexaShowSampleMany}]% Dat: for internal use
+\item[\verbatizee{\PexaShowSource}\cearg{options}]
+ Equivalent to \verb+\PexaInputSource+ with the file written by the last
+ \texttt{WSource} or \texttt{WBoth} environment.
+ It can be called multiple times with different options for the same file.
+%\item[\verbatizee{\PexaShowSourceMany}]% Dat: for internal use
+\item[\verbatizee{\PexaInputSource}\cearg{filename}\cearg{options}]
+ Typesets the contents of the specified file as Source in display verbatim
+ mode.
+% \item[\verbatizee{\PexaAddlastskip}] (not used anymore, see comment in lb.sty)
+\item[\verbatizee{\begin{code}}] (defined in the \texttt{codep} package)
+ Typesets its contents side-by-side and also marks its contents to be dumped
+ to the CD. By default, each line is emitted to all
+%%%WF thre
+ three
+%%%
+ streams, but lines
+ with special prefixes will go into the Source, Sample or CD-file stream
+ only. See Section \ref{code} for details.
+\item[\verbatizee{\PexaAllowBreak}]
+ Allows a line break here with a discreationary specified
+ in the option \texttt{pverb-linebreakchar=} inserted.
+\item[\verbatizee{\abreak}]
+ A robust command which
+ inserts \verb+\PexaAllowBreak+ when the font \verb+{\ttdefault}{m}{n}+
+ is active; inserts \verb+\allowbreak+ otherwise.
+ Must be enabled with \texttt{abreak=yes}.
+
+\end{description}
+
+\section{Writing examples with the \textsf{codep} package}\label{code}
+
+Textbooks and manuals tend to have many display verbatim examples. The
+examples are usually code snippets which can be further processed by a
+compiler or another program.
+Sometimes minor modifications, such as adding the proper header or trailer,
+are necessary before the code snippet can be processed. It is customary to
+put all code snippets in the book onto the CD accompanying the book. The
+\texttt{code} environment of the \textsf{codep} package (part of the
+\textsf{examplep} distribution) generates CD-files automatically.
+
+Three streams are generated from the contents of each \texttt{code}
+%%%WF environemnt:
+environment:
+%%%
+the Source, the Sample and the CD-file streams. Most parts of
+these streams are identical. The Sample usually differs from the Source
+because the code snippet has to be typeset specially in the book (for
+example, \verb+\includegraphics+ has to be used to typeset an EPS file whose
+Source is displayed). The CD-file differs from Source because additional
+header and footer may be required (such as \verb+\begin{document}+ etc.),
+which are omitted from the book to conserve space.
+
+The \texttt{code} environment reads the code snippet line-by-line. The type
+of the line is specified in first two characters. Lines having the default
+type are written to all 3 streams, and special line types exist to write to a
+specific stream only. The \texttt{code} environment writes the Source and
+Sample streams to temporary files, and upon the end of the environment, it
+calls \verb+\PexaShowBoth+ (or \verb+\PexaShowSource+, if the Sample stream
+is empty) to typeset the example. The CD-file stream is not written to a file
+by \TeX{}, but the file name and starting line number of the \texttt{code}
+environment is reported in the \texttt{.aux} file. A \textsf{Perl} script
+(\textsf{wrfiles.pl}, part of the \textsf{examplep} distribution) has to be
+called later to the actual generaton of CD-files. It will examine the
+\texttt{.aux} files, extract the CD-file stream from the \texttt{.tex} files,
+and dump these streams to individual files in the \texttt{CDfiles} directory.
+The file names can be specified in the \texttt{code} enviroment, and the
+environment can generate file names based on chapter and page numbers (so the
+reader will know from the file name where to read more about the example).
+The same file name is never generated again.
+
+The \textsf{code} package was used in our recent \LaTeX{} textbook \cite{lakk}
+to typeset its examples. Most of the examples were written in \LaTeX{}, but
+many
+%%%WF of of
+of
+%%%
+them were \textsf{METAPOST} sources, and some of them were others
+(e.g.\ configuration files, shell scripts or EPS files). Because of the huge
+amount of \LaTeX{} examples, special features were added to make them easy
+and convenient to input for the author. For example,
+\begin{verbatim}
+\begin{code}
+t \usepackage{url}
+ URL:
+ \\\url{http://foo.org/~user/}
+\end{code}
+\end{verbatim}
+is displayed as (depending on the \textsf{examplep} options)
+\par\medskip
+\noindent\begin{tabular}{@{}l@{}l@{}l@{}}
+{\scriptsize1}\verb+%^\usepackage{url}+&\ \vrule\ \null&URL:\\
+{\scriptsize2}\verb+URL:+&\ \vrule\ \null&\verb+http//foo.org/~user/+\\
+{\scriptsize3}\verb+\\\url{http//foo.org/~user/}+&&\\
+\end{tabular}
+\par\medskip\par
+As seen above, examples are quite convenient to input, and \textsf{examplep}
+takes care of typesetting side-by-side, determining width of the Source,
+allowing page breaks, putting margins and \verb+\vskip+s right, adding the rule the
+separate the Source and the Sample, adding line numbers, generating file name
+for CD-file and writing the CD-file with header and footer.
+
+With \textsf{codep} it is easy to fulfill the following quality criterias:
+the Sample must be consistent with the Source (i.e.\ if the Source is
+changed during editing to book, the Sample should change automatically); the
+CD-file must be consistent with the Source; the CD-file must be directly
+compilable with \LaTeX{} (so a header and a footer have to be added). When
+the deadline of finishing the book approaches, there might not be enough time
+left to ensure these manually, so a package such as \textsf{codep} is very
+useful in this situation.
+
+\subsection{Example files on the CD}\label{codewritereasons}
+
+The following CD-file is generated from the code snippet above:
+\begin{verbatim}
+\documentclass{article}
+
+\usepackage[latin2]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage[magyar]{babel}
+\usepackage{url}
+
+\begin{document}
+
+URL:
+\\\url{http://foo.org/~user/}
+
+\end{document}
+\end{verbatim}
+
+The \texttt{CodeDefaultD}, \texttt{CodeDefaultL}, \texttt{CodeDefaultB} and
+\texttt{CodeDefaultE} environments can be used in the preamble to customize
+the default header and footer generated into the CD-file. For example:
+\begin{verbatim}
+\begin{CodeDefaultD}
+\documentclass[10pt]{article}
+\end{CodeDefaultD}
+\begin{CodeDefaultL}
+\usepackage[latin2]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage[english]{babel}
+\end{CodeDefaultL}
+\end{verbatim}
+
+Although \TeX{} is able to write to external files with \verb+\textsfrite+, there
+were several reasons for using an external program (a \textsf{Perl} script) to
+extract the source snippets from the document sources:
+%
+\begin{itemize}
+
+\item with \verb+\write+ the file always ends at end-of-line
+\item \verb+\write+ forces \texttt{.tex} if no extension is specified
+\item \verb+\write+ removes whitespace from end-of-line
+\item \verb+\write+ translates accented letters to hat-escapes
+ (e.g.\ \texttt{á} to \verb+^+\verb+^e1+) unless
+ compiled with \texttt{latex --translate-file cp8bit.tcx}
+ (\texttt{--translate-file il2-t1.tcx} makes \texttt{\H{o}} in DVI
+ incorrect). There is the same problem when emitting UTF-8 text.
+\item it is impossible to distinguish missing files from empty files,
+ so accidental file overwrites are hard to prevent
+\item it is too late to verbatize if the verbatim text is inside
+ braced macro arguments
+
+\end{itemize}
+%
+The only limitations of this solution are: is not possible to \verb+\input+
+or \verb+\include+ a subfile, and then use the \texttt{code} environment in
+the referrer file; the subfile has to be included with
+\verb+\include{...}+ or \verb+\input{...}+ (with braces);
+and the subfile must have extension \texttt{.tex}.
+The first one is usually not a problem, since referrer files themselves do not
+typeset text, they only include subfiles. See Subsection
+\ref{codeimpl} for implementation details.
+
+
+\subsection{\texttt{\textbackslash begin\{code\}} invocation}
+
+The input syntax of the \texttt{code} environment has been designed so that
+typing the most common examples (short \LaTeX{} code snippets) is simple and
+straightforward, but the author can have full control over all three streams
+if he wants to. The contents of the environment is divided into lines. The
+first two characters of each line specify the line type and the rest is the
+line data.
+% Lines with type \verb+% + are ignored.
+The first character of the line type is usually a lowercase
+ASCII letter or a punctuation symbol. Line types belong to classes, which are
+denoted by capital ASCII letters. The order of the classes in the environment
+is significant, but the order of the individual types or lines within the
+class is irrelevant. Some classes have default lines, which are used
+only if the class is omitted from the environment. The default lines make it
+possible to have default CD-file header and trailer. The clases, in proper
+order with allowed types in parentheses), are:
+%
+\begin{description}
+
+\item[F (f, f!, v, v!)] specify the file name.
+
+% G | | |ide visz egy F-beli parancs
+
+\item[D (d)] the \verb+\documentclass+ line, default uses article
+
+%%%WF kicsit fura, hogy a magyar a default, valami megjegyzessel itt
+%%%enyhiteni kellene, pl hogy ez hogy irhato folul...
+%% -- javítva
+\item[L (l)] the preamble specific to the natural language, defaults for
+ Hungarian \textsf{babel}, Latin-2 \textsf{inputenc}, T1 \textsf{fontenc}.
+ Use the \texttt{CodeDefaultL} environment to override.
+
+\item[P (p$\equiv$0, t)] the preamble with the \verb+\usepackage+ lines
+
+\item[B (b)] \verb+\begin{document}+
+
+\item[C (<$\equiv$c, >$\equiv$o, \textvisiblespace$\equiv$2, w, s, x, \%)] the document contents
+
+\item[E (e)] \verb+\end{document}+
+
+% Z | | |ide visz az \end{code}
+
+\end{description}
+%
+The meaning of the complicated types are:
+%
+\begin{description}
+
+\item[f] Accepts a file name with extension. The use of \verb+_+ in the name
+ is not recommended. The extension (e.g.\ \texttt{.tex}) is mandatory. The
+ chapter and page numbers will be prepended to the file name (only the
+ page number for document classes without chapters), for example
+ \texttt{f foo.mp} may become \texttt{2\textunderscore 63\textunderscore foo.mp} in chapter 2, on page 63.
+
+\item[v] Like \texttt{f}, but removes the default lines from classes
+ D, L, P, B and E. This is ideal for emitting non-\LaTeX{} examples.
+
+\item[f!] Like \texttt{f}, but don't prepend numbers to the file name.
+
+\item[v!] Like \texttt{v}, but don't prepend numbers to the file name.
+
+\item[p$\equiv$0] Writes only to the preamble of the CD-file.
+
+\item[t] Writes to CD-file, appends line prefixed by \verb+%^+
+ to Source. Useful to indicate in the book that a package is needed.
+ Example: \verb*+t \usepackage{url}+.
+
+\item[<$\equiv$c] Writes to Source and CD-file.
+\item[>] Writes only to Sample.
+\item[x] Writes to Sample and CD-file.
+\item[\textvisiblespace$\equiv$2] Writes %%%WF only
+ to Source, CD-file and Sample.
+\item[w] Writes only to CD-file.
+\item[s] Writes only to Source.
+\item[\%] Comment, ignored.
+
+\end{description}
+
+The \texttt{code} environment omits the Sample part from the book if the
+Sample is empty,
+and it omits the whole display verbatim environment (but still writes to
+CD-files) if both the Sample and Source are empty.
+
+\subsection{An example with METAPOST code}
+
+If the \textsf{eempost} package is also loaded, the following code can be
+used to typeset a simple, syntax-highlighted \MP{} source and its output:
+\begin{verbatim}
+{\PexaDefaults{listings={language=metapost}}\begin{code}
+v house.mp
+> \begin{EempDef}{house.1}{}{}
+w beginfig(1)
+ u:=18bp; picture V; V:=image(
+ draw unitsquare scaled u xscaled 2;
+ fill (0,u)--(2u,u)--(u,1.5u)--cycle
+ withcolor red);
+ draw V rotated 10;
+ draw V shifted (3u,0);
+w endfig; end
+> \end{EempDef}
+> \leavevmode\EempUseFig{house.1}{0}{0}
+% ^^^ Dat: \leavevmode to get the Overfull \hbox warning
+\end{code}
+} % Dat: nothing allowed after \end{code} in its line
+\end{verbatim}
+%
+If \textsf{eempost} is not loaded, the following code should be used instead:
+%
+\begin{verbatim}
+{\PexaDefaults{listings={language=metapost}}\begin{code}
+v house.mp
+> \begin{WFile}{house.mp}
+x beginfig(2)
+ u:=18bp; picture V; V:=image(
+ draw unitsquare scaled u xscaled 2;
+ fill (0,u)--(2u,u)--(u,1.5u)--cycle
+ withcolor red);
+ draw V rotated 10;
+ draw V shifted (3u,0);
+x endfig; end
+> \end{WFile}
+> \leavevmode\includemps{house.2}
+\end{code}
+}
+\end{verbatim}
+The \verb+\includemps+ command should be defined in the preamble as:
+\begin{verbatim}
+\usepackage{graphicx}
+\DeclareGraphicsRule{*}{mps}{*}{}
+\makeatletter
+\@ifundefined{Ginclude@eps}{}{\def\Ginclude@mps{\Ginclude@eps}}
+\def\includemps{\@ifnextchar[\includempsb{\includempsb[]}}
+\def\includempsb[#1]#2{\includempsc{#1}#2\@nil}
+\def\includempsc#1#2.#3\@nil{%
+ \IfFileExists{#2.#3}{\includegraphics[#1]{#2.#3}}{
+ \GenericWarning{}{Please run: mpost #2^^J\@gobble}}}
+\makeatother
+\end{verbatim}
+This should work with both \textsf{dvips} and \textsf{pdflatex}. The typeset
+output looks like this:\label{pag:use-listings}
+\par\medskip
+\noindent\begin{tabular}{@{}l@{}l@{}l@{}}
+{\scriptsize1}u:=18\textbf{bp}; \textbf{picture} V; V:=\textbf{image}( &\ \vrule\ \null&\\
+{\scriptsize2}\ \ \textbf{draw} \textbf{unitsquare} \textbf{scaled} u \textbf{xscaled} 2;&\ \vrule\ \null&\\
+{\scriptsize3}\ \ \textbf{fill} (0,u)$-${}$-$(2u,u)$-${}$-$(u,1.5u)$-${}$-$\textbf{cycle}&\ \vrule\ \null&
+ \setbox0\hbox{\includegraphics{houses}}\ht0=0pt \box0 \\
+{\scriptsize4}\ \ \ \ \textbf{withcolor} \textbf{red}); & &\\
+{\scriptsize5}\textbf{draw} V \textbf{rotated} 10; & &\\
+{\scriptsize6}\textbf{draw} V \textbf{shifted} (3u,0); & &\\
+\end{tabular}
+\par\medskip\par
+
+
+\section{Some implementation details}
+
+\subsection{Starting from poor man's inline verbatim}
+
+The following macro, derived from a macro in the \texttt{.dtx} documentation
+of David Kastrup's \textsf{binhex} package \cite{binhex},
+typesets its argument in inline verbatim mode:
+%
+\begin{verbatim}
+{\catcode\string`>12 \gdef\stripprefix#1>{}}
+\def\verbatize#1{{\ttfamily
+ \toks0{#1}\edef\next{\the\toks0}% Dat: make # OK
+ \fontdimen2\font=0pt % Dat: hide spaces
+ \expandafter\stripprefix\meaning\next
+ \unskip % Dat: strip final space, possibly after command
+ \fontdimen2\font=\dimen0}}% Dat: reset global change
+\end{verbatim}
+%
+This demonstration show how useful the \TeX{} primitives \verb+\string+ and
+\verb+\meaning+ are. Both of them convert tokens to characters with catcode
+12 (other) or 10 (space). Token lists with spaces are hard to post-process by
+\TeX{} macros, because \TeX{} macro expansion ignores spaces before
+undelimited macro arguments. But it is possible to write a macro which
+converts spaces to anything with catcode 12, for example the \verb+\sca+
+macro below does this:
+%
+\begin{verbatim}
+\begingroup\catcode\string``12 \lccode```\%\lowercase{\endgroup
+ \def\scc#1 {\ifx\hfuzz#1\else#1`\expandafter\scc\fi}}
+\def\scb#1#2{\scc#2\hfuzz#1} \def\sca{\scb{ }}
+% try with: \message{\sca{foo bar }}
+\end{verbatim}
+%
+It is possible to change \verb+%+
+in the definition above to anything, including a space: the replacement
+character will have catcode 12. After such a conversion, the text to be
+emitted can be easily processed to add \TeX{} macros, change catcodes back to
+13 for ISO Latin high accented characters, replace spaces with appropriate
+constructs, insert \verb+\allowbreak+ to the right places to enable line
+breaks etc. The \verb+\PVerb+ macro, when invoked in inner mode (i.e.\ read
+inside a macro argument) works this way, and respects the options specified
+by the author.
+
+\subsection{Hex escapes with output translation}\label{tcx}
+
+The \TeX{} primitives \verb+\write+, \verb+\message+ and \verb+\errmessage+
+may escape some characters when printing them. By default, \TeX{} changes the
+code ranges 0--31 and 127--255 (the codes outside the printable ASCII range),
+escaping such codes with a \verb+^^+: for example,
+the tabulator (code 9) becomes \verb+^^I+, and characters having a high code
+in the font (not the input) encoding are dumped in hexadecimal, for example
+\texttt{\H{o}} (having code 174 in T1 encoding) becomes \texttt{^^ae}.
+(This behaviour depends on the default \texttt{.tcx} file the \TeX{}
+distribution uses. No translation occurs with \textsf{cp8bit.tcx}.
+To spot the difference, run
+\verb+tex -translate-file cp8bit "\messa+\allowbreak\verb+ge{^^I^^1f+\allowbreak\verb+á}\end"+, and then change
+\texttt{cp8bit} to \texttt{.missing.}, and run again.)
+The transformation is lossy: %, for example % e.g.\
+both
+\verb+\message{+\texttt{\H{o}}\verb+}+ and
+\verb+\message{\string^^ae}+ yield the same result: \verb+^^ae+. Escaping the caret
+as \verb+^^5e+ doesn't help either, because the \TeX{} unescapes carets
+recursively when reading back the written file. Since ISO Latin
+accented characters are
+more often needed in verbatim environments than double carets,
+\textsf{examplep} does the necessary unescaping when it reads the file back.
+% Dat: doesn't work The back-transformation works with UTF-8, too, because it is timed properly.
+The back-transformation doesn't work with UTF-8, because the 2nd byte is not
+decoded by the time the first one is being executed.
+The unescaping would be done by \TeX{} itself if the caret had its original
+catcode 7, but that would imply that the non-escaping, verbatim carets
+wouldn't work.
+
+The unescaping is implemented in a straighforward, but ugly way in the
+\verb+\pexa@dohex@low+\ldots{} macros. The caret escapes are parsed in a
+huge \verb+\if+%\ldots
+\verb+\else+\allowbreak\verb+\if+ construct nested in 40 levels, and once
+the hexadecimal code is available and converted to upper case, the
+\verb|\lccode`+="|$\langle$code$\rangle$\verb*|\lowercase{+}| construct is
+used to insert the appropriate character with catcode 12 (\verb+~+ is
+used instead of \verb|+| to get an active character, catcode 13). The
+construct is not expandable, but it works because it is used for typesetting.
+The caret is made active and defined to execute \verb+\pexa@dohex+, so each
+caret in the file will get unescped.
+
+\subsection{Disabling ligatures}
+
+The only way to disable a ligature in \TeX{} is to insert a nonexpandable
+tokens into the input stream between the characters forming the ligature.
+For example, \verb+f{}i+ or \verb+f\relax i+ can be used to get ``f{}i''
+instead of ``fi''. The most important ligatures (in addition to ligature
+letters) to be disabled in verbatim mode are:
+\verb+<<+ \verb+>>+ \verb+?`+ \verb+!`+ \verb+,,+ \verb+``+ \verb+''+
+\verb+--+ and \verb+---+. This can be accomplised by inserting a \verb+\relax+
+token in front of each \verb+`+ \verb+'+ \verb+,+ \verb+-+ \verb+<+
+and \verb+>+. The \verb+\pexa@noligs@some+ command of \textsf{examplep} does
+exactly this, for example, it defines
+\verb+{\lccode`~`<13 \gdef~{\relax+\allowbreak\verb+\string~}}+. The definition
+slightly different from the one of the \verb+\@noligs+ command in the
+\LaTeX{} kernel: \verb+\def<{\leavevmode\kern\z@\char`\<}+; but the effect is
+the same. The \verb+\pexa@noligs@most+ command, on the other hand, makes
+all characters with category code 12 in the range 32\ldots127 active, and
+adds \verb+\relax+ to both sides. This change doesn't affect ASCII or
+accented letters, but usually there are no ligatures with letters in
+typewriter fonts. See also the \texttt{noligs=} load option.
+
+\subsection{Detecting inner/outer brace in inline verbatim mode}
+
+The \verb+\PVerb+ commands work differently based on whether they are inside
+a macro argument or not. More precisely, they detect whether they are able
+to change the catcode of the following token. If so, they are in outer mode
+(i.e.\ outside a macro argument), so they change all the other catcodes as
+well, so consecutive spaces and comment characters will be included in
+verbatim, too. Otherwise, they are in inner mode, their argument is already
+read and tokenized by \TeX{}'s eyes, so changing catcodes is pointless.
+
+The auto-detection works this way: the catcode of all the special characters
+(as enumerated in \verb+\dospecials+; including braces) is changed to 3
+(math-shift). Then the next token is read into \verb+\reserved@a+ with
+\verb*+\afterassignment\pexa@+\allowbreak\verb+cverb@gottoken\let\reserved@a= +. No tokens are
+ignored this way, not even spaces. The \verb+\pexa@cverb@gottoken+ macro then
+examines the catcode of the character in
+\verb+\reserved@a+, and if it is 3, it continues in
+outer mode, otherwise it continues in inner mode. In inner mode, the next
+token is forced to be an open-brace, because verbatim material with braces
+not nested cannot be read into inner mode anyway (\TeX{} would print an error
+message when it is trying to find the end of the macro argument containing
+the \verb+\PVerb+ construct).
+
+Another common trick is used when parsing the argument in outer mode when it
+is delimited by braces. Normally a \TeX{} macro expansion
+(using the definition \verb+\def\pexa@cverb@outerc#1{...}+) can read an
+argument that is in braces, but in our case the very first opening brace has
+been already read (by \verb+\let+ above), so we have to insert it back:
+\verb+\catcode`\{1 \catcode`\}2 \ex+\allowbreak\verb+pandafter\pexa@cverb@outerc\expandafter{\iffalse}\fi+.
+The \verb+\iffalse+\allowbreak\verb+}\fi+ here is needed for making the definition properly
+nested.
+
+\subsection{Inline verbatim in section titles}
+
+The \TeX{} command \verb+\write+, \verb+\message+ and \verb+\edef+ fully
+expand their arguments, and similar expansion is enforced by the
+\verb+\markboth+ built-in \LaTeX{} macro for section titles and page
+headings. Therefore macros in section titles have to be protected so their
+expansion is delayed until the section title is typeset. \LaTeX{} offers
+\verb+\protect+ for this: if the macro control sequence is preceded by
+\verb+\protect+, its expansion is properly delayed; the expansion of the
+argument has to be delayed manually in a similar way. Some macros have
+\verb+\protect+ion included; they are called ``robust''. If the definition a
+macro starts with \verb+\DeclareRobustCommand+ instead of \verb+\newcommand+,
+the macro is defined to be robust (and its body can be retrieved by looking
+at the control sequence with a space added, e.g.\
+\verb*+\expandafter\show\csname sqrt \endcsname+).
+
+\verb+\protect+ can have three definitions depending on what time it is
+processed: it is \verb+\string+ in a \verb+\typeout+ or a \LaTeX{} error or
+warning message (try \verb+\typeout{\meaning\protect}+);
+it is \verb+\noexpand\protect\noexpand+ when
+\verb+\write+ing to a file (most commonly the \texttt{.aux} file); otherwise
+it is just \verb+\relax+ ($\equiv{}$\verb+\@typeset@protect+; try
+\verb+\pagestyle{headings}\section{\meaning\pro+\allowbreak\verb+tect}+ and spot the difference
+between the main text, the section title and the \texttt{.aux} file).
+
+The \verb+\÷+ and \verb+\Q+ inline verbatim commands are made robust, so they
+can be used in macro arguments. In fact, they are extra-robust, since they
+take care of protecting their arguments when being written to a file by
+\LaTeX{}. Protecting here means adding \verb+\noexpand+ in front of each
+token in the argument. The token parsing is easy since the argument -- by the
+nature of these commands -- may not contain braces or spaces. The
+implementation looks like this.
+%
+\begin{verbatim}
+\long\def\÷#1÷{\Q{#1}}
+\long\def\Q{\ifx\protect\@typeset@protect\expandafter\@gobble\fi
+ \@thirdofthree\@firstoftwo\displayit\protectit}
+\def\displayit#1{...}
+\def\protectit#1{\noexpand\÷\protectnext#1÷}
+\long\def\protectnext#1{\noexpand#1%
+ \ifx#1÷\else\expandafter\protectnext\fi}
+\end{verbatim}
+%
+The first trick is in the body of \verb+\Q+: the argument is passed to
+either \verb+\displayit+ or \verb+\protectit+, depending on the current value
+of \verb+\protect+. If the condition is true, \verb+\@gobble+ is called,
+which removes \verb+\@thirdofthree+, so \verb+\@firstoftwo+ will choose
+\verb+\displayit+ (otherwise, \verb+\@thirdofthree+ chooses
+\verb+\protectit+).
+The second, more classical trick is the r\^ole of
+\verb+\expandafter+ in the definition of \verb+\protectnext+: it makes the
+\verb+\fi+ token disappear, so the tail-recursive call to \verb+\protectnext+
+will grab the next token into \verb+#1+ instead of \verb+\fi+ itself.
+
+
+\subsection{Special hyphenchar in inline verbatim}\label{char'30}
+
+When inline verbatim is hyphenated, care has to be taken to make the
+discretionary hyphen different from a regular, verbatim hyphen. (There is a
+similar problem with spaces disappearing when the line is broken; to avoid
+this, try setting the option \texttt{pverb-space=visbreak} or
+\texttt{pverb-space=invdisc}.) \TeX{} auto-hyphenation takes the
+discretionary hyphen from the \verb+\hyphenchar+ of the font. So the solution
+is adding a new glyph to the verbatim font, changing the font encoding
+vector to include the glyph, and then setting \verb+\hyphenchar+.
+
+We have chosen character position 24 (per-thousand sign) of the T1 encoding to
+be replaced by a soft hyphen (\includegraphics[scale=0.009]{shorthyp_t1xtts}),
+which is deliberately narrower than all the other characters, so the
+reader immediately sees its function. For example:
+``\texttt{foo\includegraphics[scale=0.009]{shorthyp_t1xtts}\break bar}''.
+We have drawn the glyph in \textsf{Fontforge}, saved the data to PFB,
+converted it to human-readable format with the command
+\texttt{type1fix.pl shorthyp.pfb gsx: shorthyp.gsx}, extracted the human
+readable glyph definition (\verb+/short+\allowbreak\verb+hyp { ... }+) from the output.
+We have changed the \texttt{/FontName} and
+injected the glyph to original font with the following command:
+%
+\begin{verbatim}
+perl -x -S type1fix.pl --set-leniv=0 --dump-spaces=no --pack \
+ --dump-bars --dump-stde --dump-ends=no --debug-warnings \
+ --chk-insize=no --set-uniqueid=random --set-fontname=t1xtts \
+ --set-glyph="/shorthyp { 50 354 hsbw 315 vmoveto -17 vlineto 0
+ -8 0 -8 6 -4 rrcurveto 4 -6 8 0 5 0 rrcurveto 195 hlineto -124
+ vlineto -11 0 -21 15 vhcurveto 2 0 3 1 2 1 rrcurveto 10 2 1 12
+ 0 12 rrcurveto 0 8 -1 8 0 5 rrcurveto 130 vlineto 0 5 1 7 0 7
+ rrcurveto 0 12 -2 11 -11 3 rrcurveto -5 1 -6 0 -5 0 rrcurveto
+ -12 0 -12 -1 -10 0 rrcurveto -98 hlineto -16 0 -19 2 -17 0
+ rrcurveto -32 -6 -3 -24 hvcurveto closepath endchar} def" \
+ t1xtt.pfb pfb: t1xtt-shorthyp.pfb
+\end{verbatim}
+%
+We have changed six lines in \textsf{tex256.enc} to match the glyph names
+in the font (e.g. \texttt{/endash} $\to$ \texttt{/rangedash}), and we have
+changed position 24 to \texttt{/shorthyp}. We have also changed the name of
+the encoding in the beginning of the file. We have inserted the following
+line to the PostScript font map files (e.g.\ \textsf{psfonts.map}), without
+the line break:
+%
+% into psfonts.map:
+% ul9r8r LuxiMono "TeXBase1-shorthypEncoding ReEncodeFont" <8r-shorthyp.enc <ul9r8a-shorthyp.pfb
+\begin{verbatim}
+t1xtts t1xtts "TeX256-shorthypEncoding ReEncodeFont"
+ <tex256-shorthyp.enc <t1xtt-shorthyp.pfb
+\end{verbatim}
+%
+We have
+also added a new TFM file based on the old one. We have dumped the old one
+with \texttt{tftopl -charcode-format=octal t1xtt.tfm}, modified the
+width (\texttt{CHARWD}) of character 24 (\texttt{CHARACTER O 30}), and saved
+the modifications with \texttt{pltotf modified.pl t1xtts.tfm}.
+We've added the \LaTeX{} font map file \textsf{t1xtts.fd} with the following
+content:
+%
+\begin{verbatim}
+\DeclareFontFamily{T1}{xtts}{\hyphenchar\font\m@ne}
+\DeclareFontShape {T1}{xtts}{m}{n}{<->t1xtts}
+\end{verbatim}
+%
+The \verb+\hyphenchar+ settings above disables automatic word hyphenation, so
+words inside \verb+\texttt+ etc.\ won't be accidentally hyphenated. We have
+copied all the files above to the appropriate directories and we have run
+\textsf{mktexlsr} to update the file list. We have included some options in
+\verb+\PexaDefaults+ line in the document preamble:
+ \texttt{pverb-hyphenchar=char'30} (for automatic word hyphenation)
+ \texttt{pverb-linebreak=char},
+ \texttt{pverb-linebreakchar=}\verb*+{\string\char'30 }+ (insert\-ed around symbols).
+We have also defined
+\verb+\def\pexa@verbatimfont{\normal+\allowbreak\verb+font\fontfamily{xtts}\selectfont}+,
+and we have made sure that the T1 encoding is in use
+(\verb+\usepackage{t1enc}+).
+
+The overall effect of these modifications was that \textsf{examplep} now used
+our glyph for automatic word hyphenation and as discreationary hyphen around
+symbols in inline verbatim mode. The demonstrations above shows that it is
+quite complicated to change a single glyph in a \LaTeX{} font. It is hoped
+that the situtation will improve with \TeX's successors.
+
+
+\subsection{Passing information about the CD-files to \textsf{wrfiles.pl}}\label{codeimpl}
+
+\textsf{wrfiles.pl} is used to extract the CD-files from the \LaTeX{} sources
+of a book. The reasons why an external program is used instead of \TeX{}'s
+built-in \verb+\write+ command are described in Subsection
+\ref{codewritereasons}.
+
+The file names and environment start line numbers are passed to
+\textsf{wrfiles.pl} in the \texttt{.aux} file(s). For example, the line
+\verb+\@gobble{code:foo.tex:156:2_pic3.+\allowbreak\verb+mp}+ is a declaration that there is a
+\texttt{code} environment starting at line 156 in the file \texttt{foo.tex}.
+\textsf{wrfiles.pl} understands such declarations, and it also understands
+lines like \verb+\@input{foo1.aux}+, so dumping works even if the document is
+separated to several \verb+\include+d source files. The declaration above is
+ignored by \LaTeX{} when it reads back the \texttt{.aux} file (because
+\verb+\@gobble+ gobbles its argument).
+
+Although the \verb+\inputlineno+ primitive is mentioned twice in the
+\TeX{}book \cite{texbook}, its -- rather straightforward -- purpose is not
+documented there. But the real problem is that \TeX{} doesn't remember the
+name of the file being read. \verb+\jobname+ contains the name of the
+top-level \texttt{.tex} file, so it doesn't work when that file
+\verb+\include+s or \verb+\input+s subfiles containing \texttt{code}. The
+\textsf{codep} package thus modifies the \verb+\InputIfFileExists+ command to
+save the file name to the macro \verb+\codep@code@@inputfile+ if the
+extension is \texttt{.tex}. (The other most common extension after the preamble is
+\texttt{.fd}: such a file is loaded each time a \LaTeX{} font that has not
+been used yet is selected.) The implicit limitation here that \texttt{code}
+won't work unless the extension of the file included is \texttt{.tex}.
+Hooking \verb+\InputIfFileExists+ affects \verb+\include{...}+ and
+\verb+\input{...}+, but not not \verb*+\input ...+, \verb+\documentclass+ or
+\verb+\usepackage+. This is not a problem if the author remember that he has
+to use braces around the file name.
+
+Since there is no hook for \verb+\endinput+ (and some packages rely on that
+\verb+\endinput+ is an expandable primitive), it is not possible to set up a
+stack of names of files being read. Thus, if file $A$ has included file $B$,
+an after that \texttt{code} environment placed in $A$ will not work, because
+the declaration line read by \textsf{wrfiles.pl} will contain the name of $B$
+instead of $A$. This is not a serious limitation, becase files including
+other files usually don't typeset text by themselves after the inclusion.
+
+The primary reason why \textsf{wrfiles.pl} needs the \texttt{.aux}
+file is that it has to embed the page and chapter numbers into the file
+names. Although \textsf{wrfiles.pl} could find the source file with the
+\texttt{code} environments by trying to match line numbers with all source
+files in the current directory, we have decided to make it fail when the file
+name is not emitted properly into the declaration, so it is sure that the
+examples in the book and on the CD are consistent.
+
+
+\section{Future work}
+
+The most important features to be added and other improvement possibilites:
+
+\begin{itemize}
+
+%\item func-tion better hyphenation point in \verb+\Q+ than functi-on
+\item a better approach towards automatic hyphenation of inline verbatim,
+ after studies in typography
+\item allow wider sample if source is small enough
+\item why doesn't \verb+\selectlanguage+ work inside
+ \verb+\begin{PSource}[srcstyle=+\allowbreak\verb+leftboth]+
+\item \verb+\PVerb{foo}+ mustn't insert ``$\lnot$'' if foo is at end-of-line
+\item \verb+\PVerb{...}+ inner unnested braces (\verb+\futurelet+?)
+\item differentiated \verb+\penalty+ values in \verb+\PVerb+
+\item paragraph mode should work with side-by-side displays (of course,
+ measuring the width of the Source has still to be done in aligned mode)
+\item ASCII tabulator (9) characters aren't supported properly, they are just
+ converted to spaces. The width of the tab character should depend on its
+ horizontal position in the line. (With \texttt{listings=}, the results are
+ already correct.)
+\item framing and background color support to display verbatim
+\item accented characters should work with \textsf{listings} and
+ \verb+\PexaShowBoth+. The original catcode of \verb+^+ should be kept
+ so \TeX{} itself would parse the hex escapes.
+\item an interface to \verb+\lstinline+ in \textsf{listings}, with line
+ breaks allowed
+\end{itemize}
+
+\section{Conclusion}
+
+\textsf{examplep}, as it is now, is a highly customizable \LaTeX{} package
+that provides both inline and display verbatim mode with several advanced
+features, many of which are not available in any other packages. The
+\textsf{code} environment is also provided which can typeset both the Source
+and the Sample column of a side-by-side display verbatim from the same
+\LaTeX{} source stream, furthermore it can emit the stand-alone working
+version of the Source into a CD-file. These features make the \textsf{code}
+environment especially useful for sofware textbook and manual authoring. The
+whole \textsf{examplep} distribution is under the GNU GPL, and it is freely
+available from CTAN. An earlier version of the packages was used to typeset
+all the examples in a 770-page introductionary book about \LaTeX{}.
+
+\textsf{examplep} is not complete. Some important features are not
+implemented yet and the package has not been tested thoroughly. Some parts of
+the code are really ugly, partially because it has not been polished up after
+writing, and partially because the architecture of \TeX{} and \LaTeX{}
+doesn't provide an elegant way to address the problem. For example, active
+characters are overloaded: they are used by \textsf{inputenc}, \textsf{babel}
+(shorthands) and \textsf{listings} (syntax highlighting) for different
+purposes -- these packages have to make extra effort to cooperate with each
+other. We hope that \TeX's successors will improve these
+conditions, and the core system will provide a generic way to tokenize
+verbatim text instead of changing catcodes.
+
+\iffalse
+\bibliographystyle{plain}
+\bibliography{eurotex_2005_examplep}
+\else
+\begin{thebibliography}{1}
+
+\bibitem{listings}
+Carsten Heinz.
+\newblock {\em The \textsf{Listings} Package}, 7~September 2004.
+\newblock \\CTAN:\texttt{macros/latex/contrib/listings/listings-1.3.dtx}.
+
+\bibitem{binhex}
+David Kastrup.
+\newblock {\em The \texttt{binhex.tex} package for expansible conversion into
+ binary-based number systems}, 2001.
+\newblock \\CTAN:\texttt{macros/generic/kastrup/binhex.dtx}.
+
+\bibitem{texbook}
+Donald~E. Knuth.
+\newblock {\em The {{\TeX}book}}.
+\newblock Addison--Wesley, 1984.
+
+\bibitem{lakk}
+Ferenc Wettl, Gyula Mayer, and P\'eter Szab\'o.
+\newblock {\em {\LaTeX} k\'ezik\"onyv}.
+\newblock Panem, Budapest, 2004.
+
+\bibitem{fancyvrb}
+Timothy~Van Zandt, Denis Girou, and Sebastian Rahtz.
+\newblock {\em The `\textsf{fancyvrb}' package. Fancy Verbatims in \LaTeX{}},
+ 1998.
+\newblock \\CTAN:\texttt{macros/latex/contrib/fancyvrb/fancyvrb.dtx}.
+
+\end{thebibliography}
+\fi
+
+\end{document}