Zeichen nach dem Befehl berücksichtigen

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: Zeichen nach dem Befehl berücksichtigen

von dknof » So 20. Jan 2013, 15:27

Hallo bloodworks,

nun habe ich den folgenden Code:
\documentclass{scrartcl}

%\newcommand{\Ergebnis}[1]{\\\null\hfill\textbf{#1~EUR}\hfill}
%\newcommand{\Ergebnis}[1]{\\\null\hfill\textbf{#1~EUR}\hfill\\} % Underfull \hbox, wenn direkt anschließend der Absatz zuende ist
\makeatletter
\newcommand{\Ergebnis}[1]{%
\\\null\hfill\textbf{#1~EUR}%
\@ifnextchar{.}{.\hfill\null\@gobble}{%
\@ifnextchar{,}{,\hfill\null\@gobble}{%
\hfill\null}}}%
\makeatother 
\begin{document}
\section{Eingabe}
Das erste Ergebnis ist \Ergebnis{111},\\
das zweite Ergebnis ist \Ergebnis{222}.

Das dritte Ergebnis ist: \Ergebnis{333}

\section{Soll-Ausgabe}
Das erste Ergebnis ist \\
\null\hfill\textbf{111~EUR},\hfill\null\\
das zweite Ergebnis ist \\
\null\hfill\textbf{222~EUR}.\hfill\null

Das dritte Ergebnis ist:\\
\null\hfill\textbf{333~EUR}\hfill\null
\end{document}
Das \@gobble habe ich mir aus texdoc source2e geholt (Abschnitt 11.3). Übrigens wird bei dem Befehl \@ifstar ein dem Befehl folgender Stern ignoriert (Abschnitt 11.6):
\def\@ifstar#1{\@ifnextchar *{\@firstoftwo{#1}}}
Deine automatische Erkennung des folgenden Absatzes funktioniert nur bei einem manuellem Absatz, nicht bei einem folgenden \section oder \[ \]. Das reicht eigentlich aus, finde ich aber nicht so sauber. Außerdem habe ich nicht die Verbindung mit \@gobble hinbekommen, auch mit \@firstoftwo{\futurelet\mstore\mmake} kam ich an der Stelle nicht weiter (sollte das Komma ignorieren und den Absatz erkennen).

Danke für Deine Hilfe, mein Hauptproblem habe ich damit gelöst bekommen.

Diether

von bloodworks » Sa 19. Jan 2013, 22:52

Ok da wird das mit dem KOmma sichtbar denke ich. Habe also noch ne abfrage eingebaut ob der übernächste token n par ist....
\documentclass{article} 
\usepackage[latin1]{inputenc} 

\usepackage[T1]{fontenc} 
\usepackage[ngerman]{babel} 
\makeatletter 
\def\mstore{leer}
\def\mmake{
\ifx\mstore\par%
%
\else
\\
\fi
}
\newcommand{\Ergebnis}[1]{%
\@ifnextchar{.}{\hfill\textbf{#1~EUR}\hfill \futurelet\mstore\mmake%
}{%
\@ifnextchar{,}{\null\hfill\textbf{#1~EUR}\hfill \futurelet\mstore\mmake}{\\\null\hfill\textbf{#1~EUR}\hfill\futurelet\mstore\mmake}%
}%%
}
\makeatother
\begin{document} 
Das erste Ergebnis ist \Ergebnis{111}, 
 das zweite Ergebnis ist \Ergebnis{222}.
Das dritte Ergebnis ist: \Ergebnis{333}

b




\end{document}
Mit dem Kommaproblem muss ich mal nachdenken. Ich habe noch nie gesehen, dass TeX etwas vor dem Macro einsetzen kann...

von dknof » Sa 19. Jan 2013, 22:39

Hallo bloodworks,

den Befehl kannte ich bisher nicht, Danke für die schnelle Antwort. Leider wird der Punkt/das Komma aber immer noch nach dem Befehl mit ausgegeben, Ich habe \Ergebnis nun definiert mit
\makeatletter
\newcommand{\Ergebnis}[1]{%
\@ifnextchar{.}{\hfill\textbf{#1~EUR}.\hfill}{%
\@ifnextchar{,}{\null\hfill\textbf{#1~EUR},\hfill}{\\\null\hfill\textbf{#1~EUR}\hfill}}
}
\makeatother 
In der Ausgabe folgen nach 111 EUR aber zwei Kommas, eines aus der Definition und dann das aus dem Text. Gibt es so etwas wie \@skipnextchar?

Gruß
Diether

von bloodworks » Sa 19. Jan 2013, 22:17

Zu 1: recht einfach (ich denke du kannst dir ausmalen was ifnextchar macht)
\documentclass{article} 
\usepackage[latin1]{inputenc} 

\usepackage[T1]{fontenc} 
\usepackage[ngerman]{babel} 
\makeatletter 
\newcommand{\Ergebnis}[1]{%
\@ifnextchar{.}{\hfill\textbf{#1~EUR}\hfill}{%
\@ifnextchar{,}{\null\hfill\textbf{#1~EUR}\hfill}{\\\null\hfill\textbf{#1~EUR}\hfill}}
}
\makeatother
\begin{document} 
Das erste Ergebnis ist \Ergebnis{111}, 
 das zweite Ergebnis ist \Ergebnis{222}.
Das dritte Ergebnis ist: \Ergebnis{333}


\end{document}
Zu 2: da fällt mir momentan nichts so einfaches ein, was nicht latex3 benötigen würde. Das würde ich dann aber noch nachlieferen, wenn mir noch was einfällt.

Zeichen nach dem Befehl berücksichtigen

von dknof » Sa 19. Jan 2013, 21:08

Hallo,

ich möchte per Makro ein Ergebnis abgesetzt in einer eigenen Zeile darstellen. Dabei habe ich die folgenden beiden Probleme:
1) Wenn hinter dem Argument ein Punkt oder ein Komma ist, soll es noch mit in derselben Zeile wie das Ergebnis ausgegeben werden. Da das Ergebnis fett dargestellt werden soll, das Satzzeichen aber nicht, kann ich es nicht in das Argument schreiben. Ich brauche also eine Möglichkeit, abhängig vom nächsten Zeichen dieses im Befehl zu berücksichtigen oder stehen zu lassen.
2) Nach dem Ergebnis soll ein Zeilenumbuch folgen, wenn der Absatz noch weitergeht. Dieses Problem kann ich zur Not manuell durch \\ an den entsprechenden Stellen umgehen.

In meinem Beispiel ist zu sehen, wie die Eingabe erfolgen soll und wie ich mir die Ausgabe vorstelle:
\documentclass{scrartcl}

\newcommand{\Ergebnis}[1]{\\\null\hfill\textbf{#1~EUR}\hfill}
%\newcommand{\Ergebnis}[1]{\\\null\hfill\textbf{#1~EUR}\hfill\\} % Underfull \hbox, wenn direkt anschließend der Absatz zuende ist

\begin{document}
\section{Eingabe}
Das erste Ergebnis ist \Ergebnis{111},
das zweite Ergebnis ist \Ergebnis{222}.

Das dritte Ergebnis ist: \Ergebnis{333}

\section{Soll-Ausgabe}
Das erste Ergebnis ist \\
\null\hfill\textbf{111~EUR},\hfill\null\\
das zweite Ergebnis ist \\
\null\hfill\textbf{222~EUR}.\hfill\null

Das dritte Ergebnis ist:\\
\null\hfill\textbf{333~EUR}\hfill\null

\end{document}
Danke schon einmal für die Ideen
Diether

Nach oben