sazba zdrojoveho kodu
David Necas (Yeti)
yeti at physics.muni.cz
Sat Dec 10 15:53:35 CET 2005
On Sat, Dec 10, 2005 at 01:40:44PM +0100, Viktor Patras wrote:
> rad bych si vytvoril prostredi pro sazbu prikazu/skupin prikazu
> zdrojoveho kodu v beznem textu v LaTeXu. Zkousel jsem definovat
>
> \newenvironment{matlab}{\begin{quote}
> \begin{verbatim}}{\end{verbatim} \end{quote}}
>
> a pak v textu pouzit
>
> \begin{matlab}
> >> x = ...
> \end{matlab}
>
> ale neprelozi se to a hlasi to chybu
>
> Runaway argument?
> \begin{priklad}\ETC.A,b,Aeq,beq,lb,ub)"
> !File ended while scanning use of \@xverbatim.
> <inserted text>
> \par
> <*> ovm
>
> kde ovm je nazev dokumentu.
>
> Neda se ten par begin/end{verbatim} nejak jednoduse rozseknout, aby
> mohl byt begin v definici prostredi "pred" a end v "po"?
Jednoduše ne, protože prostředí verbatim je speciální.
O co jde: \begin{verbatim} nakonec vede na něco jako
\@xverbatim, což je makro definované s koncovým oddělovačem
\end{verbatim}, tj. zhruba
\gdef\@xverbatim#1\end{verbatim}{tělo makra}
^^^^^^^^^^^^^^
delimiter
Když TeX dojde k \x at verbatim, začne tedy bez expanse scanovat
tokeny, dokud nenarazí na ,\end{verbatim}`. A to jako
posloupnost znaků, kde \, { i } mají catcode 12, není to
žádný příkaz \end s parametrem verbatim. Skutečná definice
proto taky vypadá
|gdef|@xverbatim#1\end{verbatim}[tělo makra]
kde | nahrazuje \, [ nahrazuje { a ] nahrazuje }, jelikož
kategorie znaků musejí sedět s použitím -- a ve chvíli
použití už jsou kategorie \, { a } změněné (a kromě toho by
jinak TeX považoval {verbatim} za tělo makra).
Podstatné je, že nic, co není sekvence znaků ,\end{verbatim}`,
neukončí paramter makra \@xverbatim. Takže ve vašem případě
TeX celkem logicky dojde až na konec souboru a začne se
nahlas divit.
Nejjednodušší řešení je definovat nové verbatim-like
prostředí od nuly, takže bude mít vlastní analogii
\@xverbatim s argumentem ukončeným svým vlastním
delimiterem. Můžete začít s kopií verbatim z latex.ltx, kde
všechno přejmenujete, a pak si to upravíte k obrazu svému,
nebo z přímočařejších maker např. z TBN (kde ostatně najdete
i lepší a podrobnější popis fungování maker typu verbatim).
Také by možná šlo v begin části nového prostředí lokálně
změnit definici \@xverbatim, aby mělo delimiter \end{matlab}
namísto \end{verbatim}, ale nezkoušel jsem to, takže nevím,
s jakými potížemi byste se přitom musel potýkat.
Yeti
--
That's enough.
More information about the csTeX
mailing list