% % examplep.sty -- typesetting verbatim TeX code and examples % by pts@fazekas.hu at Sat Sep 27 23:58:14 CEST 2003 % -- Sun Sep 28 23:38:37 CEST 2003 % ligatures broken -- Tue Sep 30 19:14:11 CEST 2003 % examplep.sty at Fri Oct 24 10:25:27 CEST 2003 % options and misc stuff at Fri Oct 24 22:23:06 CEST 2003 % xalign=, yalign= fixes, *-test.tex at Wed Dec 24 02:33:24 CET 2003 % baseline-grid=, fixes at Wed Feb 25 23:37:41 CET 2004 % % This is a LaTeX package that provides following features: % % -- a robust \PVerb macro comparable to the LaTeX \verb macro % -- \begin{PSource} comparable to the LaTeX \begin{verbatim} environment % -- \begin{WSource} comparable to \begin{verbwrite} in sverb.sty % and \begin{filecontents} of latex.ltx % -- \begin{PWSource} combining \begin{PSource} and \begin{WSource} % -- \begin{PexaMiniPage} comparable to the LaTeX \begin{minipage} environment % -- \PexaShowBoth that typesets LaTeX code, and also shows it verbatim; % facing and page breaks enabled (!) % -- Package load options can be specified \usepacakge[...]{examplep} % % See samplewidth= in this file for the load option defaults. Use % \PexaDefaults{...} instead of \usepackage[...]{examplep} to specify % complicated options such as linenumberformat={...} (this is a LaTeX kernel % limitation.) % % !! func-tion better hyphenation point in \Q than functi-on % !! after \end{PSource} in pts_diploma.tex, don't require \noindent % !! option to emit tabs as spaces % !! allow wider Source if Sample is small enough % !! \ifnum0=`{\fi} and similar tricks for \halign? % !! magyarldf-doc.tex infinite bug % !! why is it called twice? % \def\pexa@cverb@@verbatimfont{u\normalfont\ttfamily % \hyphenpenalty10000 } % !! why doesn't \selectlanguage works inside \begin{PSource}[srcstyle=leftboth] % !! \PVerb{foo} mustn't insert $\lnot$ if foo is at EOL % !! \ifvmode testing for \PSource % !! \PVerb{...} inner unnested braces (\futurelet?) % !! \penalty in \PVerb % !! \pexa@ss@left etc. should work with \PexaShowBoth (not for measuring) % !! \@afterindenttrue etc. % !! ASCII tab (9) characters aren't supported properly % !! \begin{PSource} says 'Missing $ inserted.' in magyarldf-doc.tex: % \begin{PSource}[srcstyle=leftboth] % \grq~\glq~\glqq~\grqq~\flq~\frq~\flqq~\frqq\\ % \textquoteright~\textquotedblright\\ % \textquoteleft~\textquotedblleft\\ % \end{PSource} % Dat: multiple spaces count inside \PVerb+...+, even at line break % Dat: it is impossible to indent the first line via \begin{WSource} etc., % because verbfwr.sty chops heading spaces % Dat: 5000..9999 lines of \halign containing only `(9999)\hfil\cr' will fill % up TeX's memory (! TeX capacity exceeded, sorry [main memory size=263001].), % so text fed to \PexaShowBoth shouldn't exceed 375 lines (with an % average line length of 80 characters) % Imp: page breaks near \FBHLastDepth put a too tall \vrule on next page % \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{examplep}[2010/02/03 v0.04 Verbatim and typeset TeX code] \@ifundefined{XeTeXinputencoding}{}{\XeTeXinputencoding "cp1250" } \edef\pexa@@restorecat{\catcode\string``\the\catcode\string``\space} \catcode\string``12 % may have been changed by Babel \RequirePackage{verbfwr} % --- \def\pexa@@samplename{pexa-sam.tex} \def\pexa@@sourcename{pexa-src.tex} \let\pexa@@cursourcename\pexa@@samplename \def\pexa@dohex#1{% \if\noexpand#1^% \expandafter\pexa@dohex@lowa \else\char"5E \expandafter#1\fi } \def\pexa@dohex@lowa#1#2{% \if\noexpand#18\pexa@swaprelax{\pexa@dohex@lowc#28}% \else\if\noexpand#19\pexa@swaprelax{\pexa@dohex@lowc#29}% \else\if\noexpand#1a\pexa@swaprelax{\pexa@dohex@lowc#2A}% \else\if\noexpand#1b\pexa@swaprelax{\pexa@dohex@lowc#2B}% \else\if\noexpand#1c\pexa@swaprelax{\pexa@dohex@lowc#2C}% \else\if\noexpand#1d\pexa@swaprelax{\pexa@dohex@lowc#2D}% \else\if\noexpand#1e\pexa@swaprelax{\pexa@dohex@lowc#2E}% \else\if\noexpand#1f\pexa@swaprelax{\pexa@dohex@lowc#2F}% \else\if\noexpand#1I\pexa@swaprelax{\pexa@dohex@lowc90#2}% tab: \t; Imp: better !! no #2, neither in \char "5E \else\char"5E \pexa@swaprelax{\pexa@dohex#1#2}% \fi\fi\fi\fi\fi\fi\fi\fi\fi\relax } \def\pexa@dohex@lowb#1{% \if\noexpand#1aA% \else\if\noexpand#1bB% \else\if\noexpand#1cC% \else\if\noexpand#1dD% \else\if\noexpand#1eE% \else\if\noexpand#1fF% \else#1\fi\fi\fi\fi\fi\fi } \def\pexa@dohex@lowc#1#2{% \ifnum\catcode"#2\pexa@dohex@lowb#1=13{\lccode`\~="#2\pexa@dohex@lowb#1\lowercase{~}}% \else{\lccode`\+="#2\pexa@dohex@lowb#1\lowercase{+}}\fi% } %** Usage: \begin{PWSource}[OPTIONS]...\end{PWSource}. Writes everything (...) %** into file \pexa@@sourcename, and also typesets it with \PexaShowSource %** Dat: everything after \end{PWSource} in its line will be ignored %** Dat: ^^ab hex codes >=128 will be substituted in \input (by \pexa@dohex) %** Dat: ^^I etc. hex codes will be left alone %** Dat: spaces at EOL will be lost (this is a limitation of TeX's eyes), so % will be contents of lines with spaces only. This limitation is true % for all environments in this file. %** Dat: if `[OPTIONS]' is missing, then all spaces \def\PWSource{% \let\pexa@@savepar\par \catcode`\ =12 \let\par\relax \obeylines% ugly hack so \@ifnextchar won't gobble spaces or newlines \@ifnextchar[\pexa@PWSource{\pexa@PWSource[]}}%] \def\pexa@PWSource[#1]{% \def\pexa@@envopts{#1}% \global\let\pexa@@cursourcename\pexa@@sourcename \immediate\openout\verbfwr@writefile\pexa@@cursourcename\relax \let\verbfwr@writecs\verbfwr@writefile \let\verbfwr@actwriteline\verbfwr@writeline \let\par\pexa@@savepar % so we won't get an infinite loop \verbfwr@default@acts \verbfwr@readenv\verbfwr@write % Don't put anything else here! } \def\endPWSource{% \immediate\closeout\verbfwr@writefile \expandafter\PexaShowSource\expandafter{\pexa@@envopts}% use defaults } %** Writes its contents to file \pexa@@samplename and sets %** \pexa@@cursourcename to \pexa@@samplename %** Usage: \begin{WBoth}...\end{WBoth}. `...' is LaTeX source that can %** be typeset verbatim or later \input into the middle of the document. See %** the docs for \begin{PWSource} for more details. \def\WBoth{% \global\let\pexa@@cursourcename\pexa@@samplename \immediate\openout\verbfwr@writefile\pexa@@samplename\relax \let\verbfwr@writecs\verbfwr@writefile \let\verbfwr@actwriteline\verbfwr@writeline \verbfwr@default@acts \verbfwr@readenv\verbfwr@write% finish this \cs here } \def\endWBoth{\immediate\closeout\verbfwr@writefile} %** Similar to \begin{WBoth} (see docs there), but writes its contents to %** file \pexa@@samplename. \def\WSample{% \immediate\openout\verbfwr@writefile\pexa@@samplename\relax \let\verbfwr@writecs\verbfwr@writefile \let\verbfwr@actwriteline\verbfwr@writeline \verbfwr@default@acts \verbfwr@readenv\verbfwr@write% finish this \cs here } \let\endWSample\endWBoth %** Similar to \begin{WBoth} (see docs there), but writes its contents to %** file \pexa@@sourcename (and sets \pexa@@cursourcename to it). \def\WSource{% \global\let\pexa@@cursourcename\pexa@@sourcename \immediate\openout\verbfwr@writefile\pexa@@sourcename\relax \let\verbfwr@writecs\verbfwr@writefile \let\verbfwr@actwriteline\verbfwr@writeline \verbfwr@default@acts \verbfwr@readenv\verbfwr@write% finish this \cs here } \let\endWSource\endWBoth %** Everything is ignored between \begin{PIgnore}...\end{PIgnore}. The trailing %** Everything in the line of \end{PIgnore} is ignored, even chars after it. %** `...' may contain unnested braces, groups or \ifs. \def\PIgnore{% \verbfwr@default@acts \let\verbfwr@actemitline\@gobble \verbfwr@readenv\verbfwr@write% finish this \cs here } \let\endPIgnore\endWBoth %** Usage: \begin{PSource}[OPTIONS]...\end{PSource}. Same as \begin{PWSource}, %** but doesn't write anything to a file, so it is a little faster. Also, a %** little more stable, since ^^ab hex codes aren't involved. \def\PSource{% \catcode`\ =13 \let\par\@@par \obeylines% ugly hack so \@ifnextchar won't gobble spaces or newlines \@ifnextchar[\pexa@PSource{\pexa@PSource[]}}%] \def\endPSource{\pexa@@undoyindent} %\def\verbfwr@readenv@ii#1\hfuzz{{\end.}{\end{#1}}}% !! \def\pexa@PSource[#1]{% \pexa@doopts{#1}% \expandafter\expandafter\expandafter\pexa@plines@start \expandafter\verbfwr@readenv@i\@currenvir\hfuzz% }% \def\pexa@plines@notverbatim{% %\catcode`~=13 %\def~{\nobreakspace{}}% \catcode`\ =10 % restore to be space \let\pexa@setupverb\relax% call this before \pexa@setupverb \let\pexa@default@verbatimfont\relax \def\verbfwr@read##1##2##3{\verbfwr@noter@read0}% } \def\pexa@plines@expandeach#1{% \expandafter\def\expandafter\reserved@a\expandafter{% \expandafter\relax \pexa@@eachline{#1}\cr}% } %** @param #1 `\end{PSource}' in catcode 12 %** @param #2 `\end {PSource}' with normal catcodes \def\pexa@plines@start#1#2{% \def\pexa@@starthalign{}% \def\pexa@@dohalign{}% %** Must be fully expandable. \let\pexa@@eachline\@firstofone %%\show\pexa@default@srcstyle \expandafter\ifx\csname pexa@ss@\pexa@default@srcstyle\endcsname\relax \def\verbfwr@actemitlineone{% not called if there are no lines! \let\verbfwr@actemitlineone\@empty \pexa@starthalign% one @ \pexa@@beforefirstline \noalign\bgroup }% \def\verbfwr@actemitline##1{% get line in \VerbFwrLines %\edef\reserved@a{\def\noexpand\VerbFwrLines{\noexpand\pexa@@eachline{\VerbFwrLines}}}% %\expandafter\egroup\reserved@a% \noalign, pass \VerbFwrLines inside the column %\relax\VerbFwrLines\cr%\relax<.\VerbFwrLines.>\cr% % vvv This solution makes it possible for \pexa@@eachline to contain `&' % vvv Dat: a beginning \edef\reserved@a{\relax...} is necessary to prevent % TeX looking for \span, \omit etc. %\edef\reserved@a{\relax\expandafter\pexa@@eachline\expandafter{\VerbFwrLines}\cr}% \expandafter\pexa@plines@expandeach\expandafter{\VerbFwrLines}% \expandafter\egroup\reserved@a% \noalign, pass \VerbFwrLines inside the column % \noalign\bgroup }% \def\verbfwr@actemitdone{% called if there were no lines \ifx\verbfwr@actemitlineone\@empty \egroup% \noalign \egroup% \halign \fi }% \expandafter\let\expandafter\pexa@plines@@setup\csname pexa@sh@\pexa@default@srcstyle\endcsname% this sets up further \catcodes \else %\expandafter\pexa@setup@calcwidths\expandafter{\pexa@default@usewidth}% % Dat: no need to save/restore \parindent here, becasuse we do \noindent \def\verbfwr@actemitlineone{\let\verbfwr@actemitlineone\@empty}% \let\verbfwr@actemitdone\@empty \def\verbfwr@actemitline##1{\expandafter\pexa@plines@parpre\expandafter\pexa@@eachline\expandafter{\VerbFwrLines}\@@par}% \expandafter\let\expandafter\pexa@plines@@setup\csname pexa@ss@\pexa@default@srcstyle\endcsname% this sets up further \catcodes \everypar{}% % Dat: too early to set \hsize now \let\pexa@@dopars\@empty \fi % % vvv Similar to \PexaShowSourceMany %\leavevmode% for \@bsphack %\@bsphack% don't have to save \spacefactor \let\par\@@par% make \vskip work fine?? \expandafter\pexa@setup@calcwidths\expandafter{\pexa@default@usewidth}% \begingroup \pexa@@calcwidths% calculate leftmost \tabskip \@tempdima\PexaWidth \advance\@tempdima\tabskip \edef\reserved@a{\def\noexpand\pexa@@tolinewidth{to\the\@tempdima}}% \expandafter\endgroup\reserved@a %\advance\linewidth\@totalleftma %\def\pexa@@tolinewidth{to\linewidth}% % \pexa@xyindent\pexa@default@xindent\pexa@default@yindent % \pexa@plines@notverbatim \pexa@plines@@setup % ^^^ calls \pexa@s?@..., which calls \pexa@show@pars or \pexa@show@halign, % which calls \pexa@setupverb and \pexa@@calcwidths, which modifies % \tabskip and \linewidth \advance\leftskip-1\leftskip% keep stretch \advance\rightskip-1\rightskip% keep stretch %\leftskip\z@skip \rightskip\z@skip % Dat: needed by \begin{egysoros} -- why?? %\advance\hsize\rightskip %\showthe\hsize %\showthe\leftskip %\showthe\rightskip \let\par\@@par \obeylines \verbfwr@read{#1}\@gobble{% read verbatim data line-by-line, call \verfwr@act... as callbacks %\@esphack #2% }% % Don't put anything else here, will be read by \verbfwr@read } % vvv Dat: \leavevmode would insert \indent and cancels \noindent % vvv Dat: \null is needed for empty lines with no \catcode change for ^^M \def\pexa@plines@parpre{\pexa@@vts\noindent\null \kern\tabskip% !! added at Tue May 18 11:14:58 CEST 2004; for \begin{PSource} in \begin{description}; does it hurt lakk?? \pexa@@everyparr}% % --- Adding accents and breaking ligatures \edef\pexa@quoteleft {\relax\string`} \edef\pexa@quoteright{\relax\string'} \edef\pexa@hyphen {\relax\string-\relax}% \edef\pexa@comma {\relax\string,} \edef\pexa@less {\relax\string<} \edef\pexa@greater {\relax\string>} \let\pexa@@oldH\H% default \let\pexa@@olddot\.% default \def\pexa@@otone{OT1} \def\pexa@H#1{% \H accent missing from {OT1}{cmtt} \ifx\f@encoding\pexa@@otone% Imp: don't hard-wire cmr?? \pexa@curprop\iftrue% \pexa@@oldH#1% \else% \pexa@add@accentx{125}{\fontencoding{OT1}\fontfamily{cmr}\selectfont}#1% not expandable \fi% \else% \pexa@@oldH#1% {T1}{cmtt} is OK \fi% }% \def\pexa@dot#1{% \. accent missing from {OT1}{cmtt} \ifx\f@encoding\pexa@@otone% \pexa@curprop\iftrue% \pexa@@dot#1% \else% \pexa@add@accentx{95}{\fontencoding{OT1}\fontfamily{cmr}\selectfont}#1% not expandable \fi% \else% \pexa@@olddot#1% {T1}{cmtt} is OK \fi% }% %** Derived from LaTeX \add@accent %** @param #1 0..255 code of the accent %** @param #2 commands to load the accent font %** @param #3 char to put the accent on \def\pexa@add@accentx#1#2#3{\hmode@bgroup \let\hmode@start@before@group\@firstofone \setbox\@tempboxa\hbox{% #3\global\mathchardef\accent@spacefactor\spacefactor}% \edef\@thefont{\the\font}% #2% select font \accent#1% \@thefont#3% \egroup\spacefactor\accent@spacefactor } \def\pexa@@zero{0} %** `\pexa@curprop\iftrue' behaves like `\iftrue' if the current font is %** proportional; or `\iffalse' if the current font is fixed-width. %** Cannot create an `\ifpexa@curprop' macro, since it won't be treated properly %** when skipped (only \let\ifpexa@curprop\iffalse and \let\ifpexa@curprop\iftrue %** is treated properly). %** Ruins \reserved@a %** Imp: better in pexample.sty \def\pexa@curprop#1{% \expandafter\let\expandafter\reserved@a\csname prop@\fontname\font\endcsname \ifnum10>1\reserved@a% no ` %' here; calculate \reserved@a for the first time \def\reserved@a{1}% \let\reserved@a0 won't work with `\ifnum' \ifdim\fontdimen3\font=\z@ \ifdim\fontdimen4\font=\z@ \begingroup \setbox0=\hbox{i}% \setbox1=\hbox{W}% \ifdim\wd0=\wd1 % \aftergroup\let\aftergroup\reserved@a\aftergroup\pexa@@zero% found a fixed-width font \fi \endgroup \fi \fi \expandafter\let\csname prop@\fontname\font\endcsname\reserved@a \fi \csname if\if\reserved@a0false\else true\fi\endcsname }% % --- %** Acts based on usewidth= %** @in \linewidth already decreased by \@totalleftmargin and total_right margin %** @out \PexaWidth = source+rule+sample a dimen register or tokens ending %** by space `1.2pt '; \PexaWidth doesn't contain left or right indentation %** @out \pexa@@calcwidths to set \tabskip to point to final left margin %** to decrease \linewidth by some margins %** Modifies \linewidth: decreases by \leftskip %** @param #1 value of \pexa@default@usewidth: 0, 1 or 2 \def\pexa@setup@calcwidths#1{% \if#12% usewidth=skipwidth \begingroup \@tempdimb\linewidth % Dat: we definitely mustn't do \advance\@tempdimb-\@totalleftmargin, % because \linewidth has never contained the value of \@totalleftmargin \advance\@tempdimb-\rightskip \advance\@tempdimb-\leftskip \edef\PexaWidth{\def\noexpand\PexaWidth{\the\@tempdimb\space}}% \expandafter\endgroup\PexaWidth % Dat: we really don't want to say \let\PexaWidth\@tempdimb here, because % \small in \pexa@defaut@verbatimfont will clobber it later \def\pexa@@calcwidths{% % vvv this is called in \pexa@show@halign to set the left margin properly \tabskip\leftskip \advance\tabskip\@totalleftmargin %\advance\linewidth-\@totalleftmargin% BUGFIX at Tue Dec 23 19:55:06 CET 2003 -- fixes \PexaShowBoth %\advance\linewidth-\leftskip% Dat: enabling this makes \begin{egysoros} buggy (too narrow line). BUGFIX at Tue Mar 30 17:40:50 CEST 2004 %\advance\linewidth-\rightskip% !! is this used? and below? (two) }% \else\if#11% usewidth=linewidth \let\PexaWidth\linewidth \def\pexa@@calcwidths{\tabskip\@totalleftmargin %!!\advance\linewidth-\@totalleftmargin% BUGFIX at Tue Dec 23 19:55:06 CET 2003 -- fixes \PexaShowBoth }% \else% usewidth=hsize \let\PexaWidth\hsize \def\pexa@@calcwidths{\tabskip\z@ \let\linewidth\hsize}% \fi\fi } \def\PexaShowSample#1{% \begingroup \pexa@doopts{#1}% % vvv Dat: may contain .45\PexaWidth % \expandafter\@temptokena\expandafter{\pexa@default@samplewidth}% % !! test this \@tempdimb\PexaWidth\relax \let\PexaWidth\@tempdimb \@tempdima\pexa@default@samplewidth\relax% do arithmetic: .5\PexaWidth \edef\PexaWidth{\the\@tempdimb\space}% \edef\reserved@a{\noexpand\PexaShowSampleMany {\the\@tempdima}% 1 {\pexa@default@boxstyle}% 2 }% %%\show\reserved@a \expandafter\endgroup\reserved@a }% %** Shows the Sample in lines on their own. Page breaks disallowed. %** @param #1 dimen: width of Sample (\hsize, paragraph width). Examples: .4\hsize >= .4\linewidth %** @param #2 boxing style of Sample: %** `h': \hbox %** `v': \vtop %** 'm': is minipage with \vtop %** 'p': is PexaMinipage with \vtop (recommended) %** `V': \vbox %** 'M': is minipage with \vbox %** 'P': is PexaMinipage with \vbox %** 'G': no boxing, only \begingroup .. \endgroup \def\PexaShowSampleMany#1#2{% \if#2G\else \if#2h\else \vskip\z@skip% leave horizontal mode \fi\fi \csname pexa@setsample@#2\endcsname{#1}% } % --- \def\pexa@@tolinewidth{to\PexaWidth} \def\pexa@@calcwidths{} %** Default: align left \def\pexa@@preamble{##\hfil\tabskip\z@ plus1fill} \def\pexa@@preamblecr{\cr}% or {\cr\noalign{\nobreak}} %** Don't allow a page break before Sample is over \def\pexa@preamblecr@keep{\cr\noalign{% \ifdim-\pexa@@cnta\baselineskip<\@tempdima\nobreak\fi}}% %** Default \let\pexa@@beforehalign\@empty \let\pexa@@firstlinebeg\@empty \let\pexa@@beforefirstline\@empty \def\pexa@default@addlinenum{0}% start line numbering from \pexa@default@addlinenum+1 \def\pexa@@cnta{0}% \let\pexa@@cntb\pexa@default@addlinenum% default %** Contains width of linenumbersep=, too \def\pexa@default@linenumberwidth{0pt}% %** Better than `~', because not affected by amsxtra.sty's redefinition. \def\pexa@default@space{\leavevmode\nobreak\ }% %** @example \enspace, \quad, \hbox{\space} etc. %** @example \def\pexa@default@linenumberwidth{\parindent} \def\pexa@default@linenumbersep{\enspace}% \def\pexa@default@linenumbersep{}% %** No effect, will be overridden later. \def\pexa@default@linenumberformat{} %** Clobbers \@tempcnta. \gdef#1 %** @param #1 a macro \cs name expanding to a number \def\pexa@decr#1{\@tempcnta#1\advance\@tempcnta\m@ne\global\edef#1{\the\@tempcnta}} %** A tab is really more complicated than 8 spaces, but correct tabbing would %** be hard to implement here. \def\pexa@setuptab{% \catcode9 13 \begingroup\lccode`~=9 \lowercase{\endgroup\def~}{\ \ \ \ \ \ \ \ }% } %** Called by \begin{PLines}, \PexaShowBoth, \PVerb etc. \def\pexa@setupverb{% \ifnum\the\catcode`^=13 % already active, is \pexa@dohex \let\do\@makeother \dospecials \catcode`^=13 \else \let\do\@makeother \dospecials% \catcode`\\=12 etc. (see latex.ltx for \dospecials) \fi % Dat: `latex --translate-file il1-t1' emits accented glyph to file as a single char % ^^^ Dat: don't modify catcode of 127..255, so accents will come out right \catcode`\ =13 \lccode`~=32 \lowercase{\let~\pexa@default@space}% make each space count, but not a visible space -- \@xobeysp defined in latex.ltx % ^^^ Dat: former \let~\@xobeysp % Common ligatures in monospaced fonts: `` '' ,, -- -Z << >> !` ?` (where Z has ASCII code 127) % Dat: compare this code with \@noligs of latex.ltx -- this is more efficient % vvv Dat: this has no effect on \pexa@cverb@outerc (and neither on inner % \PVerb), but that is hoped to have its \break{}s already separating. \catcode``13 \lccode`~``\lowercase{\let~\pexa@quoteleft}% break Spanish ?` and !` ligatures in cmtt10.mf (and also the '' ligature in) \catcode`-13 \lccode`~`-\lowercase{\let~\pexa@hyphen}% break ligatures --, --- and -Z (where Z has ascii code 127) \catcode`'13 \lccode`~`'\lowercase{\let~\pexa@quoteright}% break ligature '' \catcode`,13 \lccode`~`,\lowercase{\let~\pexa@comma}% break ligature ,, \catcode`<13 \lccode`~`<\lowercase{\let~\pexa@less}% break ligature << \catcode`>13 \lccode`~`>\lowercase{\let~\pexa@greater}% break ligature >> % \let\pexa@@oldH\H \let\H\pexa@H% \let\pexa@@olddot\.\let\.\pexa@dot% } %** Not \pexa@default@verbatimfont. This is used by load options to %** examplep.sty \def\pexa@@verbatimfont{\verbatim@font}% in latex.ltx \def\pexa@setupverb@read{% \catcode`\^13 \lccode`~`^\lowercase{\let~\pexa@dohex}% Dat: allow ^^e1 hex emulation (setting catcode=7 won't do good because of literal `^'s) } \def\pexa@starthalign{% %\zzzzz\show\pexa@@tolinewidth\showthe\PexaWidth \halign\pexa@@tolinewidth\bgroup \pexa@@vts% run only once \pexa@decr\pexa@@cnta \pexa@decr\pexa@@cntb% must be \global because of \halign, but don't want to clobber \@tempcnt* \global{}ly \span\pexa@@preamble % expand preamble right now: `##\hfil' \cr% Dat: \pexa@@preamblecr isn't called _before_ the 1st line }% \def\pexa@@starthalign{\pexa@starthalign}% \def\pexa@@dohalign{% \pexa@@beforefirstline% called after the \cr of the preamble, should contain \noalign{...} %\relax\pexa@setupverb@read% Dat: already called \relax\input\pexa@@cursourcename\space % ^^^ Dat: \relax instead of \space would begin an extra line and demand % an extra \cr (at end) \egroup% terminate \halign }% %** Call this inside \begingroup, from a macro %** Caller may set \pexa@@beforehalign, \tabskip; should pexa@@ \def\pexa@show@halign{% \pexa@setupverb \pexa@setuptab \pexa@default@verbatimfont \let\par\pexa@@preamblecr \obeylines% must set \par before this; so each ^^M will emit a \cr plus more \def\pexa@@vts{% \pexa@@firstlinebeg %\vrule height\topskip width\z@ %!! try to do without this \global\let\pexa@@vts\relax }% \pexa@@calcwidths \pexa@@beforehalign % Dat: \everypar{...} has no effect here (inside \halign) \pexa@@starthalign \pexa@@dohalign } \def\pexa@@dopars{% doesn't called by \begin{egysoros}, called by \begin{code} \begingroup% Dat: don't do a \vbox, because it resets \parshape \everypar{% \setbox0\lastbox% remove \indent since \noindent is too late \pexa@@vts\pexa@@everyparr}% %\showthe\linewidth %\showthe\leftskip \hsize\linewidth \advance\hsize\leftskip% !! already done by \pexa@show@pars?? -- maybe fixup after hook? \advance\hsize\rightskip \pexa@setupverb@read \relax\input\pexa@@cursourcename\space \endgroup }% \def\pexa@show@pars{% modelled after \pexa@ss@left \pexa@setupverb% Dat: we still have normal catcodes for \dospecials before calling this \pexa@setuptab %\showthe\catcode9 %\show\pexa@default@verbatimfont \pexa@default@verbatimfont %\show\pexa@@calcwidths \parfillskip\@flushglue \parskip\z@skip % \pexa@@calcwidths% doesn't always change \linewidth; sets \tabskip % Dat: now \tabskip is the left indentation and \linewidth is the desired % width of text. From that we calculate \leftskip and \hsize. \leftskip\tabskip% as calculated by \pexa@@calcwidths \hsize\linewidth% !! \PexaWidth?, respect \leftskip etc. (\pexa@setup@calcwidths) \advance\hsize\leftskip \advance\hsize\rightskip %\leftskip0pt %foo\par %\show\leftskip \showthe\leftskip % % Dat: don't change and don't use \parindent \def\par{\hskip\z@skip\@@par}% obey empty lines \obeylines \def\pexa@@vts{% \pexa@@firstlinebeg %\vrule height\topskip width\z@% superfluous, ruins \baselineskip \global\let\pexa@@vts\relax }% %\show\leftskip \showthe\leftskip \pexa@@showparshook % \raggedright etc. % Dat: \pexa@@dopars is empty for \begin{egysoros}, not empty for \begin{code} \pexa@@dopars } \def\pexa@@showparshook{} % Dat: used by source-par-align= % Dat: \centering, \raggedright and \raggedleft clobbers these: % \\, \rightskip, \leftskip, \parindent, \parfillskip, \@rightskip. % We ignore \\, \parindent and \@rightskip, we have to modifye (but not % clobber) \rightskip, \leftskip and \parfillskip only. So we have our % own macros. \def\pexa@paralign@center{% similar to \centering \leftskip 1\leftskip plus 1fil\relax \rightskip1\rightskip plus 1fil\relax \parfillskip\z@skip} \def\pexa@paralign@left{% similar to \raggedright % Dat: \leftskip and \rightskip are cumulative \leftskip 1\leftskip\relax \rightskip1\rightskip plus 1fill\relax \parfillskip\z@skip}% %\parfillskip\@flushglue}% Imp: is \@flushglue better here for the line breaking algorithm? \def\pexa@paralign@right{% similar to \raggedleft \leftskip 1\leftskip plus 1fil\relax \rightskip1\rightskip\relax \parfillskip\z@skip} \def\pexa@paralign@justify{% last line left aligned, others justified \leftskip 1\leftskip\relax \rightskip1\rightskip\relax \parfillskip\@flushglue} \def\pexa@paralign@justjust{% all lines justified => lot of Underfull \hbox{}es \leftskip 1\leftskip\relax \rightskip1\rightskip\relax \parfillskip\z@skip} %** readded at Thu Dec 21 19:02:12 CET 2006 %** @param #1 filename %** @param #2 options \def\PexaInputSource#1#2{% \begingroup \edef\pexa@@cursourcename{#1}% \PexaShowSource{#2}% \endgroup } %** @param #1 options %** Dat: not affected by samplewidth= \def\PexaShowSource#1{% \clubpenalty\@clubpenalty % allow club lines after \paragraph{x}y\par \begingroup \pexa@doopts{#1}% \edef\reserved@a{\noexpand\PexaShowSourceMany {\pexa@default@srcstyle}% 1 {\pexa@default@usewidth}% 2 {\pexa@default@xindent}% 3 {\pexa@default@yindent}% 4 }% \expandafter\endgroup\reserved@a } %** Show the source of the previous \begin{WSource} / \begin{WBoth}, %** @param #1 source display style: %** `left': aligned to the left margin %** `center': center aligned (individual lines left aligned) %** `right': right aligned (individual lines left aligned) %** `leftnum': left aligned with left aligned line numbering %** `leftnumcol': right flushed line numbering . left flushed source line %** `leftnumhang': marginpar-hanging line numbering . left flushed source line %** `leftboth': similar to \PexaShowBoth, but uses \PVerb (works only with \PSource) %** `leftleft': two columns, left aligned with a \pexa@@vrule (works only with \PSource) %** @param #2 width selector: `0': use full \hsize, `1': use \linewidth only, %** `2': use \linewidth-\leftskip-\rightskip (because of \narrower) %** @param #3 xindent: `none' | `deeper' | `narrower' | `deepright' %** @param #4 yindent: `none' | `deeper' \def\PexaShowSourceMany#1#2#3#4{% \pexa@setup@calcwidths{#2}% \begingroup \pexa@xyindent{#3}{#4}% % Dat: we don't need \pexa@@calcwidths now, it will be called later. %\pexa@@calcwidths % \leftskip, \@totalleftmargin -> \tabskip %\showthe\tabskip \expandafter\ifx\csname pexa@ss@#1\endcsname\relax \csname pexa@sh@#1\endcsname% do the actual \input \else\csname pexa@ss@#1\endcsname\fi \pexa@@undoyindent \pexa@endparenvgroup }% \def\pexa@movedeeper{% \ifnum\@listdepth=\z@ \leftmargin\z@ \rightmargin\z@ \fi% remove garbage \edef\pexa@@restore@xmargins{% \noexpand\leftmargin \the\leftmargin \noexpand\rightmargin\the\rightmargin }% \ifnum \@listdepth >5\relax \@toodeep \else %\showthe\@listdepth \global\advance\@listdepth\@ne \aftergroup\global\aftergroup\advance\aftergroup\@listdepth\aftergroup\m@ne \fi \rightmargin\z@ % vvv defined in size*.clo, sets \leftmargin, \rightmargin, \topsep, \parsep % \itemsep etc. \csname @list\romannumeral\the\@listdepth\endcsname \let\pexa@@oncedeeper\@empty } \let\pexa@@restore@xmargins\@empty % The \pexa@doxindent@... commands to the following: % % -- clobber \leftmargin and \rightmargin to an unused value % -- set \parshape\z@ % -- decrease \linewidth by additional left and right margin % -- increase \@totalleftmargin by additional right margin % -- increase \leftskip by more additional left margin % -- increase \rightskip by more additional right margin \def\pexa@doxindent@none{% %\advance\@totalleftmargin 5pt \parshape\z@ }% \def\pexa@doxindent@deeper{% \pexa@@oncedeeper %\showthe\linewidth %\showthe\rightmargin % % vvv do proper Overfull \hbox calculations % vvv not done by \pexa@@oncedeeper, for \begin{egysoros} at Wed Jul 7 08:20:23 CEST 2004 \advance\linewidth -\rightmargin \advance\linewidth -\leftmargin % \advance\@totalleftmargin \leftmargin % do indentation %\advance\leftskip1em \parshape\z@% \parshape unused, converted to \tabskip } %** deeppre: move deeper, but keep old \leftmargin and \rightmargin \def\pexa@doxindent@deeppre{% \pexa@@oncedeeper %\show\pexa@@restore@xmargins \pexa@@restore@xmargins % vvv Dat: removed for lakkbook at Fri Mar 26 17:24:23 CET 2004: % \linewidth and \@totalleftmargin has already been modified; and % \leftmargin and \rightmargin doesn't count % !! make it indent with \begin{PSource} -- or =deeper? \parshape\z@% \parshape unused, converted to \tabskip } \def\pexa@doxindent@narrower{\narrower}% \def\pexa@doxindent@deepright{% \pexa@@oncedeeper \rightmargin\leftmargin \advance\linewidth -\rightmargin \advance\linewidth -\leftmargin \advance\@totalleftmargin \leftmargin \parshape\z@% \parshape unused, converted to \tabskip } \def\pexa@@str@addvspace{\addvspace} \def\pexa@undo@nobreak{% \if@nobreak \@nobreakfalse \ifnum\clubpenalty=\@M \clubpenalty\@clubpenalty \fi \fi} \def\pexa@doyindent@none{\let\pexa@@undoyindent\@empty \pexa@undo@nobreak \@endpetrue\@doendpe % automatic \noindent for text coming -- if not separated by newline }% \def\pexa@doyindent@deeper{% \edef\pexa@@restoreleftskip{\leftskip\the\leftskip\space}% \@rightskip\rightskip \pexa@@oncedeeper \@trivlist % calculates \@topsepadd depending on \ifvmode %\show\par \global\@newlistfalse \pexa@undo@nobreak \let\makelabel\@firstofone \let\@itemlabel\@empty \pexa@@restoreleftskip \let\pexa@@restoreleftskip\@undefined \def\pexa@@undoyindent{% % Dat: now \pexa@default@addvspace shouldn't contain \addvspace itself. Brr. %\ifx\pexa@default@addvspace\pexa@@str@addvspace\else % \let\addvspace\pexa@default@addvspace % used by \@endparenv called from \endtrivlist %\fi %\def\@endparenv{% original in latex.ltx % \addpenalty\@endparpenalty\addvspace\@topsepadd\@endpetrue} \def\@endparenv{% original latex.ltx \addpenalty\@endparpenalty \pexa@default@addvspace@bottom\@topsepadd \@endpetrue} \global\@newlistfalse \endtrivlist}% %\showthe\@topsepadd %\show\pexa@default@addvspace@top %\pexa@default@addvspace@top\@topsepadd % as calculated by \@trivlist \expandafter\pexa@default@addvspace@top\expandafter{\the\@topsepadd}% !! as calculated by \@trivlist } \def\pexa@sh@left{\pexa@show@halign} \def\pexa@ss@left{% \begin{egysoros} \def\pexa@@everyparr{}% \pexa@show@pars } \def\pexa@sh@center{% \def\pexa@@beforehalign{\advance\tabskip\z@ plus1fill }% \def\pexa@@preamble{####\hfil\tabskip\z@ plus1fill }% \pexa@show@halign } \def\pexa@sh@right{% \def\pexa@@preamble{####\hfil\tabskip\z@}% \def\pexa@@beforehalign{\tabskip\z@ plus1fill }% \pexa@show@halign } %** Similar to .dtx line numbering \def\pexa@sh@leftnum{% \def\pexa@@preamble{{\pexa@default@linenumberformat}####\hfil\tabskip\z@ plus1fill }% \let\pexa@@cntb\pexa@default@addlinenum \pexa@show@halign } % %** Called from within an alignment (preamble). \def\pexa@pre@leftboth@do{% % Dat: \@tempdima has been set by \pexa@@beforehalign to the available % width for the source % Dat: \hb@xt@ will emit Overfull \hbox correctly \if0\pexa@default@allowshrink\setbox0\hb@xt@\@tempdima\bgroup \else\setbox0\hbox\bgroup\fi \expandafter\expandafter\expandafter\PVerbOpt \expandafter\expandafter\expandafter,% \expandafter\expandafter\expandafter{% \expandafter\@gobble\reserved@a}% \hfil \egroup \labelsep\FBHLastDepth% Dat: I hope that \labelsep isn't used in \reserved@a \global\FBHLastDepth\dp0 \setbox1\hbox{\reserved@a}% just a measurement \ifdim\FBHLastDepth<\dp1 \global\FBHLastDepth\dp1 \fi % % vvv let \vrules meet. Better than \strut \ifdim\baselineskip>\labelsep % Dat: safe to modify \@tempdimb here, because we're inside a group of an alignment \@tempdimb\baselineskip \advance\@tempdimb-\labelsep \vrule\@height\@tempdimb\@width\z@\space \fi } \def\pexa@pre@leftboth@put{% \advance\@tempdima-\wd0 %%\show\pexa@default@allowshrink \if0\pexa@default@allowshrink\box0 \else \unhbox0 \ifdim\@tempdima>\z@\if2\pexa@default@allowshrink\else \kern\@tempdima \null \fi\fi \fi }% \def\pexa@pre@leftboth@beforehalign{% %\def~{;;}%\nobreakspace{}}% \let\\\relax% ignore newlines in sample \lineskiplimit\z@ \lineskip\z@% !! more liberal, accept negative \newdimen\FBHLastDepth% for \global \FBHLastDepth\baselineskip % %\show\PexaWidth \@tempdimb\PexaWidth\relax \let\PexaWidth\@tempdimb \@tempdima-\pexa@default@samplewidth\relax% do arithmetic: .5\PexaWidth \advance\@tempdima\PexaWidth \edef\PexaWidth{\the\@tempdimb\space}% %\@tempdima\PexaWidth %\advance\@tempdima-\pexa@default@samplewidth \setbox1\hbox{\pexa@@vrule{}}% \advance\@tempdima-\wd1 %\hrule height 1pt width 10pt }% \def\pexa@sh@leftboth{% \let\pexa@@beforehalign\pexa@pre@leftboth@beforehalign \def\pexa@@eachline##1{##1&&##1}% \def\pexa@@preamble{% \def\reserved@a{####}% %\show\reserved@a% \pexa@pre@leftboth@do \pexa@pre@leftboth@put % ^^^ \@gobble removes \relax inserted by \pexa@plines@start \hfil\tabskip\z@skip& \pexa@@vrule{}####&% Dat: \copy2 wouldn't work by this time {####}\tabskip\z@ plus1fill\hfil}% Dat: \selectlanguage inside #### needs an extra {group} \pexa@plines@notverbatim \pexa@show@halign } % \def\pexa@pre@leftleft@measure{% % Dat: \@tempdima has been set by \pexa@@beforehalign to the available % width for the source % Dat: \hb@xt@ will emit Overfull \hbox correctly \setbox0\hbox{\reserved@a}% just a measurement \ifdim\FBHLastDepth<\dp0 \global\FBHLastDepth\dp0 \fi }% \def\pexa@ampersand{&}% \def\pexa@sh@leftleft{% \let\pexa@@beforehalign\pexa@pre@leftboth@beforehalign \def\pexa@@preamble{% \relax \ifdim\baselineskip>\FBHLastDepth % Dat: safe to modify \@tempdimb here, because we're inside a group of an alignment \@tempdimb\baselineskip \advance\@tempdimb-\FBHLastDepth \vrule\@height\@tempdimb\@width\z@\space \fi % vvv let \vrules meet. Better than \strut \global\FBHLastDepth\z@ \def\reserved@a{####}% \pexa@pre@leftleft@measure \pexa@pre@leftboth@put \hfil\tabskip\z@skip&\pexa@@vrule{}\pexa@ampersand####&% \def\reserved@a{####}% \pexa@pre@leftleft@measure \unhbox0 \tabskip\z@ plus1fill\hfil}% \pexa@plines@notverbatim \pexa@show@halign } % \def\pexa@pre@numcol@eachrow{{\pexa@default@linenumberformat}&}% \def\pexa@sh@leftnumcol{% \def\pexa@@preamble{\hfil\pexa@pre@numcol@eachrow####&####\hfil\tabskip\z@ plus1fill }% \let\pexa@@cntb\pexa@default@addlinenum \pexa@show@halign } % \def\pexa@sh@leftnumhang{% \def\pexa@@preamble{\hb@xt@\pexa@default@linenumberwidth{\hss\pexa@default@linenumberformat}####\hfil\tabskip\z@ plus1fill }% \let\pexa@@cntb\pexa@default@addlinenum \pexa@show@halign } \def\pexa@ss@leftnumhang{% \def\pexa@@everyparr{% \pexa@decr\pexa@@cntb \hb@xt@\pexa@default@linenumberwidth{\hss\pexa@default@linenumberformat}% } \let\pexa@@cntb\pexa@default@addlinenum \pexa@show@pars } %** Default. %** @param #1 desired height; specified by horizontal neighbours if empty \def\pexa@@vrule#1{% %\ifx\hfuzz#1\hfuzz \kern\tabcolsep \kern-.5\tabcolsep \kern-.5\arrayrulewidth \ifx\hfuzz#1\hfuzz \vrule\@width\arrayrulewidth \else \vrule\@width\arrayrulewidth\@height#1\relax \fi \kern-\arrayrulewidth \kern.5\arrayrulewidth \kern.5\tabcolsep %\else %\fi } %** @param #1 to gobble a space token \def\pexa@doopt#1,{% \if,\noexpand#1,% ignore multiple commas (#1 is empty) \expandafter\pexa@doopt \else \csname fi\endcsname% don't count as `\fi' when being skipped \pexa@doopt@low#1,=,% \fi } \iftrue\csname fi\endcsname% \def\pexa@doopt@low contains `\fi'. Make it skippable. %** @param #1 is here for gobbling space tokens %** @param #4 \fi -- will be ignored \def\pexa@doopt@low#1#2=#3,#4\fi{% % Dat: Normal case: #1#2 is key, #3 is value, #4 is `=,' % Dat: MissingArg case: #1#2 is `key,', #3 is empty, #4 is empty % Dat: Terminator case: #1#2 is `\hfuzz,', #3 is empty, #4 is empty % Dat: OnlySpace case: #1 is `,', #2 is empty, #3 is empty, #4 is empty \ifx\relax#4\relax% MissingArg or Terminator \ifx#1\hfuzz% Terminator \else \if,\noexpand#1\else% OnlySpace case \pexa@doopt@missingval#1#2% #2 already contains comma at end \fi \expandafter\expandafter\expandafter\pexa@doopt \fi \else% Normal \expandafter\ifx\csname pexa@opt@@#1#2\endcsname\hfuzz \expandafter\ifx\csname pexa@opt@@#1#2@#3\endcsname\relax \PackageError{examplep}{Invalid arg for option: #1#2 = #3}\@ehc \else \csname pexa@opt@@#1#2@#3\endcsname \fi \else \expandafter\ifx\csname pexa@opt@@#1#2\endcsname\relax \PackageError{examplep}{Unknown option: #1#2 (= #3)}\@ehc \else \csname pexa@opt@@#1#2\endcsname{#3}% \fi \fi \expandafter\pexa@doopt \fi } \def\pexa@doopt@missingval#1,{% \PackageError{examplep}{Value (=) missing for option: #1}\@ehc } %** Dat: Spaces and newlines at end of #1 are not ignored, so please prefix %** them with a comma, e.g \pexa@doopts{foo=bar, } %** @param #1 comma-separated optoinname=value pairs \def\pexa@doopts#1{\pexa@doopt #1,\hfuzz,}% \let\PexaDefaults\pexa@doopts \def\pexa@opt@@samplewidth#1{\def\pexa@default@samplewidth{#1}}% \def\pexa@opt@@firstlinenum#1{% \begingroup\@tempcnta\number-#1\relax \advance\@tempcnta\@ne \edef\reserved@a{\def\noexpand\pexa@default@addlinenum{\the\@tempcnta}}% \expandafter\endgroup\reserved@a } %** A dimension. Depth that yalign=v should neglect at the bottom of the Sample. %** Should not be too much (i.e more than the depth of `g'), because a page %** break might occur just below the Sample, and too much text would be put %** below the bottom margin. \def\pexa@opt@@vextrabotdepth#1{\def\pexa@default@vextrabotdepth{#1}} \def\pexa@opt@@addlinenum#1{\def\pexa@default@addlinenum{\number-#1}} \def\pexa@opt@@linenumbersep#1{\def\pexa@default@linenumbersep{#1}} \def\pexa@opt@@linenumberformat#1{\def\pexa@default@linenumberformat{#1}} %** lb.sty overrides it: \def\pexa@default@addvspace{\lakkbook@vspace} \expandafter\def\csname pexa@opt@@addvspace-top\endcsname#1{\def\pexa@default@addvspace@top{#1}} \expandafter\def\csname pexa@opt@@addvspace-bottom\endcsname#1{\def\pexa@default@addvspace@bottom{#1}} %** Extra vertical distance for aligning top lines at yalign=v \def\pexa@opt@@vextravskip#1{\def\pexa@default@vextravskip{#1}} %** Maximum height of ``small'' sample at yalign=v \def\pexa@opt@@vsmallht#1{\def\pexa@default@vsmallht{#1}} \def\pexa@opt@@linenumberwidth#1{\def\pexa@default@linenumberwidth{#1}} \expandafter\def\csname pexa@opt@@pexaminipage-setuphook\endcsname#1{\def\pexa@@minipage@setuphook{#1}} \def\pexa@opt@@xalign@l{\def\pexa@default@xalign{l}}% \def\pexa@opt@@xalign@r{\def\pexa@default@xalign{r}}% \let\pexa@opt@@xalign\hfuzz %** These correspond to \pexa@sa@u and \pexa@sa@b \def\pexa@opt@@yalign@b{\def\pexa@default@yalign{b}}% align \vtop baselines \def\pexa@opt@@yalign@u{\def\pexa@default@yalign{u}}% align upper corners \def\pexa@opt@@yalign@v{\def\pexa@default@yalign{v}}% align upper corners, with baseline grid \let\pexa@opt@@yalign\hfuzz \def\pexa@opt@@xindent@none{\def\pexa@default@xindent{none}}% \def\pexa@opt@@xindent@deeper{\def\pexa@default@xindent{deeper}}% \def\pexa@opt@@xindent@deeppre{\def\pexa@default@xindent{deeppre}}% \def\pexa@opt@@xindent@narrower{\def\pexa@default@xindent{narrower}}% \def\pexa@opt@@xindent@deepright{\def\pexa@default@xindent{deepright}}% \let\pexa@opt@@xindent\hfuzz \def\pexa@opt@@yindent@none{\def\pexa@default@yindent{none}}% \def\pexa@opt@@yindent@deeper{\def\pexa@default@yindent{deeper}}% \let\pexa@opt@@yindent\hfuzz \def\pexa@opt@@Q@yes{\pexa@activate@Q}% \def\pexa@opt@@Q@unchanged{}% \let\pexa@opt@@Q\hfuzz \def\pexa@opt@@bsdiv@yes{\pexa@activate@bsdiv}% \def\pexa@opt@@bsdiv@unchanged{}% \let\pexa@opt@@bsdiv\hfuzz \def\pexa@opt@@div@yes{\pexa@activate@div}% \def\pexa@opt@@div@unchanged{}% \let\pexa@opt@@div\hfuzz \def\pexa@opt@@url@yes{\pexa@activate@url}% \def\pexa@opt@@url@unchanged{}% \let\pexa@opt@@url\hfuzz \def\pexa@opt@@boxstyle@h{\def\pexa@default@boxstyle{h}}% \def\pexa@opt@@boxstyle@v{\def\pexa@default@boxstyle{v}}% \def\pexa@opt@@boxstyle@m{\def\pexa@default@boxstyle{m}}% \def\pexa@opt@@boxstyle@p{\def\pexa@default@boxstyle{p}}% \def\pexa@opt@@boxstyle@V{\pexa@optboxstyle@noboth\def\pexa@default@boxstyle{V}}% \def\pexa@opt@@boxstyle@M{\pexa@optboxstyle@noboth\def\pexa@default@boxstyle{M}}% \def\pexa@opt@@boxstyle@P{\pexa@optboxstyle@noboth\def\pexa@default@boxstyle{P}}% \def\pexa@opt@@boxstyle@G{\pexa@optboxstyle@noboth\def\pexa@default@boxstyle{G}}% \let\pexa@opt@@boxstyle\hfuzz \let\pexa@optboxstyle@noboth\@empty \def\pexa@optboxstyle@inboth{\PackageError{pexample}{Arg unapplicable for boxstyle=}\@ehc} %** allowshrink=yesmin works only for \begin{PSource}[srcstyle=leftboth] and %** [srcstyle=leftleft] \def\pexa@opt@@allowshrink@force{\def\pexa@default@allowshrink{2}}% \def\pexa@opt@@allowshrink@yes{\def\pexa@default@allowshrink{1}}% \def\pexa@opt@@allowshrink@no{\def\pexa@default@allowshrink{0}}% \let\pexa@opt@@allowshrink\hfuzz \def\pexa@opt@@allowbreak@yes{\def\pexa@default@allowbreak{1}}% \def\pexa@opt@@allowbreak@no{\def\pexa@default@allowbreak{0}}% \let\pexa@opt@@allowbreak\hfuzz \def\pexa@opt@@inlineprefix#1{% % Imp: separate our (local) usage of \verbfwr$percent from other applications % Dat: \if instead of \ifx because of \active: \def\verbfwr@percent##1##2\relax{% \ifx##1\relax\def\VerbFwrLines{}\else \if\noexpand##1#1\relax\def\VerbFwrLines{##2}\else\def\VerbFwrLines{##1##2}\fi\fi}% } \def\pexa@opt@@srcstyle#1{% \expandafter\ifx\csname pexa@sh@#1\endcsname\relax \PackageError{examplep}{Unknown srcstyle: srcstyle = #1}\@ehc \else\edef\pexa@default@srcstyle{#1}\fi% } %** usewidth=hsize: use full \hsize %** usewidth=linewidth: use only \linewidth (\hsize - \@totalleftmargin - %** - total_right_margin) %** usewidth=skipwidth: use \linewidth - \leftskip - \rightskip \def\pexa@opt@@usewidth@skipwidth{\def\pexa@default@usewidth{2}}% \def\pexa@opt@@usewidth@linewidth{\def\pexa@default@usewidth{1}}% \def\pexa@opt@@usewidth@hsize {\def\pexa@default@usewidth{0}}% \let\pexa@opt@@usewidth\hfuzz \expandafter\def\csname pexa@opt@@pverb-leftbreakmin@0\endcsname {\def\pexa@default@pverbleftbreakmin{0}}% \expandafter\def\csname pexa@opt@@pverb-leftbreakmin@1\endcsname {\def\pexa@default@pverbleftbreakmin{1}}% \expandafter\def\csname pexa@opt@@pverb-leftbreakmin@2\endcsname {\def\pexa@default@pverbleftbreakmin{2}}% Dat: higher values not implemented \expandafter\let\csname pexa@opt@@pverb-leftbreakmin\endcsname\hfuzz %\def\pexa@@showparshook{} \expandafter\def\csname pexa@opt@@source-par-align@left\endcsname {\def\pexa@@showparshook{\pexa@paralign@left}} \expandafter\def\csname pexa@opt@@source-par-align@right\endcsname {\def\pexa@@showparshook{\pexa@paralign@right}} \expandafter\def\csname pexa@opt@@source-par-align@center\endcsname {\def\pexa@@showparshook{\pexa@paralign@center}} \expandafter\def\csname pexa@opt@@source-par-align@justify\endcsname{\def\pexa@@showparshook{\pexa@paralign@justify}} \expandafter\def\csname pexa@opt@@source-par-align@justjust\endcsname{\def\pexa@@showparshook{\pexa@paralign@justjust}} \expandafter\def\csname pexa@opt@@source-par-align@unchanged\endcsname{\def\pexa@@showparshook{}} \expandafter\let\csname pexa@opt@@source-par-align\endcsname\hfuzz \expandafter\def\csname pexa@opt@@source-space@invdisc\endcsname {\def\pexa@default@space{\nobreak\discretionary{\char32}{}{\hbox{\ }}\nobreak\hskip\z@skip}}% breakable with discretionary \expandafter\def\csname pexa@opt@@source-space@invbreak\endcsname {\def\pexa@default@space{\ }}% breakable \expandafter\def\csname pexa@opt@@source-space@invfixbreak\endcsname{\def\pexa@default@space{\ {\@tempdima\lastskip\unskip\hskip\@tempdima}}}% breakable \expandafter\def\csname pexa@opt@@source-space@invnobreak\endcsname {\def\pexa@default@space{\leavevmode\nobreak\ }}% nonbreakable \expandafter\def\csname pexa@opt@@source-space@visnobreak\endcsname {\def\pexa@default@space{\char32 }}% visible in \tt, nonbreakable \expandafter\def\csname pexa@opt@@source-space@visbreak\endcsname {\def\pexa@default@space{\hskip\z@skip\char32 \hskip\z@skip}}% visible in \tt, breakable \expandafter\let\csname pexa@opt@@source-space\endcsname\hfuzz % vvv Dat: pverb-space=invbreak will break, but not stretch or shrink % vvv Dat: they need \pexa@cverb@skipbreak@i \expandafter\def\csname pexa@opt@@pverb-space@invbreak\endcsname {\def\pexa@cverb@@space{\ \pexa@cverb@skipbreak@i}}% breakable \expandafter\def\csname pexa@opt@@pverb-space@invdisc\endcsname {\def\pexa@cverb@@space{\nobreak\discretionary{\char32}{}{\hbox{\ }}\nobreak\hskip\z@skip \pexa@cverb@skipbreak@i}}% breakable with discretionary \expandafter\def\csname pexa@opt@@pverb-space@invbreakleft\endcsname{\def\pexa@cverb@@space{\ \nobreak\hskip0pt plus1fil\null\hskip0pt plus-1fil\pexa@cverb@skipbreak@i}}% breakable; SUXX: has infinite stretchability in the middle of a line(??) \expandafter\def\csname pexa@opt@@pverb-space@invnobreak\endcsname{\def\pexa@cverb@@space{\leavevmode\nobreak\ \pexa@cverb@skipbreak@i}}% nonbreakable \expandafter\def\csname pexa@opt@@pverb-space@visnobreak\endcsname{\def\pexa@cverb@@space{\char32 \pexa@cverb@skipbreak@i}}% visible in \tt, nonbreakable \expandafter\def\csname pexa@opt@@pverb-space@visbreak\endcsname {\def\pexa@cverb@@space{\hskip\z@skip\char32 \hskip\z@skip\pexa@cverb@skipbreak@i}}% visible in \tt, breakable % \expandafter\let\csname pexa@opt@@pverb-space\endcsname\hfuzz \expandafter\def\csname pexa@opt@@pverb-hash@full\endcsname{\def\pexa@default@fullhash{1}}% \expandafter\def\csname pexa@opt@@pverb-hash@half\endcsname{\def\pexa@default@fullhash{0}}% \expandafter\let\csname pexa@opt@@pverb-hash\endcsname\hfuzz \expandafter\def\csname pexa@opt@@pverb-hyphenchar@char'30\endcsname {\def\pexa@cverb@@hyphenchar{\hyphenchar\font=\string'30 }}% allow auto-hyphenation of words \expandafter\def\csname pexa@opt@@pverb-hyphenchar@hyphen\endcsname {\def\pexa@cverb@@hyphenchar{\hyphenchar\font=\string`-}}% allow auto-hyphenation of words \expandafter\def\csname pexa@opt@@pverb-hyphenchar@none\endcsname {\def\pexa@cverb@@hyphenchar{\hyphenchar\font=-1 }}% disallow auto-hyphenation of words \expandafter\def\csname pexa@opt@@pverb-hyphenchar@unchanged\endcsname{\def\pexa@cverb@@hyphenchar{}}% keep default \hyphenchar\font \expandafter\let\csname pexa@opt@@pverb-hyphenchar\endcsname\hfuzz \expandafter\def\csname pexa@opt@@pverb-verbatimfont@ttfamily\endcsname {\def\pexa@cverb@@verbatimfont{\ttfamily}}% \expandafter\def\csname pexa@opt@@pverb-verbatimfont@pexavf\endcsname {\def\pexa@cverb@@verbatimfont{\pexa@@verbatimfont}}% \expandafter\def\csname pexa@opt@@pverb-verbatimfont@latexvf\endcsname {\def\pexa@cverb@@verbatimfont{\verbatim@font}}% \expandafter\def\csname pexa@opt@@pverb-verbatimfont@unchanged\endcsname{\def\pexa@cverb@@verbatimfont{}}% \expandafter\let\csname pexa@opt@@pverb-verbatimfont\endcsname\hfuzz \expandafter\def\csname pexa@opt@@psource-verbatimfont@ttfamily\endcsname {\def\pexa@default@verbatimfont{\ttfamily}}% \expandafter\def\csname pexa@opt@@psource-verbatimfont@pexavf\endcsname {\def\pexa@default@verbatimfont{\pexa@@verbatimfont}}% \expandafter\def\csname pexa@opt@@psource-verbatimfont@latexvf\endcsname {\def\pexa@default@verbatimfont{\verbatim@font}}% \expandafter\def\csname pexa@opt@@psource-verbatimfont@unchanged\endcsname{\def\pexa@default@verbatimfont{}}% \expandafter\let\csname pexa@opt@@psource-verbatimfont\endcsname\hfuzz \expandafter\def\csname pexa@opt@@pverb-linebreak@char\endcsname{\def\pexa@cverb@@tbreak{\PexaAllowBreak}}% \expandafter\def\csname pexa@opt@@pverb-linebreak@yes\endcsname {\def\pexa@cverb@@tbreak{\allowbreak}}% allow silent line break \expandafter\def\csname pexa@opt@@pverb-linebreak@no\endcsname {\def\pexa@cverb@@tbreak{}}% disallow line break \expandafter\let\csname pexa@opt@@pverb-linebreak\endcsname\hfuzz \expandafter\def\csname pexa@opt@@pverb-linebreakchar\endcsname#1{\def\pexa@cverb@@tbreakchar{#1}}% \expandafter\def\csname pexa@opt@@pverb-stretchshrink@unchanged\endcsname{\def\pexa@cverb@@stretchshrink{}}% keep default \expandafter\def\csname pexa@opt@@pverb-stretchshrink@yes\endcsname {\def\pexa@cverb@@stretchshrink{\fontdimen3\font=0.166666666\fontdimen6\font\relax \fontdimen4\font=0.111111111\fontdimen6\font\relax}}% Dat: \fontdimen6 is quad \expandafter\def\csname pexa@opt@@pverb-stretchshrink@no\endcsname {\def\pexa@cverb@@stretchshrink{\fontdimen3\font=\z@ \fontdimen4\font=\z@}}% disallow line break \expandafter\let\csname pexa@opt@@pverb-stretchshrink\endcsname\hfuzz \expandafter\def\csname pexa@opt@@baseline-grid@yes\endcsname {\def\pexa@default@baselinegrid{1}}% \expandafter\def\csname pexa@opt@@baseline-grid@no\endcsname {\def\pexa@default@baselinegrid{0}}% \expandafter\let\csname pexa@opt@@baseline-grid\endcsname\hfuzz \expandafter\def\csname pexa@opt@@mp-equation-reset@yes\endcsname {\def\pexa@@equation{}}% \expandafter\def\csname pexa@opt@@mp-equation-reset@no\endcsname {\def\pexa@@equation{equation}}% \expandafter\let\csname pexa@opt@@mp-equation-reset\endcsname\hfuzz % vvv reset auxilary \newcounter{vrcnt} defined by varioref.sty to zero? Recommended: no. \expandafter\def\csname pexa@opt@@mp-varioref-reset@yes\endcsname {\def\pexa@@vrcnt{}}% \expandafter\def\csname pexa@opt@@mp-varioref-reset@no\endcsname {\def\pexa@@vrcnt{vrcnt}}% \expandafter\let\csname pexa@opt@@mp-varioref-reset\endcsname\hfuzz % --- \def\PexaAllowBreak{% \nobreak\hskip\z@skip %\penalty\hyphenpenalty% Dat: this is completely wrong here, because it % allows a line break at the \penalty. TeX will insert \hyphenpenalty or % \exhyphenpenalty automatically. \discretionary{\hbox{\pexa@cverb@@tbreakchar}}{}{}\nobreak\hskip\z@skip} %** `\begin{PSource}[srcstyle=leftboth]' is an alternative of %** `\begin{WBoth}...\PexaShowBoth'. The former allows page breaks between %** lines, but uses the non-\catcode-based \PVerb. \def\PexaShowBoth#1{% \clubpenalty\@clubpenalty % allow club lines after \paragraph{x}y\par \begingroup \pexa@doopts{#1}% \expandafter\@temptokena\expandafter{\pexa@default@samplewidth}% \edef\reserved@a{\noexpand\PexaShowBothMany {\the\@temptokena}% 1 {\pexa@default@xalign}% 2 {\pexa@default@yalign}% 3 {\pexa@default@boxstyle}% 4 {\pexa@default@allowshrink}% 5 {\pexa@default@allowbreak}% 6 {\pexa@default@srcstyle}% 7 {\pexa@default@usewidth}% 8 {{\pexa@default@xindent}{\pexa@default@yindent}}% 9 }% %%\show\reserved@a \expandafter\endgroup\reserved@a }% \def\pexa@xyindent#1#2{% %\expandafter\show\csname pexa@doyindent@#2\endcsname \let\pexa@@oncedeeper\pexa@movedeeper \csname pexa@doyindent@#2\endcsname \vskip\z@skip% do this after doyindent, so \@trivlist\ifvmode might decide about \@partopskip \csname pexa@doxindent@#1\endcsname } %** Shows the Source (to the left) and the Sample (to the right), facing, in %** the specified style. %** @param #1 dimen: width of Sample (\hsize, paragraph width). Example: .4\hsize or .4\PexaWidth %** @param #2 Sample horizontal alignment: `l' is left; `r' is right. `r' %** almost always makes sense only with #4=`h' %** @param #3 vertical alignment of Sample and Source: `b': align top %** baselines. `u': align upper bounding box lines %** @param #4 boxing style of Sample: `h' is \hbox, `v' is \vbox (or \vtop, %** respectively), `m' is minipage, `p' is PexaMinipage (recommended). %** Capital letters disallowed. %** @param #5 `1': allow Sample to shrink if Source is too wide, `0': don't %** @param #6 `1': allow page break in Source, `0': don't %** @param #7 source display style, see possible values at \PexaShowSource %** @param #8 width selector, see docs at \PexaShowSource %** @param #9 {{xindent}{yindent}} %** Special one-pass case for #5=`1', #6='0' etc. \def\PexaShowBothMany#1#2#3#4#5#6#7#8#9{% \begingroup %\hrule%!! \let\pexa@optboxstyle@noboth\pexa@optboxstyle@inboth \csname pexa@opt@@boxstyle@#4\endcsname% verify correct usage \pexa@setupverb@read% interpret ^ for measurements % Dat: not late to test \ifvmode now \pexa@xyindent#9% % ^^^ do this early, so will have a chance to measure correct width % Now: We have \leftskip, \rightskip, \linewidth and \@totalleftmargin % set up. These won't affect the sample, because \pexa@setsample@... % calls \pexa@hsizesetup, which zero them all out. \pexa@setup@calcwidths{#8}% sets \PexaWidth and possibly clobbers \@tempdimb % Dat: \pexa@setup@calcwidths might have said \let\PexaWidth\@tempdimb, % which isn't safe, so we want to expand it % Dat: safe to clobber \@tempdima and \@tempdimb, we're in \begingroup \@tempdimb\PexaWidth\relax \let\PexaWidth\@tempdimb \@tempdima#1\relax% do arithmetic: .5\PexaWidth \edef\PexaWidth{\the\@tempdimb\space}% \expandafter\pexa@showbothmany@low\expandafter{\the\@tempdima}{#2}{#3}{#4}{#5}{#6}{#7}% } \def\pexa@showbothmany@low#1#2#3#4#5#6#7{% % Dat: #1 might be .5\PexaWidth \if#50% Don't allow the sample to shrink. Its width will be exactly #1. \@tempdima#1\relax \else% % #5 allows the Sample to shrink. Now we call \pexa@sh@#7 just to measure % the width of the Source. From that we will be able to deduce the width of % the Sample. \@tempdima\PexaWidth %\showthe\tabskip % vvv This is the first time we call \pexa@default@verbatimfont \setbox0\vtop{\leftskip\z@skip \@totalleftmargin\z@ \let\pexa@@tolinewidth\@empty \csname pexa@sh@#7\endcsname}% %%\vbox{\hrule\copy0\hrule}% \advance\@tempdima-\wd0 \setbox0\box\voidb@x \setbox1\hbox{\pexa@@vrule{}}\advance\@tempdima-\wd1 \ifdim#1<\@tempdima \@tempdima#1\relax\fi %%\@tempdima=200pt \fi% % \advance\@tempdima\@totalleftmargin\advance\@tempdima\leftskip% !! Dat: a failed attempt to put the \vrule to the middle %\edef\pexa@@samplewidth{\the\@tempdima}% superfluous % Dat: now \@tempdima is actual Sample width \if#60\def\pexa@@preamblecr{\cr\noalign{\nobreak}}% disallow page break in Source \else\let\pexa@@preamblecr\pexa@preamblecr@keep\fi \edef\reserved@a{\catcode`^7\relax% change \catcode back to superscript (undo \pexa@setupverb@read) \setbox1\expandafter\noexpand\csname pexa@setsample@#4\endcsname{\the\@tempdima}}% \edef\reserved@b{% %\noexpand\pexa@xyindent#9% % Dat: too late to \noexpand\verbfwr@default@acts \noexpand\pexa@setupverb@read% do correct display \noexpand\pexa@setup@savetabskip %\def\no\pexa@default@verbatimfont{\bbbbb}% \expandafter\noexpand\csname pexa@sa@#3\endcsname {\if#2r\wd1\else\the\@tempdima\fi}% will expand \@tempdima early \expandafter\noexpand\csname pexa@sh@#7\endcsname }% %\show\reserved@a% \catcode `^7\relax \setbox 1\pexa@setsample@p {184.9429pt}. %\show\reserved@b% \pexa@setupverb@read \pexa@setup@savetabskip \pexa@sa@u {184.9429pt}\pexa@sh@leftnumhang \expandafter\reserved@a\reserved@b % ^^^ This \expandafter trick expands \@tempdima early \pexa@@undoyindent \pexa@endparenvgroup } %** \pexa@@undoyindent calls \endtrivlist, which sets \@endpetrue, and if we %** are in an environment (such as \begin{PWSource}), \end calls \@doendpe, %** which which sets up \par and \everypar, so an automatic \noindent can be %** forced. \def\pexa@endparenvgroup{% \if@endpe\endgroup\@endpetrue\else\endgroup\@endpefalse\fi% see also \PexaShow } \def\pexa@setup@savetabskip{% \begingroup \pexa@@calcwidths \edef\reserved@a{\def\noexpand\pexa@@savetabskip{\the\tabskip}}% \expandafter\endgroup\reserved@a } \def\pexa@hsizesetup{% % Imp: possibly zero out \@listdepth etc., but don't forget to set it back. \leftskip\z@skip \rightskip\z@skip \textwidth\hsize \linewidth\hsize \columnwidth\hsize \parshape\z@ \@totalleftmargin\z@ \@twocolumnfalse } \def\pexa@setsample@h#1{% % Dat: _not_ \hbox to#1. But why?? \hbox{\hsize#1\relax\pexa@hsizesetup\input\pexa@@samplename\space\par}% } \def\pexa@setsample@v#1{% \vtop{\hsize#1\relax\pexa@hsizesetup\input\pexa@@samplename\space\par}% } \def\pexa@setsample@V#1{% \vbox{\hsize#1\relax\pexa@hsizesetup\input\pexa@@samplename\space\par}% } \def\pexa@setsample@m#1{% \hbox{% \noindent\begin{minipage}[t]{#1}% \input\pexa@@samplename\space\par \end{minipage}% }% } \def\pexa@setsample@p#1{% \hbox{% \noindent\begin{PexaMinipage}[t]{#1}% \pexa@hsizesetup \input\pexa@@samplename\space\par \end{PexaMinipage}% }% } \def\pexa@setsample@M#1{% \hbox{% \noindent\begin{minipage}[b]{#1}% \pexa@hsizesetup \input\pexa@@samplename\space\par \end{minipage}% }% } \def\pexa@setsample@P#1{% % \def\pexa@@bpmp{\begin{PexaMinipage}} % \expandafter\pexa@@bpmp\input\pexa@@samplename\space % doesn't work :-( \hbox{% \noindent\begin{PexaMinipage}[b]{#1}% \pexa@hsizesetup \input\pexa@@samplename\space\par \end{PexaMinipage}% }% } \def\pexa@setsample@G#1{\begingroup\hsize#1\relax\pexa@hsizesetup\input\pexa@@samplename\space\endgroup} %** Dat: height of \pexa@@vrule only depends on the height of the sample %** @param #1 desired Sample width %** @param #2 one of \pexa@sh@... \def\pexa@sa@b#1#2{ %\leftskip\z@ \rightskip\z@ \parshape\z@% Wrong. Too Early. \vskip\z@skip \def\pexa@@cnta{0}% \@tempdima\dp1 % not modified by \pexa@show@halign \advance\@tempdima\baselineskip \setbox0\hbox{\pexa@@vrule{}}% \@tempdimc\PexaWidth \advance\@tempdimc-\wd0 \advance\@tempdimc-#1\relax %\advance\linewidth\tabskip \edef\pexa@@savetabskip{\the\@tempdimc\space}% \def\pexa@@firstlinebeg{% \vadjust{\kern\dp1 \hrule\@height\z@\vskip-\dp1 }% ensure that figure fits \vtop to\z@{\hb@xt@\z@{\kern\pexa@@savetabskip \@tempdima\dp1 \advance\@tempdima\ht1 \lower\dp1\hbox{\expandafter\pexa@@vrule\expandafter{\the\@tempdima}}% \box1 \hss}\vss}% Dat: \hb@xt@\z@ is needed % ^^^ Dat: \@totalleftmargin and \leftskip takes place here (as part of initial \tabskip) }% #2% \pexa@show@halign etc. \advance\@tempdima\pexa@@cnta\baselineskip % vvv Dat: a little less than \baselineskip, because \vtop has less?? \advance\@tempdima-\baselineskip \advance\@tempdima\topskip % vvv Dat: use \kern, not \vskip, so \unskip won't undo it \ifdim\@tempdima>\z@ \kern\@tempdima\fi% display is longer than source %%\message{Left=\pexa@@cnta} } %** \box1 already contains the Sample %** @param #1 desired Sample width %** @param #2 one of \pexa@sh@... \def\pexa@sa@u#1#2{% %%\show\pexa@@tolinewidth \showthe\PexaWidth %%\tracingcommands1 \tracingmacros1 \vskip\z@skip% go to vertical mode \edef\pexa@@restore@prevdepth{\prevdepth\the\prevdepth}% \def\pexa@@cnta{0}% %\@tempdima\dp1 \advance\@tempdima10.54352pt \dp1\@tempdima \@tempdima\dp1 \advance\@tempdima\ht1 \if1\pexa@default@baselinegrid \ifdim\@tempdima<256\baselineskip\else \advance\@tempdima-256\baselineskip\fi \ifdim\@tempdima<128\baselineskip\else \advance\@tempdima-128\baselineskip\fi \ifdim\@tempdima <64\baselineskip\else \advance\@tempdima -64\baselineskip\fi \loop\ifdim\@tempdima>\z@ \advance\@tempdima-\baselineskip\repeat \@tempdima-\@tempdima \advance\@tempdima\dp1 \dp1\@tempdima \fi \@tempdima\dp1 \advance\@tempdima\ht1 % !! sample might be too tall, try single-line samples: (??) % \begin{WBoth}Foo\end{WBoth}\PexaShowBoth{}\PexaShowBoth \nointerlineskip\vbox to\z@{% This \vbox screws up \vskip{}s at page break \setbox0\hbox{\pexa@@vrule{}}% % Dat: now we \advance\PexaWidth, but this won't affect #2, because % advancement is inside a group %\advance\PexaWidth-\wd0 \advance\PexaWidth-#1\relax %\showthe\PexaWidth \kern\baselineskip \kern-\topskip \hbox{% implies \noindent \kern\pexa@@savetabskip \kern\PexaWidth \kern-\wd0 \kern-#1\relax \@tempdima\dp1 \advance\@tempdima\ht1 \lower\dp1\hbox{\expandafter\pexa@@vrule\expandafter{\the\@tempdima}}% %\pexa@@vrule \box1% Dat: \box0 would emit a rule not tall enough }% \vss }% \pexa@@restore@prevdepth% let baselines align smoothly \nobreak % disallow page break between Sample and Source #2% \pexa@sh@..., which calls \pexa@show@halign etc. % Dat: now \pexa@@cnta is -1 times nr of source lines printed % vvv Dat: a little less than \baselineskip, because \vtop has less?? % Imp: even less \advance\@tempdima\pexa@@cnta\baselineskip % vvv Dat: use \kern, not \vskip, so \unskip won't undo it \ifdim\@tempdima>\z@ \kern\@tempdima\fi% Sample is longer than Source %%\message{Left=\pexa@@cnta} } %** Similar to \vskip#1\relax, but adds #1 to \lastskip \def\PexaAddlastskip#1{% \begingroup % Imp: try \unpenalty somehow so \lastskip won't be 0pt after \vskip10pt\nobreak \@tempskipa=#1\relax \advance\@tempskipa\lastskip \vskip-\lastskip \vskip\@tempskipa \endgroup% Dat: \lastskip survives } \def\pexa@default@vextravskip{\z@} \def\pexa@default@vsmallht{1pt} %** Like \pexa@sa@u, but works at a page break with baseline grid %** \box1 already contains the Sample. %** @param #1 desired Sample width %** @param #2 one of \pexa@sh@... \def\pexa@sa@v#1#2{% %%\setbox1\hbox{\vrule\box1}% %%\show\pexa@@tolinewidth \showthe\PexaWidth %%\tracingcommands1 \tracingmacros1 \ifhmode\unskip\par\fi% go to vertical mode, keep \lastskip %\show\pexa@default@vextravskip \ifdim\prevdepth>-\@m\p@ \@tempdima\prevdepth \advance\@tempdima-\pexa@default@vextravskip\relax \prevdepth\@tempdima \vskip-\pexa@default@vextravskip\relax% !! \vspace etc. \fi \def\pexa@@cnta{0}% %\@tempdima\dp1 \advance\@tempdima10.54352pt \dp1\@tempdima \def\pexa@@thefirstline{}% \setbox0\hbox{\pexa@@vrule{}}% \@tempdimc\PexaWidth \advance\@tempdimc-\wd0 \advance\@tempdimc-#1\relax %\advance\linewidth\tabskip \edef\pexa@@savetabskip{\the\@tempdimc\space}% \def\pexa@@dohalign{% \noalign\bgroup %\pexa@@beforefirstline% called after the \cr of the preamble, should contain \noalign{...} %\relax\pexa@setupverb@read% Dat: already called % vvv Dat: \@@input is the original \input primitive, which we definitely % need here (and not a macro) \expandafter\pexa@inputfirstline\@@input\pexa@@cursourcename\space % ^^^ Dat: \relax instead of \space would begin an extra line and demand % an extra \cr (at end) \egroup% terminate \halign }% \global\def\pexa@@vdepth{\z@}% \global\let\pexa@@thefirstline\@empty \def\pexa@@firstlinebeg{% \setbox0=\hbox{\pexa@@thefirstline}% Source \@tempdima\ht0 \advance\@tempdima\pexa@default@vextravskip\relax \ifnum1<1% \ifdim\ht1<\pexa@default@vsmallht\relax1% typical: \ht1 (Sample) is 0pt or 0.4pt \else\ifdim\@tempdima<\ht1 1\fi\fi% Sample (\box1,\vtop) is a lot higher than Source. \space % Dat: now we raise Sample to the height of Source (should this be \strut??) % Dat: in lb.sty: \ht0=7.14pt and \ht0=9.10pt \advance\@tempdima-\ht1 % Dat: this example shows that \raise correctly shifts \ht and \dp % \setbox0=\hbox{\vrule height 30pt depth50pt} % \setbox0=\hbox{\raise6pt\box0} % \showthe\ht0 \showthe\dp0 \setbox1\hbox{\raise\@tempdima\box1}%\raise10pt\box1}% \fi % vvv Dat: save new \dp1, as \raise{}d above % vvv Dat: we need \global because we are in a \halign \global\edef\pexa@@vdepth{\the\dp1}% % Dat: ne don't need \@tempdima anymore %%\vrule height\ht0 depth\dp0 width1pt \vadjust{\kern\dp1 \hrule\@height\z@\vskip-\dp1 }% ensure that Sample fits page \vtop to\z@{\hb@xt@\z@{\kern\pexa@@savetabskip \@tempdima\dp1 \advance\@tempdima\ht1 \lower\dp1\hbox{\expandafter\pexa@@vrule\expandafter{\the\@tempdima}}% \box1 \hss}\vss}% Dat: \hb@xt@\z@ is needed % ^^^ Dat: \@totalleftmargin and \leftskip takes place here (as part of initial \tabskip) \global\let\pexa@@thefirstline\@empty } %%\hrule #2% \pexa@sh@..., which calls \pexa@show@halign etc. \ifx\pexa@@undoyindent\@empty \@tempdimc\z@ \else \@tempdimc\@topsepadd \fi \ifdim\@tempdimc>\pexa@default@vextrabotdepth\relax \@tempdimc\pexa@default@vextrabotdepth\relax \fi % Dat: now \@tempdimc is the extra Sample depth that can be tolerated. % This can be quite much (>50pt etc.) \@tempdima\pexa@@vdepth\relax% depth of the Sample % Dat: now \pexa@@cnta is -1 times nr of source lines printed \if1\pexa@default@baselinegrid \advance\@tempdima\pexa@@cnta\baselineskip \advance\@tempdima\baselineskip% don't count the first line \ifdim\@tempdima<\@tempdimc % Source is tall enough, no \vskip needed \@tempdima\z@ \else \ifdim\@tempdima<256\baselineskip\else \advance\@tempdima-256\baselineskip\fi \ifdim\@tempdima<128\baselineskip\else \advance\@tempdima-128\baselineskip\fi \ifdim\@tempdima <64\baselineskip\else \advance\@tempdima -64\baselineskip\fi \loop\ifdim\@tempdima>\@tempdimc \advance\@tempdima-\baselineskip\repeat \@tempdima-\@tempdima \advance\@tempdima\pexa@@vdepth\relax \advance\@tempdima\pexa@@cnta\baselineskip% BUGFIX at Fri Apr 16 00:56:52 CEST 2004 \advance\@tempdima\baselineskip \fi % vvv Dat: this would force a better page break, but might be dangerous %\ifx\pexa@@undoyindent\@empty\else % \advance\@tempdima\@tempdimc % \advance\@topsepadd-\@tempdimc %\fi \else % This usually has no effect, except only with a single-line \vtop Sample \advance\@tempdima\pexa@@cnta\baselineskip% negative \advance\@tempdima\baselineskip% don't count the first line \advance\@tempdima-\@tempdimc \ifdim\@tempdima<\z@ \@tempdima\z@\fi \fi % vvv Dat: this \vskip will be extended by \addvspace % vvv Dat: reset \lastskip to zero if \@tempdima=0pt \ifdim\@tempdima<\z@\else \nobreak\vskip\@tempdima\fi% Sample is longer than Source \global\let\pexa@@thefirstline\@empty \global\let\pexa@@vdepth\@empty %%\message{Left=\pexa@@cnta} } \begingroup\lccode`~=`\^^M\lowercase{\endgroup\def\pexa@inputfirstline#1~}{% \global\def\pexa@@thefirstline{#1}% % ^^^ Dat: \global is needed, because we're in \halign \egroup% \noalign #1\par% Put it back so it will be typeset } % --- % Dat: superfluous macros %\def\PexaShowSourceLeft {\PexaShowSource{left}}% %\def\PexaShowSourceCenter {\PexaShowSource{center}}% %\def\PexaShowSourceNumLeft{\PexaShowSource{leftnum}}% %\def\PexaShowSourceNumCol {\PexaShowSource{leftnumcol}}% %\def\PexaShowSourceNumHang{\PexaShowSource{leftnumhang}}% %\def\PexaShowPexaMinipage {\PexaShowSample{\hsize}{P}}% %\def\PexaShowSourceSampleLeft{\PexaShowBoth{#1}{l}{b}{v}{0}{1}{left}{2}} %\def\PexaShowSourceSampleRight{\PexaShowBoth{#1}{r}{b}{v}{0}{1}{left}{2}} %\def\PexaShowSourceSampleLeftPexaMinipage{\PexaShowBoth{#1}{l}{b}{p}{0}{1}{left}{2}} %** Shows the source and the sample, facing, both left flushed, top baselines %** aligned, disallowing page break, width of sample maximized so both source %** and sample fit. %** Deprecated. Use \PexaShowBoth with #1 \hsize-..., #6=0 %** @param #1 dimen: minimum width for the source (hint: specify 0pt) %** Uses \pexa@@vrule %** Imp: pre-calculate width of \pexa@@vrule %** Imp: typeset the source once %\def\PexaShowSourceSampleFit#1{% % \vskip\z@skip % \setbox0\vtop{\pexa@show@halign}% % \ifdim\wd0<#1 \wd0=#1\fi % \setbox1\vtop{% % \advance\hsize-\wd0 % \setbox0\hbox{\pexa@@vrule{}}\advance\hsize-\wd0 % \input\pexa@@cursourcename\space % }% % \noindent\box0 \pexa@@vrule{}\relax\box1\par %} % --- \begin{PexaMinipage} \let\pexa@@restore\empty %** @param #1 something whose 1st token will be expanded once \def\pexa@restore@appendex#1{% \expandafter\expandafter\expandafter\def \expandafter\expandafter\expandafter\pexa@@restore \expandafter\expandafter\expandafter{% \expandafter\pexa@@restore#1}% } \def\pexa@@equation{equation} \def\pexa@@vrcnt{vrcnt} %** @param #1 counter name; e.g `section' means \c@section %** @param #2 true code %** @param #2 false code \def\pexa@ifignore#1#2#3{% % Imp: multiple ignorable counters \def\reserved@b{#1}% \ifx\reserved@b\pexa@@equation#2% \else\ifx\reserved@b\pexa@@vrcnt#2% \else#3\fi\fi } %** Appends a counter restoration command to \reserved@a %** @param #1 counter name; e.g `section' means \c@section \def\pexa@elt#1{% \pexa@ifignore{#1}{}{% \edef\reserved@a{\noexpand\setcounter{#1}{\the\csname c@#1\endcsname}}% \pexa@restore@appendex\reserved@a }% } %** @param #1 counter name; e.g `section' means \c@section \def\pexa@resetcounter#1{% \pexa@ifignore{#1}{}{% \expandafter\global\csname c@#1\endcsname\z@ }% %\begingroup% superfluous % \let\@elt\@stpelt % \csname cl@#1\endcsname %\endgroup } %\def\pexa@minipage@setcounter{% overrides latex.ltx % \@ifundefined{c@#1}% % {\@nocounterr{#1}}% % {\pexa@elt{#1}\global\csname c@#1\endcsname#2\relax}} \long\def\pexa@kill@minipagefalse#1\@minipagefalse#2\hfuzz${#1} %** A dumb emulation of article.cls: displays the page footer. \def\pexa@finishpage{% \begingroup \expandafter\pexa@kill@minipagefalse\endminipage\hfuzz$% % ^^^ stop after footnotes at \@minipagefalse \let\relax\relax% elminate possible \global before \@minipagefalse \endgroup \ifhmode\unskip\par\fi %\vskip\z@skip \pexa@@saved@newpage \ifhmode\unskip\par\fi %\vskip\z@skip \unpenalty\unskip \stepcounter{page}% 0 -> 1 \ifx\@oddfoot\@empty\else% \pagestyle{empty} -> \let\oddfoot\@empty \bigskip \begingroup \if@specialpage \global\@specialpagefalse\@nameuse{ps@\@specialstyle}% define \@evenfoot \fi \hbox to\hsize{\if@twoside\ifodd \@oddfoot\else \@evenfoot\fi\else\@evenfoot\fi}% \endgroup \fi } \def\pexa@newpage{% \pexa@finishpage \global\let\pexa@@finishlastpage\pexa@finishpage \smallskip\hrule\smallskip } \def\pexa@everydisplayfirst#1{% \everydisplay{#1}% \abovedisplayshortskip\z@skip \abovedisplayskip\z@skip #1% } %** \begin{PexaMinipage} is similar to \begin{minipage} (and accepts the same %** args), but section etc. %** counters (including \thepage) will restart, and their previous values are %** restored at \end{PexaMinipage}. Also \mark and \@themark are restored. %** Footnotes are numbered normally. The first paragraph is set with \noindent, %** but subsequent ones are indented. Skips (including \belowdisplayskip) are %** canceled at the bottom of the page. \abovedisplayskip above the very first %** displayed formula is canceled; you can avoid this by saying \everydisplay{} %** before the formula. %** A space after \end{PexaMinipage} (as with minipage) is significant. %** %** Usage: \begin{PexaMinipage}[vert-alignment]{width}, just like the minipage %** environment. %** %** Example: %** \begin{PexaMinipage}{99pt} %** \hrule\relax %** \selectlanguage{english} %** \section{mp-foo} %** Aword\footnote{a hello, world} %** Bword\footnote{b hello, world} %** \end{PexaMinipage} %** \hrule \def\PexaMinipage{% \begingroup \let\pexa@@restore\@empty \let\@elt\pexa@elt \cl@@ckpt % append `\setcounter{equation}{42}' to \pexa@@restore \let\c@footnote\c@mpfootnote% don't reset original \c@footnote; BUGFIX at Tue Dec 23 18:46:30 CET 2003 \let\c@footnote@ch\c@mpfootnote% don't reset footnote generation counter -- for magyar.ldf \let\@elt\pexa@resetcounter \cl@@ckpt \pexa@restore@appendex{\expandafter\gdef\expandafter\@themark\expandafter{\@themark}}% \edef\reserved@a{\noexpand\global\if@specialpage\noexpand\@specialpagetrue\else\noexpand\@specialpagefalse\fi}\pexa@restore@appendex\reserved@a \if@specialpage\edef\reserved@a{\gdef\noexpand\@specialstyle{\@specialstyle}}\pexa@restore@appendex\reserved@a\fi \expandafter\endgroup\expandafter\def\expandafter\pexa@@restore\expandafter{\pexa@@restore}% %\show\pexa@@restore % Dat: \selectlanguage is restored automatically % Dat: \c@mpfootnote is reset to zero each time %\let\c@footnote\c@mpfootnote \def\thempfootnote{\thefootnote}% show normal footnotes (`1') instead of `a' \let\c@mpfootnote\c@footnote \let\cl@mpfootnote\cl@footnote% magyar.ldf footnote renumbering compatibility \pexa@elt{secnumdepth}% \let\pexa@@saved@newpage\newpage \let\newpage\pexa@newpage% override \let\finishpage\pexa@finishpage% new command \let\pexa@@finishlastpage\@empty \let\addtocontents\@gobbletwo % ^^^ Don't modifty the TOC etc. of the host document. \addcontentsline isn't % redefinied, because hyperref.pdf overrides the number of args \expandafter\ifx\csname chapter\endcsname\relax % Doesn't modify section numbering etc. \let\chaptermark\@gobble \let\p@chapter\@empty \newcount\c@chapter%\newcounter{chapter}% \newcounter wouldn't allow redef \def\chapter{\@startsection{chapter}{0}{\z@ }{-3.5ex \@plus -1ex \@minus -.2ex}{2.3ex \@plus .2ex}{\normalfont \Large \bfseries}}% % ^^^ copied article.cls definition for section \def\thechapter{\@Roman\c@chapter}% \fi %\aftergroup\pexa@@restore% no effect, because \pexa@@restore will have been changed back by \endgroup % vvv Modify latex.ltx to avoid \parindent\z@ \def\@parboxrestore{% \edef\reserved@a{\noexpand\@arrayparboxrestore\parindent\the\parindent\relax}% \reserved@a \let\\\@normalcr}% \def\@setminipage{% \@minipagetrue \everypar{% {\setbox\z@\lastbox}% cancel \indent \@minipagefalse\everypar{}% }}% \expandafter\everydisplay\expandafter{% \expandafter\abovedisplayskip\expandafter\z@skip% for gridmath.sty \expandafter\pexa@everydisplayfirst\expandafter{\the\everydisplay}}% \@listdepth\z@ % Imp: put this into \PexaShowBoth etc. \def\makelabel##1{% \@latex@error{Lonely \string\item--perhaps a missing list environment}\@ehc}% % vvv with `Figure 1' (article)-style figure numbering \def\figure{\pexa@mp@fakefloat{figure}}% \let\endfigure\pexa@mp@endfloat \def\table{\pexa@mp@fakefloat{table}}% \@namedef{table*}{\table}\@namedef{endtable*}{\endtable}% \@namedef{figure*}{\figure}\@namedef{endfigure*}{\endfigure}% % ^^^ BUGFIX at Mon Apr 19 17:08:49 CEST 2004: % need to redefine \endtable*, too; problem caused by \marginpar in a % very different part of the document. \let\endtable\pexa@mp@endfloat \pexa@@minipage@setuphook \minipage% accept args etc. } \def\endPexaMinipage{% \pexa@@finishlastpage \par\unskip% cancels \belowdisplay(short)skip and others \unpenalty\unskip\unpenalty\unskip\unpenalty\unskip\unpenalty % ^^^ Dat: `\unskip\unpenalty\unskip' cancels \bigskip % \let\c@mpfootnote\@tempcnta \let\cl@footnote\@empty \let\cl@mpfootnote\@empty %\show\pexa@@restore %\let\c@mpfootnote\c@secnumdepth% restoring of \cl@@ckpt will be overridden later %\let\c@footnote\c@secnumdepth %\showthe\count63 \pexa@@restore% will not reset original \c@footnote %\global\c@footnote=77 %\setcounter{footnote}{77} \expandafter\@temptokena\expandafter{\@themark}% \mark{\the\@temptokena}% prevent double expansion of \@themark \endminipage } \def\pexa@mp@fakefloat#1{\@ifnextchar[{\pexa@mp@begfloat{#1}}{\pexa@mp@begfloat{#1}[]}} \def\pexa@mp@begfloat#1[#2]{% \def\@captype{#1}% figure or table % vvv ripped from \@xfloat in latex.ltx %\global \setbox\@currbox \vskip\intextsep \color@vbox \normalcolor \vbox \bgroup \hsize\columnwidth \@parboxrestore \@floatboxreset } \def\pexa@mp@endfloat{\@endfloatbox\vskip\intextsep}% \let\pexa@@minipage@setuphook\@empty \def\pexa@mp@article{% \@twosidefalse \pagestyle{plain}% \renewcommand\thepart {\@Roman\c@part}% \renewcommand\thesection {\@arabic\c@section}% \renewcommand\thesubsection {\thesection.\@arabic\c@subsection}% \renewcommand\thesubsubsection{\thesubsection .\@arabic\c@subsubsection}% \renewcommand\theparagraph {\thesubsubsection.\@arabic\c@paragraph}% \renewcommand\thesubparagraph {\theparagraph.\@arabic\c@subparagraph}% } % --- \PVerb et al. %** \PVerb is a command that typesets its argument verbatim, in a typewriter %** font. It similar to the LaTeX \verb command, but has additional features: %** -- \PVerb{NESTED} is allowed (as well as \PVerb+TEXT+), where NESTED must %** have braces properly nested, but no other constraints are given %** -- the only constraint on TEXT in \PVerb+TEXT+ is tht it cannot contain %** the delimiter (+) %** -- \PVerb{NESTED} can be put inside macro command arguments, for example: %** \fbox{\PVerb{\def\foo{\csname bar\endcsname}}} %** -- accented characters (with \usepackage[...]{inputenc}) work properly %** -- accents \H and \. work even in OT1 encoding (the font cmr is %** substituted if necessary) %** -- customizable behaviour via options pverb-space=, pverb-hyphenchar=, %** pverb-verbatimfont=, pverb-linebreak=, pverb-linebreakchar=, %** pverb-stretchshrink= %** -- options can be specified as \PVerb[...] or \PexaDefaults{...} %** Some downsides: %** -- a newline inside the argument of \PVerb is converted to a space %** -- inner mode: comments are lost %** -- inner mode: line breaks are lost (converted to spaces) %** -- inner mode: multiple space tokens are condensed into one %** -- inner mode: exact layout of space tokens after \cs are lost %** -- inner mode: only \PVerb{NESTED} syntax is allowed %** -- inner mode: only \PVerb[pverb-hash=half] works inside \textrm %** -- inner mode: %** Dat: \verb~...~ will work well, because it is forced to be outer. %** Suggested brace delimiters: {} %** Suggested other \dospecial delimiters: \ $ & # ^ _ % ~ %** Suggested other delimiters: ` ! @ * - + = | : ; ' " < > , . / ? [] () %** Dat: test: \showhyphens{\PVerb{kismocsok}} \DeclareRobustCommand\PVerb{} \expandafter\def\csname PVerb \endcsname{% \relax\ifmmode\hbox\else\leavevmode%\null prevents break of 1st word \fi\bgroup {\pexa@cverb@@verbatimfont}% load .fd files with undisturbed \catcodes \pexa@setupverb% sets \catcodes, similar to `\let\do\@makeother \dospecial\@noligs \@vobeyspaces' \pexa@cverb@catcodes \afterassignment\pexa@cverb@maybeopts\let\reserved@a= % } %** Same as \PVerb, but converts `##' to `#'. %** @example \textit{And type: \PVerbH{##ifdef}} \DeclareRobustCommand\PVerbH{\PVerb[pverb-hash=half]} %** Usage: \PVerbInner\PVerb{text} or \PVerbInner\PVerbH{text} \def\PVerbInner#1#2{#1{#2}} %** \item[\PVerb[pverb-space=visbreak]{foo}] doesn't work because of the nested %** `['. Use this instead: \item[\PVerbOpt{pverb-space=visbreak}{foo}], or: %** \item[{\PVerb[pverb-space=visbreak]{foo}}] \DeclareRobustCommand\PVerbOpt{} \expandafter\def\csname PVerbOpt \endcsname#1{% \relax\ifmmode\hbox\else\leavevmode%\null prevents break of 1st word \fi\bgroup \pexa@doopts{#1}% in \begingroup, at last {\pexa@cverb@@verbatimfont}% load .fd files with undisturbed \catcodes \pexa@setupverb% sets \catcodes, similar to `\let\do\@makeother \dospecial\@noligs \@vobeyspaces' \pexa@cverb@catcodes \afterassignment\pexa@cverb@gottoken\let\reserved@a= %\afterassignment\pexa@cverb@outerbrace\let\reserved@a= % } \def\pexa@cverb@catcodes{% \let\do\pexa@cverb@makemathshift \dospecials \pexa@cverb@donormals % ^^^ converts allowed delimiters to math-shift (\catcode 3) %\@tempcnta127 \loop\ifnum\@tempcnta<256 \catcode\@tempcnta3 \advance\@tempcnta\@ne\repeat % ^^^ also allows accented letters, such as \PVerb^^e1sz^^e1 \ifx\\\@tabularcr \catcode`\{1 \fi % is \realx with array.sty \ifx\\\@arraycr \catcode`\{1 \fi % with array.sty % ^^^ disable outerbrace mode for \begin{tabular}, because braces must be % properly nested inside a \halign cell, so we are not allowed to swallow % a brace as math-shift. Unfortunately, this doesn't fix the problem for % pure \halign, for which `! Missing { inserted' will be shown. } % Sentinel sensible defaults -- overridden by \pexa@doopts above. \def\pexa@cverb@@space{\ }% breakable \def\pexa@cverb@@hyphenchar{\hyphenchar\font=-1 }% disallow auto-hyphenation of words \def\pexa@cverb@@verbatimfont{\pexa@@verbatimfont}% \def\pexa@cverb@@tbreak{\allowbreak}% allow silent line break \def\pexa@cverb@@stretchshrink{}% keep original %** Prepend a \do to every >=127 accented character. %** Iteration terminated by \vfuzz. %** Add \break statements if necessary \def\pexa@cverb@addacc#1{% \ifx\vfuzz#1\else \ifnum`#1>126 \ifnum\catcode`#1=13 \noexpand\do\fi#1\else% prepend \do to accented character \ifnum`#1=32 \noexpand\pexa@cverb@@space\else%\ifnum`#1<127 \ifnum\catcode`#1=11 #1\else % vvv Dat: add \break to both sides of any nonletter \noexpand\break#1\noexpand\break\fi \fi\fi \expandafter\pexa@cverb@addacc \fi } \def\pexa@cverb@removespace@v#1 #2{% #1\ifx\hfuzz#2\else \ifnum\catcode\string`#2=11 \reserved@a\fi% keep space iff letter follows #2\expandafter\pexa@cverb@removespace@v \fi } %** Similar to \EempVerbatimDef5 in eempost.sty %** Defines parameterless macro named #1 to expand to a verbatim %** representation of token list #2, with only catcode 10 (space) and %** catcode 12 (other). %** -- `%' won't appear in the output %** -- emits `\relax' as `\relax ', but `\<' as `\<' (without space) %** -- comments etc. have already been removed %** -- caller should end each line with `^^J%' %** -- \cs containing non-letter chars are printed without caution %** -- low (0..31) and high (127..256) chars will be emmited with ^^ %** -- char 10 (^^J) will be emitted as newline %** -- ^^A (1) chars will be converted to spaces %** -- spaces in #1 are kept with catcode 12 (other possibilities: keep with %** catcode 10; remove) %** -- trailing spaces of `\cs ' are %** removed unless necessary (a letter follows it), keep with catcode 12 \long\def\pexa@cverb@vdef#1#2{% \long: allow \par in #2 \begingroup \@tempcnta0 \loop\ifnum\@tempcnta<256 \lccode\@tempcnta0 \advance\@tempcnta\@ne\repeat \lccode\string`\ =1 \lowercase{\toks@{#2}}% convert space to ^^A \edef\reserved@a{\the\toks@}% convert `#' to `##' (catcode 6) %\edef\reserved@b##1>{}% macro:...->... \edef\reserved@b{\expandafter\strip@prefix\meaning\reserved@a\string##\hfuzz}% % ^^^ Dat: \meaning expands to ^^A with catcode 12, because it's charcode isn't 32 % vvv !! SUXX, removes changes 'a\#b' to `a\b', too \edef\reserved@b{\expandafter\pexa@removehash\reserved@b}% convert `##' to `#' (catcode 12) \lccode\string`\ =0 % keep spaces generated by `\cs...' \lccode1=\string`\ % \expandafter\lowercase\expandafter{\expandafter\edef\expandafter\reserved@b\expandafter{\reserved@b\space\hfuzz}}% convert `^^A' -> ` ' (catcode 12) % Dat: now we have the space tokens in #1 with catcode 12, and spaces at the % end of multi-letter `\cs ' with catcode 10 (space). \lccode`\-=\string`\ \lowercase{\edef\reserved@a{-}}% Dat: assume catcode('-')==12 \edef\reserved@b{\def\noexpand#1{\expandafter\pexa@cverb@removespace@v\reserved@b}}% % ^^^ Dat: it is safe to call \eemp@removespace@v, because there will be % no consecutive spaces in \reserved@b emitted by \meaning \expandafter\endgroup\reserved@b } \def\pexa@swaprelax#1#2\relax{#2#1} %\def\pexa@swap#1#2{#2#1}% SUXX, doesn't evaluate \else correctly %** Cancel \break{}s in the beginning of \reserved@a, and also cancel break after %** the very first character. \def\pexa@cverb@skipbreak@ii#1#2{% \ifx#1\break \pexa@swaprelax{\pexa@cverb@skipbreak@ii#2}% %\expandafter\pexa@cverb@skipbreak\expandafter#2% \else \ifx#2\break \pexa@swaprelax{\pexa@cverb@skipbreakf@ii#1}% \else \pexa@swaprelax{#1#2}% Dat: don't insert \relax into `\do ^^f5' etc. \fi% \fi\relax } \def\pexa@cverb@skipbreakf@ii#1#2{% \ifx#2\break \pexa@swaprelax{\pexa@cverb@skipbreakf@ii#1}% \else \pexa@swaprelax{#1\relax#2}% Dat: \relax breaks ligatures \fi\relax } %** Cancel \break{}s in the beginning of \reserved@a. %** (formerly \pexa@cverb@eatbreaks) \def\pexa@cverb@skipbreak@i#1{% \ifx#1\break \expandafter\pexa@cverb@skipbreak@i \else\expandafter#1\fi } %** Doesn't cancel \break. \let\pexa@cverb@skipbreak@\@empty %** Cancels break according to option pverb-leftbreakmin \def\pexa@cverb@skipbreak{% \relax% break ligatures \csname pexa@cverb@skipbreak@\romannumeral\pexa@default@pverbleftbreakmin\endcsname } %** Cancel a single break in the beginning of \reserved@a. %\def\pexa@cverb@skipbreak#1{% % \ifx#1\break\else\expandafter#1\fi %} % Test. %\def\pexa@default@pverbleftbreakmin{2}% see defaults below %\edef\reserved@a{\pexa@cverb@skipbreak alma} %\show\reserved@a %\edef\reserved@a{\pexa@cverb@skipbreak\break\break alma} %\show\reserved@a %\tracingmacros1 %\edef\reserved@a{\pexa@cverb@skipbreak\break a\break\break l\break ma} %\show\reserved@a %\tracingmacros0 \zzzz %** Typesets already verbatized contents of \reserved@a %** @example \begingroup\makeatletter\pexa@cverb@vdef\reserved@a{#1}\pexa@cverb@typeset\endgroup \def\pexa@cverb@typeset{% \makeatother% make \@delfin@ablakban@ hyphenatable: \@ del-fin @ ab-lak-ban @ \edef\reserved@a{\expandafter\pexa@cverb@addacc\reserved@a\vfuzz\noexpand\@empty}% \pexa@cverb@typeset@low } %** Also called by \pexa@nobackslash \def\pexa@cverb@typeset@low{% % ^^^ Dat: \@empty is for ##1 of a possible \break %\showthe\hyphenchar\font %%\show\reserved@a \def\break##1{% \ifx##1\@empty\else \ifx##1\pexa@cverb@@space\else% Dat: \ifx is slow % ^^^ don't allow break before a space % ^^^ ignore trailing break (followed by \@empty) \pexa@cverb@@tbreak \fi\fi \ifx##1\break\else\expandafter##1\fi% gobble next token if it's \break % ^^^ Dat: \break is a macro, so \ifx may be slow % ^^^ Dat: we never ever have \break\break\break in \reserved@a }% % Imp: cancel \break if \pexa@cverb@@tbreak is \@empty %** @param ##1 accented, \active char with catcode 12 \def\do##1{\lccode`~`##1\lowercase{~}}% %\pexa@cverb@@verbatimfont %\pexa@cverb@@hyphenchar %\showthe\hyphenchar\font % vvv Restore modified font values at \egroup % vvv Dat: it would be too early to restore \hyphenchar at the end of the % group, because \hyphenchar is examined by TeX when the paragraph has % to be broken to lines. % The only solution I can think of for changing \hyphenchar locally % is defining a font with a very similar size (see below). Unfortunately, % dvips(1) embeds two different fonts. % \font\f=cmr10 at 10pt % \font\g=cmr10 at 10.00001pt % \hyphenchar\f=99 %\edef\reserved@b{\noexpand\pexa@aftergroup\noexpand\hyphenchar\the\font=\the\hyphenchar\font\relax\hfuzz}\reserved@b \edef\reserved@b{\noexpand\pexa@aftergroup\noexpand\fontdimen3\the\font=\the\fontdimen3\font\relax\hfuzz}\reserved@b% normal stretch \edef\reserved@b{\noexpand\pexa@aftergroup\noexpand\fontdimen4\the\font=\the\fontdimen4\font\relax\hfuzz}\reserved@b% normal shrink %\show\pexa@cverb@@verbatimfont %\showhyphens{irgumburgum id}% \pexa@cverb@@verbatimfont %\showhyphens{irgumburgum ie}% \pexa@cverb@@hyphenchar %\showhyphens{irgumburgum if}% \pexa@cverb@@stretchshrink %\showthe\hyphenchar\font %\showhyphens{irgumburgum ig}% %\showhyphens{\reserved@a}% %\showhyphens{\tt\reserved@a}% %\hyphenpenalty\z@ %\expandafter\MINUSCHECK\reserved@a......\hfuzz% \expandafter\pexa@cverb@skipbreak\reserved@a\@empty\@empty% Dat: \@empty is sentinel } %\def\MINUSCHECK#1#2#3\hfuzz{% % \edef\reserved@b{\meaning#1}\show\reserved@b % \edef\reserved@b{\meaning#2}\show\reserved@b % \edef\reserved@b{\meaning#3}\show\reserved@b %} %** Usage: \pexa@aftergroup TOKENS\hfuzz \def\pexa@aftergroup#1{% \ifx#1\hfuzz \else\aftergroup#1\expandafter\pexa@aftergroup\fi } \def\pexa@cverb@donormals{\do`\do!\do @\do*\do-\do+\do=\do|\do:\do;\do'\do"\do,\do.\do/\do?\do<\do>\do(\do)\do[\do]}% \def\pexa@cverb@makemathshift#1{\catcode`#13\relax}% %\def\pexa@afterelse#1\else#2\fi{\fi#1}% \def\pexa@cverb@maybeopts{% \if\noexpand\reserved@a[% %\catcode`]12 \egroup\bgroup% restore various catcodes \expandafter\pexa@cverb@withopts \else \expandafter\pexa@cverb@gottoken \fi }% \def\pexa@cverb@withopts#1]{% \pexa@doopts{#1}% in \begingroup, at last % vvv Dat: fonts already loaded \pexa@setupverb% sets \catcodes, similar to `\let\do\@makeother \dospecial\@noligs \@vobeyspaces' \pexa@cverb@catcodes \afterassignment\pexa@cverb@gottoken\let\reserved@a= % } \def\pexa@cverb@mustbebrace#1{% \PackageError{examplep}{\noexpand\PVerb inner delimiter must be brace,\MessageBreak not #1}\@ehc \let\reserved@b\egroup } \def\pexa@cverb@mustntbe#1{% \PackageError{examplep}{\noexpand\PVerb delimiter mustn't be #1}\@ehc \let\reserved@b\egroup } %** Got token in \reserved@a \def\pexa@cverb@gottoken{% \pexa@cverb@@verbatimfont % ^^^ do this before we do too many \catcode changes to load the .fd file. \let\reserved@b\pexa@cverb@outer \ifcat\noexpand\reserved@a$% math-shift \if\noexpand\reserved@a$\else \if\noexpand\reserved@a\space\pexa@cverb@mustntbe{space}\else \if\noexpand\reserved@a\expandafter\@gobble\string\{\let\reserved@b\pexa@cverb@outerbrace \fi\fi\fi \else\ifcat\noexpand\reserved@a\expandafter{\iffalse}\fi% open-brace \let\reserved@b\pexa@cverb@innerbrace \else\ifcat\noexpand\reserved@a\relax % Dat: the \cs token name has been lost, we only have the meaning of \reserved@a \pexa@cverb@mustbebrace{backslash or control sequence or active char}% \else\ifcat\noexpand\reserved@a a% letter \pexa@cverb@mustntbe{a letter,\MessageBreak but got \meaning\reserved@a\space}% % Dat: the outer `\PVerb x' would try to delimit by space, not `x' % Dat: it is possible to get an outer letter: `\expandafter\PVerb\@empty x' \else\ifcat\noexpand\reserved@a,% other \pexa@cverb@mustbebrace{\meaning\reserved@a\space}% % Dat: impossbile to skip to \reserved@a, because I cannot convert it back % to a character token anymore % Imp: write a slow loop \else \pexa@cverb@mustbebrace{\meaning\reserved@a\space(strange)}% \let\reserved@b\egroup %\let\reserved@b\pexa@cverb@inner \fi\fi\fi\fi\fi \reserved@b } % 1: begin-group character { % 2: end-group character } % 3: math shift character $ % 4: alignment tab character & % 6: macro parameter character # % 7: superscript character ^ % 8: subscript character _ % 10: "blank space " % 11: the letter b % 12: the character / % 13: macro:..., undefined, \hbox etc. % cs: macro:..., undefined, \hbox etc. \def\pexa@meaning@beg#1 #2 #3{{1}{#3}}% \def\pexa@meaning@end#1 #2 #3{{2}{#3}}% \def\pexa@meaning@mat#1 #2 #3 #4{{3}{#4}}% \def\pexa@meaning@ali#1 #2 #3 #4{{4}{#4}}% \def\pexa@meaning@mac#1 #2 #3 #4{{6}{#4}}% \def\pexa@meaning@sup#1 #2 #3{{7}{#3}}% \def\pexa@meaning@sub#1 #2 #3{{8}{#3}}% \def\pexa@meaning@bla#1 #2 #3 {{10}{\ }}% \def\pexa@meaning@the#1 #2#3 #4{{\if#2l11\else12\fi}{#4}}% \def\pexa@meaningiii#1#2#3{\csname pexa@meaning@#1#2#3\endcsname}% %** @param #1 a catcode (positive) %** @param #2 character token or `\ ' \def\pexa@cverb@makeeg#1#2#3\vfuzz{% \ifnum#1<1 \@latex@error{Invalid character token}\@ehc\fi %\catcode`#22 % \catcode 2 == end-group \catcode`#213 % \catcode 13 == active \lccode`~`#2\lowercase{\def\reserved@a##1~{\pexa@cverb@outerc{##1}}}% }% \def\pexa@cverb@innerbrace{% \catcode`\{1 %begin-group \catcode`\}2 %end-group \catcode`\ =12 % ^^^ These \catcode changes will become useful when argument of \PVerb has % only been partially seen by TeX's eyes, for example in: % \expandafter\PVerb{foo} \expandafter\pexa@cverb@innerc\expandafter{\iffalse}\fi% put back the extra open-brace } \def\pexa@cverb@vdef@fullhash#1{\pexa@cverb@vdef\reserved@a{#1}}% \def\pexa@cverb@vdef@halfhash#1{% \def\reserved@a{#1}% halves the hashes \expandafter\pexa@cverb@vdef\expandafter\reserved@a\expandafter{\reserved@a}% } %** Takes an argument in braces. \def\pexa@cverb@innerc#1{% \makeatletter% keep space in `\csname @foo' \ifnum\pexa@default@fullhash>0 \expandafter\pexa@cverb@vdef@fullhash \else \expandafter\pexa@cverb@vdef@halfhash\fi {#1}% \pexa@cverb@typeset \egroup } %** Doesn't work inside \halign :-( \def\pexa@cverb@outerbrace{% \catcode`\{1 %begin-group \catcode`\}2 %end-group \catcode`\ =12 \expandafter\pexa@cverb@outerc\expandafter{\iffalse}\fi% !! \halign } \def\pexa@cverb@outer{% \catcode`\{12 %restore to other \edef\reserved@b{\noexpand\pexa@cverb@makeeg\expandafter\pexa@meaningiii\meaning\reserved@a00\vfuzz}% \reserved@b% equivalent to `\catcode\reserved@a=13 \def\reserved@a...' \catcode`\ =12 \reserved@a %\expandafter\pexa@cverb@outerc\expandafter{\iffalse}\fi % ^^^ nice trick, but doesn't work inside a cell of \halign (! Missing { inserted) % ^^^ why doesn't it work in \halign?? -- even the arg may contain open-brace } \begingroup\lccode\string`\+=\string`\#\lowercase{\toks@{% %** `\pexa@removehash foo#Xbar#Yand#\hfuzz' expands to `fooXbarYand', if %** # has catcode 12. \def\pexa@noremovehash#1+\hfuzz{#1}% \def\pexa@removehash#1+#2{#1\ifx\hfuzz#2\else#2\expandafter\pexa@removehash\fi}% }}\expandafter\endgroup\the\toks@ \def\pexa@cverb@outerc#1{% % Dat: #1 might contain begin-group and end-group tokens. Change them to other. % vvv Dat: setting \lccode`a=0 will prevent \showhyphens from working \@tempcnta0 \loop\ifnum\@tempcnta<256 \ifnum\lccode\@tempcnta=\@tempcnta\else \lccode\@tempcnta\z@\fi \advance\@tempcnta\@ne\repeat \lccode`\ =1 %%\lccode`\ =32 \showhyphens{csukafogta b}% \lowercase{\def\reserved@a{#1}}% don't convert `#' to `##' (catcode 6) % ^^^ change space to '\001', so \meaning won't convert it to catcode 10 % Dat: don't expand \reserved@a now, because it might contain high accented tokens \edef\reserved@b##1>{}% macro:...->... \edef\reserved@b{\expandafter\reserved@b\meaning\reserved@a}% \lccode\string`\ =0 % keep spaces generated by `\cs...' \lccode1=\string`\ % \ifnum\pexa@default@fullhash=0 % convert `##' to `#' \edef\reserved@b{\expandafter\expandafter\expandafter\pexa@removehash\expandafter\reserved@b\string##\hfuzz}% \fi \expandafter\lowercase\expandafter{\expandafter\def\expandafter\reserved@b\expandafter{\reserved@b}}% % ^^^ change '\001' back to space %%\show\reserved@a \let\reserved@a\reserved@b \pexa@cverb@typeset \egroup } %** Dat: `\ X' doesn't work, the space will be gobbled :-( %** Dat: a space will be forced after `\W ' if W is a word \begingroup\lccode\string`*\string`\\\lowercase{\endgroup \def\pexa@cverb@nobackslash@lowa#1*\break#2}{% % ^^^ Dat: \break is the \break following the backslash #1\ifx#2\hfuzz\else \ifx#2\break \expandafter\expandafter\expandafter\pexa@cverb@nobackslash@more \else \if#2V\noexpand\char32\relax% visible, unbreakable \else\if#2S\noexpand\pexa@cverb@@space% default space \else\if#2B\noexpand\PexaAllowBreak \else\if#2n\noexpand\hfil\noexpand\break \else\noexpand#2\fi\fi\fi\fi% Dat: #2 is usually the \break preceding a non-letter char \expandafter\expandafter\expandafter\pexa@cverb@nobackslash@lowa \fi \fi } \edef\pexa@cverb@nobackslash@more{\noexpand\pexa@cverb@nobackslash@lowa \expandafter\@gobble\string\\\noexpand\break}% \def\pexa@cverb@removespace@vv#1 #2{% #1\ifx\hfuzz#2\else #2\expandafter\pexa@cverb@removespace@vv \fi } \long\def\pexa@cverb@nobackslash#1{% \begingroup % vvv remove all spaces emitted by \meaning. Fine but ugly. \let\pexa@cverb@removespace@v\pexa@cverb@removespace@vv \let\pexa@removehash\pexa@noremovehash% don't remove \#. Ugly hack. \pexa@cverb@vdef\reserved@a{#1}% %\show\reserved@a %\expandafter\expandafter\expandafter\show\expandafter\@gobble\reserved@a \makeatother% make \@delfin@ablakban@ hyphenatable: \@ del-fin @ ab-lak-ban @ \edef\reserved@a{\expandafter\pexa@cverb@addacc\reserved@a\vfuzz \noexpand\@empty\expandafter\@gobble\string\\\noexpand\break}% % Dat: expandable constructs emitted by \pexa@cverb@addacc: % \do(unsave OK) \break \pexa@cverb@@space \let\pexa@@save@pcs\pexa@cverb@@space \let\pexa@@save@break\break \let\pexa@cverb@@space\relax \let\do\relax \let\break\relax \edef\reserved@a{\expandafter\pexa@cverb@nobackslash@lowa\reserved@a\hfuzz}% \let\pexa@cverb@@space\pexa@@save@pcs \let\break\pexa@@save@break \pexa@cverb@typeset@low \endgroup } % --- One-character verbatim environments % % !! translate this Hungarian text to English. % % -- A kis-verbatim \verb+...+ helyett \'irhat\'o az, hogy ^^f7...^^f7 % (az italic correction az\'ert kell el\'e, hogy ha parancs defin\'ici\'okn\'al % italic-kal \'irunk egy opcion\'alis param\'etert, ne kelljen ut\'ana k\'ezzel % korrig\'alni.) Mostm\'ar sorv\'ege jel is lehet benne, mert \PVerb-et haszn\'al % (sorv\'ege==sz\'ok\"oz), de ha a k\"ovetkez\H{o} sor sz\'ok\"ozzel kezd\H{o}dik, akkor t\"obb % sz\'ok\"oz lesz. Haszn\'alhat\'o \section-ben is, \'es (\'ovatosan) tabular-ban is, % ha minden oszlop-ban a brace-ek balance-ol\'odnak. Lehet benne \'ekezetes % bet\H{u}. % % Legjobb emacsban azt \'irni, hogy % sz\"oveg..... % %%% % ^^f7aaa aaa aaa^^f7 sz\"oveg folytat\'asa ... % mert akkor a comment miatt nem t\"ori el a verbatimos sz\"oveget. % % -- \^^f7...^^f7 olyan, mint a ^^f7...^^f7, de minden speci\'alis karakter el\'e backslash % kell. P\'eld\'aul: \^^f7\{\}\%\\^^f7. Ily m\'odon k\"onnyebben adhat\'o % makr\'o-argumentumnak. \^^f7\V^^f7 egy l\'athat\'o sz\'ok\"ozt sz\'ur be, \^^f7\B^^f7 % \PexaAllowBreak-et (kis jellel sort\"or\'est enged\'elyez), \^^f7\S^^f7 ugyanaz, % mint ^^f7 ^^f7. Ha minden el\'e gondosan kirakjuk a % backslash-t, akkor haszn\'alhat\'o \section-ben is. % % -- \Q{...} \'es \Q. olyan, mint \^^f7...^^f7. Teh\'at l\'athat\'o sz\'ok\"oz: \Q\V % % -- !! ^^f7#^^f7 nem megy, de \Q\^^f7 igen % \begingroup \catcode`^^f7=13 \@firstofone{\endgroup \def\pexa@div@setcodes{\catcode`^^f7=13 % /divide-sign \lccode`^^d7=0 \uccode`^^d7=0 % /multiply-sign isn't a lower-upper case variant (\OE?) \lccode`^^f7=0 \uccode`^^f7=0 } %** Can be used in \section (as ``inner'' \PVerb), with limitations. %** !! parameters, as with ^^f7#^^f7 \def\pexa@div{% Dat: not \long. File. ^^f7 \ifx\protect\@typeset@protect \expandafter\pexa@overb@low \else \noexpand\pexa@div %\expandafter\pexa@overb@ignore doesn't work :-(( \fi } %** Works in math mode, too. What about robustness? \def\pexa@overb@low{% ASCII 247 % Dat: would be too late for \catcode of `\PVerb^^f7' here % Imp: check for innerness-outerness \relax\ifmmode\hbox\else\leavevmode\/\fi \bgroup %\pexa@doopts{#1}% in \begingroup, at last {\pexa@cverb@@verbatimfont}% load .fd files with undisturbed \catcodes \pexa@setupverb \pexa@cverb@catcodes \catcode\string`\{12 % restore to other \catcode\string`\ 12 \catcode`^^f7=13 \def\reserved@a##1^^f7{% Dat: define with current \catcode`^^f7 %\showthe\catcode`-% 3 (math-shift) \pexa@cverb@outerc{##1}}% defined in examplep.sty \reserved@a %\expandafter\pexa@cverb@outerc\expandafter{\iffalse}\fi % ^^^ nice trick, but doesn't work inside a cell of \halign (! Missing { inserted) % ^^^ why doesn't it work in \halign?? -- even the arg may contain open-brace } \def\pexa@nomath{\relax\ifmmode\hbox\else\leavevmode\/\fi} %** Dat: we need \long for index generation of \Q{\par} \long\def\pexa@Q#1{\pexa@bsdiv#1^^f7}% \Q \long\def\pexa@bsdiv#1^^f7{% \^^f7 % An evil #1 may contain \fi here, so we have to be very careful. \ifx\protect\@typeset@protect \expandafter\@gobble\fi\@thirdofthree\@firstoftwo \pexa@nomath\pexa@overb@noe@a {\pexa@cverb@nobackslash{#1}}% %\ifx\protect\@typeset@protect \pexa@nomath{\pexa@cverb@nobackslash{#1}}% %%\else \noexpand\^^f7#1\noexpand^^f7\fi % Undefined control sequence \V %%\else \BackslashDivideIsFragile \fi %\else \noexpand\^^f7\expandafter\pexa@overb@noexpand#1^^f7\fi }% \long\def\pexa@overb@noe@a#1{\pexa@overb@noe@b#1}% \long\def\pexa@overb@noe@b\pexa@cverb@nobackslash#1{% \noexpand\^^f7\expandafter\pexa@overb@noexpand#1^^f7} \long\def\pexa@overb@noexpand#1{% \noexpand#1% \ifx#1^^f7\else\expandafter\pexa@overb@noexpand\fi } \def\pexa@activate@Q{\let\Q\pexa@Q} \def\pexa@activate@bsdiv{\pexa@div@setcodes \let\^^f7\pexa@bsdiv} \def\pexa@activate@div {\pexa@div@setcodes \let^^f7\pexa@div} \def\pexa@activate@url {\def\url{\PVerbOpt{}}} }% ^^f7 has catcode 13 % --- %** Apply default options. \pexa@doopts{% samplewidth=.5\PexaWidth,xalign=l,yalign=u,boxstyle=p, allowshrink=yes,allowbreak=yes,srcstyle=left,usewidth=skipwidth, xindent=none,yindent=none,source-space=invfixbreak,firstlinenum=1, pexaminipage-setuphook={},addvspace-top=\addvspace, addvspace-bottom={\vskip\z@skip\addvspace},% don't accumulate Sample>Source \vskip vextravskip=\z@,vsmallht=1pt, linenumbersep={},linenumberformat={{\normalfont\rmfamily\scriptsize\number-\pexa@@cntb}\pexa@default@linenumbersep}, pverb-space=invbreak,pverb-hyphenchar=hyphen,pverb-verbatimfont=pexavf, pverb-linebreak=char,pverb-linebreakchar={$\lnot$},pverb-stretchshrink=yes, pverb-hash=full,psource-verbatimfont=pexavf,baseline-grid=no, vextrabotdepth=\z@,pverb-leftbreakmin=2,mp-equation-reset=yes, mp-varioref-reset=no,Q=unchanged,bsdiv=unchanged,div=unchanged,url=unchanged, source-par-align=left, } % Dat: inlineprefix= is missing. \AtEndOfPackage{\let\@unprocessedoptions\relax} \expandafter\ifx\csname opt@\@currname.\@currext\endcsname\relax\else \expandafter\expandafter\expandafter\pexa@doopts \expandafter\expandafter\expandafter{% \csname opt@\@currname.\@currext\endcsname}\fi %\edef\reserved@a{\noexpand\pexa@doopts{\@ptionlist{\@currname.\@currext}}}% %\reserved@a \pexa@@restorecat \let\pexa@@restorecat\@undefined \endinput% examplep.sty