Verbatim tak, aby vypsalo svuj zdrojak

Hans GINZEL hgin2088 at mail.kolej.mff.cuni.cz
Wed Jun 9 13:02:19 CEST 1999


	Dobry den.

> Mam na mysli obdobu ceckovskeho zdrojaku, ktery udela jedine, a totiz
> vypise svuj zdrojovy kod. Neco jako:
>
> verbatim.tex:
>
> ---------------------
> % Makra pro definici verbatim
> ...
> \beginverbatim
> \input verbatim.tex
> \endverbatim
>
> \end
> ---------------------

   Tohle Vam ma podle definice verbatim prostredi vysazet backslash, slovo
input, mezeru, a text verbatim.tex, nikoliv inputovat soubor!

   Muzete to obejit pomoci \expandafter:

\expandafter \beginverbatim \input verbatim.tex \endverbatim

   Problem je v tom, ze Vam vypis skonci u prvni sekvence \endverbatim. V
makrech pro definici verbatim se lze sekvenci \endverbatim ubranit pomoci
\csname a \endcsname. Ale skonci to prave u toho \endverbatim za \input.

   Makro nesmi byt definovene tak, ze cely text scanuje do parametru makra
az do sekvence \[kategorie 12]endverbatim, protoze by vyskyt takovehle
sekvence musel byt v makrech pro definici verbatim.

   Odzkousel jsem dve moznosti, jak to obejit. Jedna byla primo definice
makra \inputverb, ktere inputuje verbatim soubor, specialne sama sebe.
V druhem pripade si vse naraficim do tokenregistru \buffer a nakonec dam
\the\buffer.

%%% %%% Self printing verbatim macro %%%
%%% Hans Ginzel <Hans at kolej.mff.cuni.cz>
%%% format: Plain         date: 9.6.1999

%% v. 1.0   use of \inputverb, ending of verbatim
%%          by macro parameters scanning mechanism

{\obeyspaces \gdef\activespace{\obeyspaces \let =\ }}
\def\setverb{\def\do##1{\catcode`##1=12}\dospecials}
\def\verb{\par\bgroup \setverb \activespace
    \def\par{\futurelet\next\wheterpar}%
    \def\wheterpar{\endgraf \ifx \next\par \leavevmode \fi}%
    \obeylines \tt}

%%% Environment \begtt ...\endtt
\def\begtt{\verb \startverb}
{\catcode`\|=0 \catcode`\\=12
    |gdef|startverb#1\endtt{#1|egroup}}

%%% Verbatim input of files
\def\inputverb #1 {\verb \input #1 \egroup}

%%% Print self
\inputverb verb.tex
\end
-------------------------------------------------------------------

%%% %%% Self printing verbatim macro %%%
%%% Hans Ginzel <Hans at kolej.mff.cuni.cz>
%%% format: Plain         date: 9.6.1999

%% v. 1.0   use of \inputverb, ending of verbatim
%%          by macro parameters scanning mechanism
%% v. 1.2   ending of verbatim by activated backslash
%%          and testing next letters
%% v. 1.3   trickary with tokenregister \buffer in the end

{\obeyspaces \gdef\activespace{\obeyspaces \let =\ }}
\def\setverb{\def\do##1{\catcode`##1=12}\dospecials}
\def\verb{\par\bgroup \setverb \activespace
    \def\par{\futurelet\next\whetherpar}%
    \def\whetherpar{\endgraf \ifx \next\par \leavevmode \fi}%
    \obeylines \tt}

\newtoks\buffer
\def\reset{\buffer={}}
\def\add#1{\buffer=\expandafter{\the\buffer #1}}

%%% Environment \begtt ... \@ndtt (@ means e [because of self print])
{\catcode`\|=0 \catcode`\\=\active
    |gdef|begtt{|verb |catcode`|\=|active |let\=|test}}

\def\test{\futurelet\next\whetherletter}
\def\whetherletter{\ifcat \noexpand\next A\def\next##1{\add##1\test}%
    \else \let\next=\maybeendtt \fi \next}
\def\maybeendtt{\edef\next{\the\buffer}%
    \expandafter \ifx \csname endtt\endcsname \next \let\next=\egroup
    \else \let\next=\relax \char`\\\the\buffer \fi \reset \next}
\expandafter \def \csname endtt\endcsname{endtt}

%%% Print self
\buffer={\reset \expandafter \begtt \input verb3.tex }
{\catcode`\|=0 \catcode`\\=\active
    |global |add\}
\add{endtt\end}
%\escapechar=`\| \message{\the\buffer}
\the\buffer
------------------------------------------------------------------

   Jestli mate zajem, napsal jsem obdobny programek i v Pascalu.

	S pozdravem,

        _				Hans
  ,~|  |/                    /~~~,                   ,
    | /|                    /       .               /
    |/ |/~/~~/  /~~/ \~~   |    _  / /~~/ ~~/ /~~/ /
   /| /| /  /_ /  / , \     \   / / /  /  /  /~~~ /
   ~  ~  ~~~  '  '  ~~~      ~~~|' '  ' '~~  ~~~ '
  Hans GINZEL                  /|   Room: B509
  Faculty of Mathematics      / /   Kolej 17. listopadu
    and Physics               ~~    Pa'tkova 3
  Charles University Prague         182 00 Praha 8
  MailTo:Hans at kolej.mff.cuni.cz     CallTo:++420+2+8551040-49/761




More information about the csTeX mailing list