PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Geschwungene Klammer als Argument



trustee
05-09-2013, 14:41
Hallo zusammen,

ich versuche, eine neue Umgebung zu definieren, die mit "}" enden soll. Wie kann ich ein "}" in die Definition der Umgebung einbeziehen? Naturgemäß interpretiert Latex das "}" als Ende der Definition.

Hier ein (nicht funktionierendes) Beispiel:


\documentclass{article}

\newenvironment{\testenv}{%
\emph{% Beginn der Umgebung
}{%
}% Ende der Umgebung
}

\begin{document}
\begin{testenv} % Dies soll durch "\emph{" ersetzt werden.
Test
\end{testenv} % Dies soll durch "}" ersetzt werden.
\end{document}



\emph ist natürlich nur ein Platzhalter für eine komplexere Umgebungsdefinition.

Vielen Dank im Voraus für Vorschläge!

Gruß
Sebastian

u_fischer
05-09-2013, 14:52
In deinem Beispiel solltest du \emph einfach durch \em ersetzen. Wenn du wirklich den Inhalt der Umgebung als Argument brauchst, musst du ihn erst einsammeln. Z.B. mit einer lrbox oder mit dem environ-Paket.

esdd
05-09-2013, 15:21
Vielleicht reicht auch

\documentclass{article}
\newenvironment{testenv}{\emph\bgroup}{\egroup}

\begin{document}
\begin{testenv}
Test
\end{testenv}
\end{document}

Gruß
Elke

klops
05-09-2013, 17:01
In dem Fall ist \em wirklich überlegen:
\documentclass{article}
\newenvironment{testenvA}{\emph\bgroup}{\egroup}
\newenvironment{testenvB}{\em}{}
\begin{document}
\begin{testenvA}
testenvA

testenvA
\end{testenvA}

\begin{testenvB}
testenvB

testenvB
\end{testenvB}
\end{document}
Um das mit \emph richtig hinzubekommen, muss man nach \bgroup noch ein \ignorespaces hinzufügen. Das macht die ganze Definition etwas unhandlich. Die Umschalter (\em, \bfseries, \itshape etc.) sind je geradezu für Umgebungen gemacht.

trustee
06-09-2013, 10:02
Vielen Dank für eure Antworten! \emph war ein blödes Beispiel, da mein Problem komplexer ist. Allerdings ist mir jetzt klargeworden, dass ich anstatt mit \newenvironment auch einfach mit \newcommand arbeiten kann und die geschwungene Klammer nicht in die Definition einbeziehe, sondern einfach im Dokument bringe. Der Vollständigkeit halber ist hier meine Lösung, auch wenn sie für viele Forenleser nicht sonderlich relevant sein dürfte:



\documentclass[
handout,
11pt
]{beamer}
\usepackage{ae}
%% Preparation vs. complete
% Handout 1: Preparation
\newcommand{\notinprep}{\only<handout>{
\begin{center}
\footnotesize{\emph{(Blank in handout)}}
\end{center}
}\visible<beamer>}
% Handout 2: complete
%\renewcommand{\notinprep}[1]{#1}
\begin{document}
\frame{
\frametitle{An example}
Imagine that the US is preparing for the outbreak of an unusual Asian disease, which is expected to kill 600 people. There are two alternative programs.
\notinprep{This text should not appear in the handout for preparation.}
}
\end{document}


Der Code-Editor entfernt leider zwei Teilbefehle: Hinter \only fehlt "handout" in Kleiner-/Größerzeichen und hinter \visible das gleiche für "Beamer".

Das Beispiel zeigt, was ich erreichen möchte: In Beamer hätte ich gerne drei Versionen meines Dokuments. Erstens ein Handout zur Vorbereitung, in dem einige Inhalte fehlen. Diese Version wird durch das obige Beispiel erzeugt. Zweitens benötige ich die Vortragsfolien. Dazu kommentiere ich "handout" mit % aus. Drittens benötige ich zur Nachbereitung ein Handout, in dem alle Inhalte vorhanden sind. Dafür entferne ich % vor "\renewcommand{\notinprep}[1]{#1}" und "handout".

Beste Grüße
Sebastian

esdd
06-09-2013, 10:21
Hallo,

das Problem mit den < und > hatte ich auch kürzlich. Ersetze sie in solchen Fällen einfach durch ihre HTML-Namen (http://www.schwedisch-translator.de/synonyme/sonderzeichen.html), dann klappt es.


\only&lt;handout&gt;{
... \visible&lt;beamer&gt;}

Gruß
Elke

u_fischer
06-09-2013, 10:24
Ich würde ja eher sowas machen:


\documentclass[
handout,
11pt
]{beamer}

%\newcommand\hnr{1} %text ist im Handout
\newcommand\hnr{0} %text ist nicht im Handout
\begin{document}
\frame{
\frametitle{An example}
Imagine that the US is preparing for the outbreak of an unusual Asian disease, which is expected to kill 600 people. There are two alternative programs.
\only&lt;handout:\hnr&gt;{This text should not appear in the handout for preparation.}
}
\end{document}

klops
06-09-2013, 11:52
Wie man an Ulrikes erstklassiger Antwort sieht, ist es immer gut, das eigentliche Problem zu schildern und nicht nur das Problem, das man mit dem eigenen Lösungsversuch hat.

trustee
06-09-2013, 12:45
Das ist wohl wahr. Ich nehme das Wort "Minimalbeispiel" manchmal zu wörtlich.