Moin aus Hamburg,

ich habe mal eine Frage, wie kann ich in KOMA-Script der ersten Montag im Jahr ermitteln? Mein Ziel ist es, ich will mir alle Montage im Jahr ausgeben lassen. Wenn ich den ersten Montag habe kann ich einfach in einer Schleife immer +7 rechnen und erhalten die weiteren Montage. Bisher bin ich so vorgegangen das ich ermittle welcher der 01.01.2015 war (Tag-Nummer) und da müsste ich doch jetzt einfach die Tag-Nummer hochzählen. Oder habe ich einen falschen Ansatz?

Hier mein Code:

Open in Online-Editor
\documentclass[10pt,BCOR=12mm,DIV=calc] {scrreprt}
\usepackage{scrdate}
\usepackage[onehalfspacing]{setspace} 
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\AfterTOCHead{\singlespacing} 
\KOMAoptions{DIV=last}

\newcommand{\NEUJAHR}{2015-1-1}
\begin{document}
{\huge Neujahr war an einem \ISODayName{\NEUJAHR} (\the\ISODayNumber{\NEUJAHR}) }\\
der erste Montag im Jahr \the\year ~war der \\
\end{document}

gefragt 09 Jan '15, 12:10

micneu's gravatar image

micneu
2524
Akzeptiert-Rate: 0%

bearbeitet 07 Feb '16, 11:34

saputello's gravatar image

saputello
11.1k154365

Willkommen auf TeXwelt. Bitte beachte, dass wir hier mit Markdown-Syntax arbeiten. Eine englische Übersicht über die Syntax findest Du auch, wenn Du beim Eingabefeld oben rechts auf das Fragezeichen klickst. Ich habe u. a. das bei Deinem Beitrag mal korrigiert. Außerdem sollte man vorgeschlagene Tags verwenden, wenn diese passen. Das erleichtert die Suche.

(09 Jan '15, 12:57) saputello

Den ersten Montag in einem beliebigen Jahr kannst Du auch mit einer \foreach Schleife über die ersten sieben Tage des entsprechenden Jahres ermittlen. Im folgenden Beispiel habe ich absichtlich nicht das aktuelle Jahr 2015 gewählt.

\documentclass{scrreprt}
%\providecommand*\Ifstr{\ifstr}% nötig bis einschließlich KOMA-Script version 3.27, see https://komascript.de/faq_deprecatedif
\usepackage[ngerman]{babel}
%\usepackage[utf8]{inputenc}% nur bei veralteten TeX-Distributionen nötig
\usepackage[T1]{fontenc}

\usepackage{scrdate}
\usepackage{pgffor}

\newcommand\jahr{2016}
\begin{document}
Jahr: \jahr, Neujahr: \DayName{\jahr}{1}{1}, erster Montag:
\foreach \tag in {1,...,7}{%
  \Ifstr{\DayName{\jahr}{1}{\tag}}{\DayNameByNumber{1}}{\tag.\,Januar~\jahr\breakforeach}{}%
}
\end{document}

alt text

Alternativ zu scrdate kann man dann aber auch pgfcalendar verwenden. Damit der Monatsname etc. in Deutsch ausgegeben wird, müssen babel und translator mit der Option ngerman geladen werden.

\documentclass[ngerman,parskip]{scrreprt}
\usepackage{babel}
%\usepackage[utf8]{inputenc}% nur bei veralteten TeX-Distributionen nötig
\usepackage[T1]{fontenc}

\usepackage{pgffor}
\usepackage{translator}
\usepackage{pgfcalendar}

\begin{document}
\foreach \jahr in {2014,2015}{%
  Der erste Montag im Jahr~\jahr{} war der 
    \foreach\tag in {1,...,7}{%
      \pgfcalendarifdate{\jahr-1-\tag}{Monday}{\tag.\,\pgfcalendarmonthname{1}\breakforeach}{}%
    }.%
  \par%
}
\end{document}

alt text

Damit kann man sich dann auch einfach alle Montage eines Jahres ausgeben lassen:

\documentclass[ngerman,parskip]{scrreprt}
\usepackage{babel}
%\usepackage[utf8]{inputenc}% nur bei veralteten TeX-Distributionen nötig
\usepackage[T1]{fontenc}

\usepackage{pgffor}
\usepackage{translator}
\usepackage{pgfcalendar}

\newcommand\jahr{2015}

\begin{document}
\minisec{Montage im Jahr \jahr}
\foreach \monat in {1,...,12}{%
  \foreach\tag in {1,...,31}{%
  \pgfcalendarifdate{\jahr-\monat-\tag}{Monday}{\tag.\,\pgfcalendarmonthname{\monat} \quad}{}%
  \pgfcalendarifdate{\jahr-\monat-\tag}{end of month}{\breakforeach}{}%
  }%
\par}
\end{document}

alt text

Permanenter link

beantwortet 09 Jan '15, 13:08

esdd's gravatar image

esdd
17.7k254256
Akzeptiert-Rate: 62%

bearbeitet 16 Jan '20, 14:14

Es ist einfacher, wenn du von Silvester aus rechnest, dann musst du keine Modulorechnung machen:

Open in writeLaTeX
\documentclass[10pt,BCOR=12mm,DIV=calc] {scrreprt}
\usepackage{scrdate}
\usepackage[onehalfspacing]{setspace}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\newcommand{\NEUJAHR}{2015-1-1}
\begin{document}
{\huge Neujahr war an einem \ISODayName{\NEUJAHR} (\the\ISODayNumber{\NEUJAHR}) \par}

der erste Montag im Jahr \the\year ~war der 
\the\year-1-\the\numexpr8-\the\ISODayNumber{\the\numexpr\year-1\relax-12-31}\relax
\end{document}
Permanenter link

beantwortet 09 Jan '15, 12:51

Ulrike%20Fischer's gravatar image

Ulrike Fischer
3.6k23
Akzeptiert-Rate: 52%

bearbeitet 09 Jan '15, 13:11

Wenn Silvester auf einen Sonntag fällt, klappt das nicht, da der Sonntag die Nummer 0 hat.

(09 Jan '15, 16:39) esdd
1

Die notwendige Modulo-Operation gibt es übrigens in scrbase, das sowohl von scrreprt als auch scrdate ohnehin geladen wird. Die korrekte Berechnung ist dann: \the\numexpr \XmodY{8-\DayNumber{\year}{1}{1}}{7}+1\relax oder \the\numexpr \XmodY{8-\ISODayNumber{\the\year-1-1}}{7}+1\relax.

(09 Jan '15, 18:01) saputello
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:

×130
×19
×6

gestellte Frage: 09 Jan '15, 12:10

Frage wurde gesehen: 9,685 Mal

zuletzt geändert: 07 Feb '16, 11:34