.

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


ChristophW
Forum-Anfänger
Forum-Anfänger
Beiträge: 20
Registriert: Sa 24. Nov 2012, 22:14

.

Beitrag von ChristophW »

.
Zuletzt geändert von ChristophW am Di 4. Jun 2013, 16:56, insgesamt 1-mal geändert.

ChristophW
Forum-Anfänger
Forum-Anfänger
Beiträge: 20
Registriert: Sa 24. Nov 2012, 22:14

Beitrag von ChristophW »

.
Zuletzt geändert von ChristophW am Di 4. Jun 2013, 16:56, insgesamt 1-mal geändert.

Benutzeravatar
cgnieder
Forum-Meister
Forum-Meister
Beiträge: 730
Registriert: Fr 22. Okt 2010, 18:37
Wohnort: Herrenberg
Kontaktdaten:

Beitrag von cgnieder »

Das geht, allerdings nicht mit LaTeX-Hausmitteln, sondern man muss auf das TeX-Primitive \def zurückgreifen.

Syntax:
\def\macro#1{was cooles mit #1}
% Verwendung:
\macro{arg}

\def\macro#1#2{was colloes mit #1 und #2}
% Verwendung
\macro{arg1}{arg2}
Nun kann man aber auch die Argumente durch beliebige Zeichenketten trennen:
\def\macro ABC#1D#2EF#3{was cooles mit #1, #2 und #3}

% Verwendung:
\macro ABCarg1Darg2EF{arg3}
Hier mein konkreter Vorschlag:
\documentclass{article}
\usepackage[ngerman, num]{isodate}
\daymonthsepgerman{\thinspace}{}
\monthyearsepgerman{\thinspace}{}

\usepackage{etoolbox}
\makeatletter
\newcommand*\leadingzero[1]{\ifnum#1<10\relax0#1\else#1\fi} % führende Null
\def\date@format#1.#2.#3\q@stop{\leadingzero{#1}.\thinspace\leadingzero{#2}.\thinspace#3}
\renewcommand*\date[1]{%
  \ifblank{#1}
    {\date@format\the\day.\the\month.\the\year\q@stop}
    {\date@format#1\q@stop}}
\makeatother
\begin{document}

\date{}% heute

oder \date{1.3.1979}% irgendwann

\end{document}
Clemens
Paketauthor

ChristophW
Forum-Anfänger
Forum-Anfänger
Beiträge: 20
Registriert: Sa 24. Nov 2012, 22:14

Beitrag von ChristophW »

.
Zuletzt geändert von ChristophW am Di 4. Jun 2013, 16:56, insgesamt 1-mal geändert.

Benutzeravatar
Johannes_B
Moderator
Moderator
Beiträge: 5079
Registriert: Do 1. Nov 2012, 14:55
Kontaktdaten:

Beitrag von Johannes_B »

Jap,
\newcommand*\leadingzero[1]{\ifnum#1<10\relax0#1\else#1\fi}
schreibt dir eine null vor dein Argument, somit wird aus 05 -> 005

Wie man die Länge abfragt, kann ich dir grad nicht sagen, aber du könntest
auch abfragen, ob das Argument mit einer null anfängt?

Wenn du daran interessiert bist mehr zu erfahren, dann tipp doch in dein Terminal mal
texdoc programming
ein, das sollte dich zum Dokument Notes On Programming in TEX von Christian Feuersänger führen.
TeXwelt - Fragen und Antworten Schaut vorbei und stellt Fragen.
LaTeX-Vorlagen?

Der Weg zum Ziel: Ruhe bewahren und durchatmen, Beiträge und unterstützende Links aufmerksam lesen, Lösungsansätze verstehen und ggf. nachfragen.

ChristophW
Forum-Anfänger
Forum-Anfänger
Beiträge: 20
Registriert: Sa 24. Nov 2012, 22:14

Beitrag von ChristophW »

.
Zuletzt geändert von ChristophW am Di 4. Jun 2013, 16:56, insgesamt 1-mal geändert.

Benutzeravatar
Johannes_B
Moderator
Moderator
Beiträge: 5079
Registriert: Do 1. Nov 2012, 14:55
Kontaktdaten:

Beitrag von Johannes_B »

TeXwelt - Fragen und Antworten Schaut vorbei und stellt Fragen.
LaTeX-Vorlagen?

Der Weg zum Ziel: Ruhe bewahren und durchatmen, Beiträge und unterstützende Links aufmerksam lesen, Lösungsansätze verstehen und ggf. nachfragen.

Benutzeravatar
u_fischer
Forum-Meister
Forum-Meister
Beiträge: 4304
Registriert: Do 22. Nov 2012, 11:09
Kontaktdaten:

Beitrag von u_fischer »

Dies sollte man doch mit dem Kommando "date" realisieren können, oder?
\date dient dazu, das gewünschte Datum zu speichern, nicht um es zu drucken. Da du isodate benutzt, solltest du die Dokumentation lesen. Auf Seite 4 steht, wie man ein beliebiges Datum druckt.
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[ngerman, num]{isodate}
\begin{document}

\daymonthsepgerman{\thinspace}{}
\monthyearsepgerman{\thinspace}{}
\printdate{1.12.2012}
\end{document}

Benutzeravatar
cgnieder
Forum-Meister
Forum-Meister
Beiträge: 730
Registriert: Fr 22. Okt 2010, 18:37
Wohnort: Herrenberg
Kontaktdaten:

Beitrag von cgnieder »

ChristophW hat geschrieben:Ich hab jetzt aber eine andere Lösung gefunden:
\two@digits
Daran merkt man, dass es spät war gestern Abend: \two@digits hätte mir auch einfallen müssen...
Clemens
Paketauthor

rais
Forum-Guru
Forum-Guru
Beiträge: 413
Registriert: Di 21. Sep 2010, 00:37

nur der Vollständigkeit halber

Beitrag von rais »

ChristophW hat geschrieben: leadingzero prüft, ob 05 < 10 ist. Das stimmt ja auch. Aber hier wäre wohl eine Prüfung auf die Länge der Zeichenkette sinnvoller, oder? Wie macht man das?
das ginge mit \settowidth, etwa
\documentclass{article}
\newlength\lena
\newlength\lenb
\newcommand*\leadingzero[1]{%
  \settowidth\lena{#1}%
  \settowidth\lenb{12}%
  \ifdim \lena<\lenb 0\fi#1%
}% führende Null
\begin{document}
\leadingzero{5}, \leadingzero{05}
\end{document}
MfG
Rainer
One of the joys of travel is visiting new towns and meeting new people---G.Khan (Robert Asprin, Another Fine Myth)

Antworten