次: , 前: Fancy Diary Display, 上: Calendar


39.9 S式項目と装飾日誌表示

S式を使った日誌記録は、 複雑な条件で適用される日誌記録を作る以上のことができます。 装飾日誌表示を使っている場合には、S式日誌項目は、 日付に依存した記録テキストを生成できます。 たとえば、記念日の記録では、テキストに何回目の記念日であるかを入れられます。 したがって、つぎの日誌記録の`%d'は年齢で置き換えられます。

     %%(diary-anniversary 10 31 1948) Arthur's birthday (%d years old)

つまり、装飾日誌用バッファでは、1990年10月31日の項目はつぎのようになります。

     Arthur's birthday (42 years old)

日誌ファイルにつぎの項目が入っていると、

     %%(diary-anniversary 10 31 1948) Arthur's %d%s birthday

装飾日誌用バッファでは、1990年10月31日の項目はつぎのようになります。

     Arthur's 42nd birthday

同様に、周期的な日誌項目では繰り返し回数を計算できます。

     %%(diary-cyclic 50 1 1 1990) Renew medication (%d%s time)

は、1990年9月8日の装飾日誌表示ではつぎのようになります。

     Renew medication (5th time)

当日の日誌項目としてだけでなく、 それよりまえの日の日誌項目にも含めるためのS式日誌項目があります。 たとえば、記念日の1週間前に督促がほしいときには、 つぎのようにします。

     %%(diary-remind '(diary-anniversary 12 22 1968) 7) Ed's anniversary

すると、装飾日誌には、12月15日と12月22日に

     Ruth & Ed's anniversary

と表示されます。

関数diary-dateは、整数や整数のリストやtで指定した 月、日、年の組み合わせで表される日付に適用されます。 たとえば、

     %%(diary-date '(10 11 12) 22 t) Rake leaves

により、装飾日誌には、各年の10月22日、11月22日、12月22日には

     Rake leaves

と表示されます。

関数diary-floatにより、 11月の第3金曜日とか4月の最後の火曜日といった 日付に適用する日誌記録を記述できます。 パラメータは、月month、曜日dayname、添字nです。 日曜日をdayname=0、月曜日をdayname=1、…として、 month月のn番目の曜日daynameに項目が現れます。 nが負であると、month月の月末から数えます。 monthは、月のリストでも、1つの月でも、全部の月を指定するtでも かまいません。 省略可能なパラメータdayを指定して、 month月のn番目の曜日daynameの 前後のday日を指定できます。 nが正だとdayのデフォルトは1であり、 nが負だとdayのデフォルトはmonth月の月末です。 たとえば、

     %%(diary-float t 1 -1) Pay rent

は、装飾日誌に各月の最後の月曜日に

     Pay rent

を表示します。

S式日誌項目の一般性により、アルゴリズムで日誌項目を指定できます。 S式日誌項目には、項目を当該日に適用するどうかを計算する式を含められます。 その値がnil以外であると、その項目を当該日に適用します。 その式では、対象とする日付を知るために変数dateを使えます。 この変数の値は、グレゴリオ暦で表した リスト(month day year)です。

毎月のウィークデイである21日か、 21日が週末の場合にはそのまえの金曜日に給料を支払われるとしましょう。 そのような日付に一致するS式日誌項目はつぎのように書けます。

     &%%(let ((dayname (calendar-day-of-week date))
              (day (car (cdr date))))
           (or (and (= day 21) (memq dayname '(1 2 3 4 5)))
               (and (memq day '(19 20)) (= dayname 5)))
              ) Pay check deposited

以下のS式日誌項目は、日付に依存して変わるテキストを 日誌項目に入れる機能を(装飾日誌表示で)利用できます。

%%(diary-sunrise-sunset)
今日の地方時での日出入時刻に対する日誌項目を作る。
%%(diary-phases-of-moon)
月に朔弦望に対する日誌項目を作る。
%%(diary-day-of-year)
年内の通算日数と残り日数で今日の日誌項目を作る。
%%(diary-iso-date)
今日に対応するISO商用暦の日誌項目を作る。
%%(diary-julian-date)
今日に対応するユリウス暦の日誌項目を作る。
%%(diary-astro-day-number)
今日に対応する天文通算日(ユリウス日)の日誌項目を作る。
%%(diary-hebrew-date)
今日に対応するヘブライ暦の日誌項目を作る。
%%(diary-islamic-date)
今日に対応するイスラム暦の日誌項目を作る。
%%(diary-french-date)
今日に対応するフランス革命暦の日誌項目を作る。
%%(diary-mayan-date)
今日に対応するマヤ暦の日誌項目を作る。

したがって、

     &%%(diary-hebrew-date)

を含んだ日誌項目は、装飾日誌表示を使っていると、 毎日の日誌表示に対応するヘブライ暦の日付を含めることになります。 (単純な日誌表示では、行`&%%(diary-hebrew-date)'は すべての日付の日誌に現れるが、特別なことはなにもしない。)

つぎの関数は、ある標準的な方法でヘブライ暦に基づく S式日誌項目を構成するために使えます。

%%(diary-rosh-hodesh)
各ヘブライ月の礼拝の始まりと終りを教える日誌項目を作る。
%%(diary-parasha)
毎週のシナゴーグ朗読会を教える土曜日の日誌項目を作る。
%%(diary-sabbath-candles)
安息日のたそがれの地方時を教える金曜日の日誌項目を作る。
%%(diary-omer)
適切ならばオーメル1 の回数を与える日誌項目を作る。
%%(diary-yahrzeit month day year) name
命日に対応した日誌項目を作る。 命日の日付はグレゴリオ暦で指定する。 正しいヘブライ暦の追悼日とその前日に日誌項目が現れる。 (ヨーロッパスタイルでは、パラメータの順序を daymonthyearと変える。)

脚注

[1] omer: 過ぎ越しの祝い(Passover)の二日目から七週の祭(Shabuoth)の前日 までの49日間