\deleteenvironment --- Re: opak \def

Antonin Strejc STREJC at vc.cvut.cz
Mon Mar 15 10:37:44 CET 1999


Petr Mikulik pise:

>>> Biji se mi v LaTeXu prostredi definovana stejne v ruznych balicich, takze
>>> potrebuji napsat opak k \@namedef, resp. primo \deleteenvironment.
>
>Diky za rady, tady je vysledne reseni:
>
>\def\deleteenvironment#1{
>\expandafter\let\csname #1\endcsname\relax
>\expandafter\let\csname end#1\endcsname\relax
>}
>Pouziti napr.: \deleteenvironment{equation*}

Ve svem puvodnim dotazu jste ale pozadoval neco jineho -- zrusit
definici makra. Toto reseni "neodstranuje \def", tedy presneji nerika,
ze prislusne makro prestava byt definovano. Jinak by bylo potreba
misto \relax prirazovat \undefined.

LaTeXovske makro \newcommand pouziva k otestovani, zda jmeno noveho
prikazu jiz je definovano, konstrukci (zjednodusene):

\expandafter\ifx\csname...\endcsname\undefined ... \else Warning \fi

Stejny test se provadi i pri \newenvironment, nebot expanduje
na sekvenci, ve ktere je opet \newcommand.

Ve Vasem reseni tedy v pripade prvniho nasledujiciho \newcommand
resp. \newenvironment LaTeX vyhodi hlasku, ze command name
je already used. Az se tak stane, zamente \relax za \undefined.
Pokud ale nebudete dale pouzivat \newcommand ci \newenvironment, je
mozne, ze i naznacene reseni vyhovi, nicmene neni to obecna rada,
jak zrusit definici makra.

S pozdravem
Antonin Strejc

---------------------------------------------------------------------
Ing. Antonin Strejc                            Phone: +420-2-24352938
---------------------------------------------------------------------
Czech Technical University in Prague                 Computing Centre
Czech Republic                               Zikova 4, 166 35 Praha 6
---------------------------------------------------------------------



More information about the csTeX mailing list