verschachtelte Parameter

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: verschachtelte Parameter

von cgnieder » Mo 10. Feb 2014, 19:02

Wenn Du beispielsweise einen Tippfehler hast und die Definiion mit \begin/\end machst:
\documentclass{scrreprt}

% dummy-Definition
\newcommand{\myeins}[1]{}

\newenvironment{myenv}[1]
  {%
    \renewcommand{\myeins}[1]{eins-env: #1 eins-myeins: ##1}%
    \begin{itemize}%
  }
  {\end{itemize}}

\begin{document}

\begin{myenv}{myenv-Parameter}
  \item \myeins{myeins-Parameter}
\end{myenw}

\end{document}
dann erhältst Du den Fehler
! LaTeX Error: \begin{itemize} on input line 15 ended by \end{myenw}.
Dabei enthält Zeile 15 doch gar kein \begin{itemize}! Es macht vielleicht nichts in diesem Fall, da Du die Umgebung selbst definiert hast. Stell Dir aber vor, Paketautoren würden das auch machen...

Die Alternative
\documentclass{scrreprt}

% dummy-Definition
\newcommand{\myeins}[1]{}

\newenvironment{myenv}[1]
  {%
    \renewcommand{\myeins}[1]{eins-env: #1 eins-myeins: ##1}%
    \itemize
  }
  {\enditemize}

\begin{document}

\begin{myenv}{myenv-Parameter}
  \item \myeins{myeins-Parameter}
\end{myenw}

\end{document}
liefert die viel aussagekräftigere Fehlermeldung
! LaTeX Error: \begin{myenv} on input line 15 ended by \end{myenw}.
Zur anderen Frage: wenn man eine Umgebung
\newenvironment{myenv}
  {start}
  {ende}
definiert, dann definiert man im Grunde genommen zwei Befehle, in etwa
\def\myenv{start}
\def\endmyenv{ende}
Das ist zwar nicht alles, was bei der Definition passiert, fasst aber das wesentliche zusammen. Das bedeutet, man kann jede Umgebung (mit Ausnahmen) auch durch zwei Befehle \umgebung/\endumgebung verwenden. Im Dokument selber ist das eher zu vermeiden, in Definitionen neuer Umgebungen aber von Vorteil, unter anderem aus obigen Grund.

Grüße

von MoonKid » Mo 10. Feb 2014, 18:15

cgnieder hat geschrieben:
\newenvironment{myenv}[1]
  {%
    \renewcommand{\myeins}[1]{eins-env: #1 eins-myeins: ##1}%
    \itemize
  }
  {\enditemize}
Den Part verstehe ich nicht ganz. Wo ist das begin-end geblieben? Zu dem \itemize find ich keine Doku.

Woher soll ich in Zukunft wissen, dass ich DAS nehmen soll. Wo ist der Vorteil?

Ich hab beides probiert. Sehe keinen Unterschied.

von cgnieder » So 9. Feb 2014, 20:45

Ich würde noch zwei Änderungen vornehmen: 1) die innere Umgebung nicht mit \begin/\end weglassen um bisweilen unklare Fehlermeldungen zu vermeiden, und 2) im inneren der Umgebung nicht \newcommand verwenden. Es mag zwar nichts ausmachen, da die Definition lokal erfolgt, aber wenn Du die Liste z.B. verschachtelst, würdest Du hier eine Fehlermeldung erhalten.
\documentclass{scrreprt}

% dummy-Definition
\newcommand{\myeins}[1]{}

\newenvironment{myenv}[1]
  {%
    \renewcommand{\myeins}[1]{eins-env: #1 eins-myeins: ##1}%
    \itemize
  }
  {\enditemize}

\begin{document}

\begin{myenv}{myenv-Parameter}
  \item \myeins{myeins-Parameter}
  \begin{myenv}{myenv-Parameter-2}
    \item \myeins{myeins-Parameter-2}
  \end{myenv}
\end{myenv}

\end{document}
Grüße

von MoonKid » So 9. Feb 2014, 14:18

Thx!

von esdd » So 9. Feb 2014, 12:59

Für das "innere" Argument musst du ##1 nehmen:
\documentclass{scrreprt} 

\usepackage{xltxtra} 
\usepackage{polyglossia} 
\setdefaultlanguage[spelling=new]{german} 

\newenvironment{myenv}[1]{% 
     \newcommand{\myeins}[1]{eins-env: #1 eins-myeins: ##1} 
     \begin{itemize}}{% 
     \end{itemize}} 

\begin{document} 

     \begin{myenv}{myenv-Parameter} 
         \item \myeins{myeins-Parameter} 
     \end{myenv} 

\end{document}
Gruß
Elke

verschachtelte Parameter

von MoonKid » So 9. Feb 2014, 12:17

Schwierig zu erklären. ;)
\documentclass{scrreprt}

\usepackage{xltxtra}
\usepackage{polyglossia}
\setdefaultlanguage[spelling=new]{german}

\newenvironment{myenv}[1]{%
    \newcommand{\myeins}[1]{eins-env: #1 eins-myeins: #1}
    \begin{itemize}}{%
    \end{itemize}}

\begin{document}

    \begin{myenv}{myenv-Parameter}
        \item \myeins{myeins-Parameter}
    \end{myenv}

\end{document}
Ich möchte bestimmen ob mit #1 der Paraemter des environments oder der Paraemter des im environment definierten Makros ist.
Geht sowas?

Nach oben