Übergabe mehrer Argumente in einer Klammer

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: Übergabe mehrer Argumente in einer Klammer

von cgnieder » Mo 9. Apr 2012, 11:01

Hier wäre eine Lösung mit xparse:
\documentclass{article}
\usepackage{xparse}

\makeatletter
\NewDocumentCommand\test{>{\SplitArgument{2}{.}}m}{\test@i #1}
\def\test@i#1#2#3{eins: #1, zwei: \IfNoValueF{#2}{#2}, drei: \IfNoValueF{#3}{#3}\par}
\makeatother

\begin{document}
\test{abc}
\test{a.bc}
\test{a.b.c}
\test{a.{b.c}.d}
% \test{a.b.c.d} % verursacht Fehler!
\end{document}
Grüße

Re: Zurück zum eigentlichen Problem

von rais » So 8. Apr 2012, 16:52

Boiza hat geschrieben:wenn ich da einhacken darf: mich würde die Antwort auf die grundlegende Frage interessieren. So ein übergebener Parameter in der Klammer an z.B. dem Punkt in 3 Teile zu trennen. Kriegt man das in der Schnelle hin?
meinst Du sowas?
\documentclass{article}
\makeatletter
  \newcommand*\foo[1]{\foo@i#1...\@nil}
  \def\foo@i#1.#2.#3.#4\@nil{%
    1: `#1', 2: `#2', 3: `#3'\par
  }
\makeatother
\begin{document}
\foo{abc}
\foo{a.bc}
\foo{a.b.c}
\foo{a.{b.c}.d}
\foo{a.b.c.d}
\end{document}
beachte bei diesem Ansatz, einen Parameter `zu viel' zu verwenden (da drin landen dann die überflüssigen Punkte, die ich hier nur vorgebe, um Fehler zu vermeiden, so man nicht genügend Punkte übergibt).

Frohe Ostern
Rainer

Zurück zum eigentlichen Problem

von Boiza » So 8. Apr 2012, 13:45

wenn ich da einhacken darf: mich würde die Antwort auf die grundlegende Frage interessieren. So ein übergebener Parameter in der Klammer an z.B. dem Punkt in 3 Teile zu trennen. Kriegt man das in der Schnelle hin?

von leonidas » So 23. Okt 2011, 10:12

Hallo!

ja, stimmt so funzts!
Danke, hab wieder einiges dazu gelernt!

mfg
leo

von rais » So 23. Okt 2011, 09:53

Hallo nochmal,
leonidas hat geschrieben: das heißt also, wenn isodate als Argument eine andere Sprache als die im Dokument mittels babel eingestellte Sprache vorfindet, wird gewarnt?
Anders herum wird ein Schuh draus: Wenn im Text eine andere Sprache gewählt wird, als Du isodate bekannt gegeben hast, wird gewarnt.
leonidas hat geschrieben: Außer man stellt die Sprache mittels selectlanguage oder mittels des von Dir verwendeten def-Befehls kurzfristig um...

Finde das etwas unpraktisch, daß man das Datumsformat durch die Sprache also wieder manuell umstellen muß, obwohl man die gewünschte Sprachoption bei isodate übergibt.

Übrigens, wenn ich Dein letztes Beispiel ausführe, wird wieder die american-Version ohne Punkt produziert (October 21, 2011), obwohl Du ja isodate die Option british übergeben hast.
Ups, war wohl doch zu früh :o
leonidas hat geschrieben: Die ganzen isodate-Befehle werden dann ja scheinbar durch die babel-Einstellung wieder überdeckt... Mit den def-Befehlen kenne ich mich leider noch nicht so aus, ob das daran liegen kann. Verwende ich nun bei babel die Option british, dann gibt es wieder das gewünschte Format...
Mach es anders herum: gib isodate auch american mit:
\documentclass[12pt]{scrreprt}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage[american]{babel}
\usepackage[american,british,cleanlook]{isodate}

\isospacebeforemonth{.~}
\makeatletter
  \def\iso@printdate@american{\iso@printdate@english}
\makeatother

\begin{document}
\printdate{21.10.2011}
\end{document}
oder übergib `american' halt der Klasse.

BTW: Die Zeile mit dem \def soll hier die isodate-Definition der amerikanischen Datumsausgabe mit der der Britischen überschreiben, gerade damit Du Dir diese manuelle Umstellerei sparen kannst.

MfG
Rainer

von leonidas » So 23. Okt 2011, 09:09

Danke Rainer!

das heißt also, wenn isodate als Argument eine andere Sprache als die im Dokument mittels babel eingestellte Sprache vorfindet, wird gewarnt?

Außer man stellt die Sprache mittels selectlanguage oder mittels des von Dir verwendeten def-Befehls kurzfristig um...

Finde das etwas unpraktisch, daß man das Datumsformat durch die Sprache also wieder manuell umstellen muß, obwohl man die gewünschte Sprachoption bei isodate übergibt.

Übrigens, wenn ich Dein letztes Beispiel ausführe, wird wieder die american-Version ohne Punkt produziert (October 21, 2011), obwohl Du ja isodate die Option british übergeben hast. Die ganzen isodate-Befehle werden dann ja scheinbar durch die babel-Einstellung wieder überdeckt... Mit den def-Befehlen kenne ich mich leider noch nicht so aus, ob das daran liegen kann. Verwende ich nun bei babel die Option british, dann gibt es wieder das gewünschte Format...
Würds gern verstehen... :-D

mfg
leo

Re: punkt

von rais » So 23. Okt 2011, 06:49

Hallo,
leonidas hat geschrieben: Meine Probleme zum Anpassen der Sprachoptionen werfen noch eine Frage auf: Braucht denn das Packet "isodate" eine global vorgegebene Sprache?
Nein.
leonidas hat geschrieben: Aus der Dokumentation entnehme ich, daß es ja eine eigene Option für die Sprache bei der Aufrufe des Packetes gibt. Wende ich nun dieses aber folgendermaßen an, bekomme ich eine Warnung und außerdem nicht das britische Datumsformat:
Für jede Sprache musst Du isodate das auch mitteilen, deshalb gibt es hier die Warnung bezüglich `american'. Da Du aber eigentlich gar nicht die Ausgabe beim \printdate auf amerikanische Art haben willst, tut es evtl auch
\documentclass[12pt]{scrreprt}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage[american]{babel}
\usepackage[british,cleanlook]{isodate}

\isospacebeforemonth{.~}
\makeatletter
  \def\iso@printdate@american{\iso@printdate@english}
\makeatother

\begin{document}
\printdate{21.10.2011}
\end{document}
MfG
Rainer

punkt

von leonidas » Di 18. Okt 2011, 10:16

Danke an Rainer! der Punkt ist auf alle Fälle da (bei globaler Option british).

Meine Probleme zum Anpassen der Sprachoptionen werfen noch eine Frage auf: Braucht denn das Packet "isodate" eine global vorgegebene Sprache? Aus der Dokumentation entnehme ich, daß es ja eine eigene Option für die Sprache bei der Aufrufe des Packetes gibt. Wende ich nun dieses aber folgendermaßen an, bekomme ich eine Warnung und außerdem nicht das britische Datumsformat:
\documentclass[a4paper,12pt,bibliography=totoc]{scrreprt}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}		
\usepackage[american]{babel}			
\usepackage[british]{isodate}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{document}

\cleanlookdateon
\isospacebeforemonth{.~}
\printdate{21.10.2011}

\end{document}
Nach ein wenig probieren erwies sich folgende Lösung als brauchbar (Sprachoptionen bei babel geändert und Verwendung von \selectlanguage):
\documentclass[a4paper,12pt,bibliography=totoc]{scrreprt}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}		
\usepackage[UKenglish,american]{babel}			
\usepackage[british]{isodate}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{document}

\cleanlookdateon
\selectlanguage{UKenglish}
\isospacebeforemonth{.~}
\printdate{21.10.2011}
\selectlanguage{american}

\end{document}
Hoffe das funzt auch im Ganzen am Ende. Die Fragen oben würden mich aber trotzdem noch interessieren....


Vielen Dank an alle, mfg
leo

Re: versteh das packet isodate nicht ganz

von rais » Mo 17. Okt 2011, 20:41

Hallo,
leonidas hat geschrieben: Hätte gerne in Englischer Sprache das Format: 21. October 2011
ich krieg aber bisher nur October 21, 2011 hin...
versuch es zusätzlich mit
\isospacebeforemonth{.~}
MfG
Rainer

versteh das packet isodate nicht ganz

von leonidas » Mo 17. Okt 2011, 15:02

Hallo Dominik, danke für die schnelle Antwort!

Hab mich heute einige Zeit mit dem Packet isodate beschäftigt, aber irgendwie macht das bei mir nicht das, was ich aus dessen Dokumentation herauslese und schon gar nicht das was ich will - bis jetzt :-D

Vllt kennt sich jemand aus mit diesem Packet?!
Hätte gerne in Englischer Sprache das Format: 21. October 2011
ich krieg aber bisher nur October 21, 2011 hin...

Folgendes macht schon fast, was ich will:
\documentclass[british,a4paper,12pt,bibliography=totoc]{scrreprt}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}		
\usepackage{babel}			
\usepackage[british]{isodate}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\cleanlookdateon
\printdate{21.10.2011}

\end{document}
Wenn ich da noch einen Punkt hinter "21" hinkriege wärs perfekt. Allerdings sind meine globalen Sprachoptionen eigentlich american, nur dann drehts monat und tag wieder um und es gibt ein Komma.
wie kann ich american und british kombinieren ohne Fehler und Warnungen?

mfg
leo

Nach oben