Welche Umgebungen können bei newcommand benutzt werden?

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


jago
Forum-Newbie
Forum-Newbie
Beiträge: 7
Registriert: Di 6. Okt 2015, 15:07

Welche Umgebungen können bei newcommand benutzt werden?

Beitrag von jago »

Hallo zusammen,

wer kann mir sagen warum das erste Beispiel kompiliert wie erwartet, aber das zweite gar nicht?

Viele Grüße,
Jago
\documentclass{article}
\newcommand{\dummy}[1]{#1}
\begin{document}
\dummy{
\begin{center}
halloWelt
\end{center}
}
\end{document}
\documentclass{article}
\newcommand{\dummy}[1]{#1}
\begin{document}
\dummy{
\begin{verbatim}
halloWelt
\end{verbatim}
}
\end{document}

Gast

Beitrag von Gast »

verbatim und ähnliche Umgebungen und Befehle arbeiten mit catcode-Änderungen. Ein catcode gibt grob gesagt an, wie ein Zeichen der Eingabe zu behandeln ist, beispielsweise ob es einen Befehl einleitet oder ein Buchstabe ist oder eine Ziffer oder ein Leerzeichen oder sogar zu ignorieren usw.

Eine catcode-Änderung hat also direkte Auswirkungen darauf, wie ein Zeichen beim Einlesen verarbeitet wird. Bei \dummy{foo} wird foo bereits von \dummy eingelesen. Damit stehen die catcodes der Zeichen bereits fest, bevor sie in die Umgebung verbatim gestellt werden. Die catcode-Änderungen der Umgebung haben also keine Wirkung mehr darauf.

Das betrifft alle Umgebungen und Befehle, die mit catcode-Änderungen arbeiten.

jago
Forum-Newbie
Forum-Newbie
Beiträge: 7
Registriert: Di 6. Okt 2015, 15:07

Beitrag von jago »

Ok vielen Dank auf jeden Fall für deine Antwort.

Gibt es vielleicht einen einfachen Weg das Problem zu umgehen?

Viele Grüße,
Jago

Gast

Beitrag von Gast »

Mit Hilfe von verbatim und ähnlichen Paketen kann man eigene Umgebungen definieren, die auf der verbatim-Umgebung basieren. Näheres ist der jeweiligen Paketanleitung zu entnehmen.

Für einen Befehl müsste man dagegen einen von \verb abgeleiteten Befehl definieren. Das ist aber nicht trivial. Solange der Code des Befehls nur zusätzlichen Code vor \verb ausführen soll, ist es kein Problem. Dann darf der neue Befehl das Argument nur nicht selbst anfassen:
\documentclass{article}
\newcommand*{\myverb}{Jetzt kommt ein Befehl: \verb}
\begin{document}
\myverb|\document|
\end{document}
Hier ist also \myverb erst einmal ein Befehl ohne Argument und erst das \verb am Ende von \myverb verarbeitet das Argument (bzw. ein davon aufgerufenes Makro).

Für einen Befehl, der danach noch etwas ausführen soll, geht das nicht so einfach. Da müsste man sich schon intensiv mit der Definition aus dem LaTeX-Kern befassen.

Da ich nicht weiß, was du tatsächlich vor hast, weiß ich leider auch nicht, ob dir das weiter hilft.

jago
Forum-Newbie
Forum-Newbie
Beiträge: 7
Registriert: Di 6. Okt 2015, 15:07

Beitrag von jago »

Sorry für meine späte Reaktion.

Die Antworten haben mir auf jeden Fall weiter geholfen. Danke dafür.
Dabei belass ich es erstmal ;)

Liebe Grüße,
Jago

Antworten