2009-12-09 10 views
18

Wie kann ich einen LaTeX-Befehl in einer Umgebung umbrechen? Wie kann ich \ somecommand {contents} in \ begin {somecommand} contents \ end {some command} umwandeln? Ich habe das Offensichtliche versucht, eine neue Umgebung als solche zu erstellen:Wrap LaTeX-Befehl in der Umgebung

\newenvironment{somecommand}[0]{ 
    \somecommand{ 
} 
{ 
    } 
} 

, aber dies verursacht Probleme mit den geschweiften Klammern. Lassen Sie mich ein konkreteres Beispiel geben. Angenommen, Sie möchten die Umgebung sehr wichtig erstellen, und Sie möchten dazu den Befehl emph verwenden. Eine einfache (aber falsch) Lösung wäre etwas wie hier

\newenvironment{very-important}[0]{ 
    \emph{ 
} 
{ 
    } 
} 

Das Problem zu schreiben ist, dass das Kommando arbeitet mit den Informationen, die in der Umgebung gefunden wird, so dass es nicht eine der Öffnungsbefehle der Umwelt noch ist es ein abschließendes Gebot der Umwelt. Die Frage ist dann: Wie können Sie das tun?

+0

Stellen Sie eine neue Frage über Ihre Farbbox, ich sage Ihnen die beste Lösung, ohne die Argumente zweimal zu lesen. –

Antwort

10

Es scheint, dass ich jetzt erraten kann, was die Frage ist.

\newenvironment{very-important}{\startimportant}{} 
\def\startimportant#1\end{\emph{#1}\end} 

\begin{very-important} 
Something 
\end{very-important} 

Diese Lösung funktioniert gut. Aber IMHO ist es eine schlechte Idee, den gesamten Text in die Umgebung zu packen. Warum? Es gibt zwei Möglichkeiten, etwas mit dem Text zu tun. Beispielsweise möchten Sie die Schriftart ändern und kursiv verwenden.

  • Die erste Methode. \textit{sentence written in italics}
  • Die zweite Methode. {\it sentence written in italics\/}

Was ist der Unterschied? Die Sache ist, dass die erste Methode die zweite verwendet. \it Makro ändert die Schriftart und die Klammer } ändert es zurück. \textit Makro liest das vollständige Argument, ändert die Schriftart und fügt das Argument erneut ein: \textit wird grob wie folgt definiert (nicht genau).

\def\texit#1{{\it#1\/}} 

Die erste Methode macht immer zusätzliche Arbeit. Es liest das Argument zweimal. Fast immer können Sie Änderungen vornehmen und dann können Sie alles zurück.

Schließlich warum verwenden Sie die Umgebung? Verwenden Sie Makros.

\veryimportant{ 
    Any thought 
} 
+0

Vielen Dank für diese Lösung! Eigentlich brauche ich die Umgebung nicht für etwas so Triviales wie das Hervorheben von Text. Der Hauptgrund für dieses Beispiel ist, dass die meisten Menschen das verstehen und die Frage und die Antwort für viele anwendbar machen. Meine persönliche Verwendung besteht darin, eine Farbbox und eine Ausrichtung in eine neue Umgebung einzubetten. Da colorbox ein Befehl ist, wusste ich nicht, wie ich das machen soll. Nichtsdestoweniger ist es für meine Verwendung sinnvoller, eine Umgebung zu verwenden, nicht zuletzt, weil sie das Durcheinander und den Platzregen geschweifter Klammern verhindert, was die Bearbeitung zu einem späteren Zeitpunkt ziemlich schwierig macht. Vielen Dank! – kvaruni

-1

Neue Umgebung somecommand definiert das Makro \somecommand. Sie können das Makro mit dem gleichen Namen \somecommand nicht verwenden.

Außerdem sollten Sie

\newenvironment{name}{openning command}{closing commands} 

schreiben statt

\newenvironment{somecommand}[0]{ \somecommand{ } { } } 

Sie offensichtlich ein Problem mit Schließbefehle haben.

+0

Sie wiederholten mein Problem, also änderte ich meine ursprüngliche Frage, um das Problem, das ich habe, besser zu erklären. Ich hoffe das klärt es! Danke trotzdem! – kvaruni

19

Dies kann wie folgt mit dem environ Paket erfolgen:

 
\usepackage{environ} 
... 
\NewEnviron{very-important}{\emph{\BODY}} 

\BODY den Körper der Umgebung enthält, und Umgebungen verschachtelt werden können. Weitere Informationen finden Sie in der Dokumentation.

+0

Danke, obwohl die andere Lösung funktioniert, ist die Lösung, die Sie vorschlagen, sicherlich einfacher! – kvaruni

1

Befehl

\newcommnad{eqn}{1}{\begin{equation}#1\end{equation}} 

ändern
\eqn{x^2=y} 

zu

\begin{equation} 
    x^2=y 
\end{equation} 

ich denken konnte,

3

Ein einfacherer Weg sein wird, definieren:

\newenvironment{somecommand}[0]{ \somecommand\bgroup } { \egroup }

Erläuterung: \bgroup Werke wie { und \egroup Werke wie }.

+2

funktioniert nicht mit allen Befehlen, z. '\ fbox' – Hotschke