upLaTeX: 本日の曜日を日本語で自動的に出力する

やりたいこと

  • YYYY/MM/DD(曜日)が欲しい
    • YYYYは西暦の年
    • MMは西暦の月
    • DDは西暦の日
    • 曜日は日本語版の西暦の曜日(Day Of Week,略してDOW)つまり月火水木金土日
  • BXwarekiは曜日に対応していないらしい
  • jsarticleでとりあえず確認済

実装

プリアンブルにこれを入れる

\usepackage{datetime2}
\usepackage{datetime2-calc}
\makeatletter
\newcommand{\DOWjpn}{%
    \DTMcomputedayofweekindex{\@dtm@currentyear-\@dtm@currentmonth-\@dtm@currentday}{\DOWindex}%
    \ifcase\DOWindex 月\or 火\or 水\or 木\or 金\or 土\or 日\fi%
}
\newcommand{\DTMjpn}{%
    \@dtm@currentyear/\@dtm@currentmonth/\@dtm@currentday(\DOWjpn)%
}
\makeatother

例えばタイトルに入れる場合は

\date{\DTMjpn}

コツ

  • datetime2datetime2-calcを流用する
  • 内部変数の\@dtm@current系から年月日を取得できる,しかし肝心の@dtm@currentdowはなにもしないままだと-1のままらしい**
    • Current day of week defaults to -1 (that is, ignore it). from p.121
  • 上記を\DTMcomputedayofweekindexに入れて曜日の値を取得して(1~7につき月~日)\DOWindexに保存する
  • これを実行するとなぜか@dtm@currentdowが曜日の値を取得する(0~6につき月~日)
    • p.170 あたりに\dtmMondayIndexから\dtmSundayIndexが定義されており,こっちも0~6につき月~日となっている…しかしLaTeX\ifcase1スタートの方が好都合であり,\DTMcomputedayofweekindexはこの使用方法を想定していたのかも?
    • \pgfcalendardatetojulian\pgfcalendarjuliantoweekdayが裏で動いた結果…ユリウス暦だと思うけど,ドキュメントには実装が未記載だった
  • それを\ifcaseで分岐させて対応する曜日を表示させたい形式で代入する
    • \makeatletter\makeatother間でなので,改行手前に%を入れないと改行記号が空白扱いされてレイアウトが崩れる
    • 英語3文字版とかにも応用できそう