TeXwelt wurde neu installiert. Es funktionieren noch nicht alle Features und auch an den deutschsprachigen Formulierungen wird verbessert. Danke für eure Geduld.

Ich möchte gerne mit dem aktuellen Jahr "rechnen", d.h. ich benötige eine Funktion mit einem Parameter, die mir das aktuelle Jahr um den Wert des Parameters verändert zurückliefert. Versuche mittels \newcommand und \def sind leider bisher fehlgeschlagen.

Die Funktion \JAHR{5} sollte im Jahr 2019 somit 2024 zurückliefern. Habe leider keine Idee, wie ich dies realisieren kann.

Minimalbeispiel:

\documentclass[12pt]{article}
\newcommand*{\JAHR}[1]
{ \number#1 + \number\year }

\begin{document}
In 5 Jahren ist das Jahr \JAHR{5} und vor 3 Jahren war das Jahr \JAHR{-3}
\end{document}

gefragt 26 Sep, 16:48

JHaarmann's gravatar image

JHaarmann
161
Akzeptiert-Rate: 0%


Um einfache Integeroperationen durchzuführen, solltest du \numexpr verwenden (Teil von e-TeX). Innerhalb von \numexpr brauchst du kein \number zu verwenden, allerdings solltest du, damit die Ausgabe funktioniert ein \the davor setzen, ungefähr so:

\newcommand*\JAHR[1] {% \the\numexpr\year+#1\relax }

Das \relax fungiert als Ende dessen, was von \numexpr gescant wird, und wird anschließend entfernt, sollte #1 ein vollständig legitimer Integerausdruck sein, sollte in #1 etwas enthalten sein, das nicht als Zahl aufgefasst werden kann, wird das Parsen an der Stelle gestoppt und \numexpr liefert das Ergebnis bis dahin zurück, der Rest bleibt (inklusive des \relax) im Input-Stream.

\numexpr unterstützt im Übrigen: Addition, Division, Multiplikation, Integerdivision und Klammern. Werden innerhalb von \numexpr Längenregister oder Skipregister verwendet, werden diese in sp konvertiert verwendet, \newlength\myskip\setlength\myskip{5sp}\dimexpr\myskip*(5-4)\relax liefert also das gleiche Ergebnis wie \dimexpr5*(5-4)\relax.

Permanenter link

beantwortet 26 Sep, 17:12

Skillmon's gravatar image

Skillmon
7714
Akzeptiert-Rate: 59%

bearbeitet 26 Sep, 17:25

Vielen Dank! Funktioniert wunderbar.

Leider habe ich bisher keine verständliches Buch gefunden, um mir selber diese Syntax beizubringen. Meine "Programmierungen" in TeX bzw LaTeX sind zumeist zusammengesucht und irgendwie angepasst. Dass normale "TeXen" beherrsche ich, nur bei solchen Anpassungen habe ich oftmals so meine Schwierigkeiten. Gibt es da eine schöne Quelle/Link/Tipp?

(26 Sep, 21:17) JHaarmann
2

@JHaarmann also nicht so richtig. Für allgemeines kann man das TeXbook lesen, allerdings ist das nicht immer allzu eingänglich, dennoch lernt man viel. Im TeX Book geht's allerdings nur um TeX, keine e-TeX-Erweiterungen und kein LaTeX enthalten. Wenn man allerdings die Grundlagen hat, ist e-TeX auch nur noch schnell mal nachschauen, was es so gibt. Und sonst: Einfach machen. Mal den Code von ein paar Packages anschauen. Falls du auch an LaTeX3 interessiert bist: texdoc interface3 liefert eine Übersicht über die Macros die in expl3 enthalten sind.

(27 Sep, 01:26) Skillmon
2

TeX by Topic ist oft einfacher zu verstehen als The TeXbook und in TeX Live sogar enthalten. Schon mit den beiden sollte klar werden, dass man nicht einfach nur + machen kann. Die TeX-Lösung ohne e-TeX wäre, mit einem temporären Zähler und \advance zu arbeiten. Die LaTeX-Lösung ohne l3kernel wäre mit einem eigenen Zähler und \setcounter, \addtocounter und \the*Zähler* zu arbeiten. Im Vergleich alles eher umständlich. Empfehlenswert wäre auch noch »The LaTeX Companion« bzw. »Der LaTeX Begleiter«.

(27 Sep, 08:31) Ijon Tichy
2

@JHaarmann Etwas verblüffen mag, dass das Rechnen mit Jahreszahlen unter Verwendung von \numexpr sogar in der KOMA-Script-Anleitung gezeigt wird, nämlich in der Erklärung zu \CenturyPart

(27 Sep, 08:33) Ijon Tichy
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×17
×6
×1

gestellte Frage: 26 Sep, 16:48

Frage wurde gesehen: 340 Mal

zuletzt geändert: 02 Okt, 18:52