Anzeige:
Ergebnis 1 bis 9 von 9

Thema: Geschwungene Klammer als Argument

  1. #1
    Registrierter Benutzer
    Registriert seit
    19.04.2006
    Beiträge
    88

    Geschwungene Klammer als Argument

    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:
    Code:
    \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

  2. #2
    Registrierter Benutzer
    Registriert seit
    19.05.2009
    Beiträge
    4.045
    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.

  3. #3
    Registrierter Benutzer
    Registriert seit
    21.08.2009
    Beiträge
    496
    Vielleicht reicht auch
    Code:
    \documentclass{article}
    \newenvironment{testenv}{\emph\bgroup}{\egroup}
    
    \begin{document}
    \begin{testenv}
      Test
    \end{testenv}
    \end{document}
    Gruß
    Elke

  4. #4
    Registrierter Benutzer
    Registriert seit
    09.12.2005
    Beiträge
    1.327
    In dem Fall ist \em wirklich überlegen:
    Code:
    \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.

  5. #5
    Registrierter Benutzer
    Registriert seit
    19.04.2006
    Beiträge
    88
    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:

    Code:
    \documentclass[
    handout,
    11pt
    ]{beamer}
    \usepackage{ae}
    %% Preparation vs. complete
    % Handout 1: Preparation
    \newcommand{\notinprep}{\only{
    \begin{center}
    \footnotesize{\emph{(Blank in handout)}}
    \end{center}
    }\visible}
    % 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

  6. #6
    Registrierter Benutzer
    Registriert seit
    21.08.2009
    Beiträge
    496
    Hallo,

    das Problem mit den < und > hatte ich auch kürzlich. Ersetze sie in solchen Fällen einfach durch ihre HTML-Namen, dann klappt es.

    Code:
    \only<handout>{
    ... \visible<beamer>}
    Gruß
    Elke

  7. #7
    Registrierter Benutzer
    Registriert seit
    19.05.2009
    Beiträge
    4.045
    Ich würde ja eher sowas machen:

    Code:
    \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<handout:\hnr>{This text should not appear in the handout for preparation.}
    }
    \end{document}

  8. #8
    Registrierter Benutzer
    Registriert seit
    09.12.2005
    Beiträge
    1.327
    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.

  9. #9
    Registrierter Benutzer
    Registriert seit
    19.04.2006
    Beiträge
    88
    Das ist wohl wahr. Ich nehme das Wort "Minimalbeispiel" manchmal zu wörtlich.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •