🌊

Typstで現時刻を取得する方法

2024/11/10に公開

結論から申し上げると、しばらくは公式な方法はないでしょう。ただし、公式からも逃げ道が容易されており、少々面倒くさいですが、それを使えば現時刻を取得することができます。

理由としては、関数の純粋性による最適化の考量や、プレビューしながらの現時刻を書く意味、現時刻を使う必要性のなさ及びランダムの値を生成するなど危険な悪用防止などが挙げられているようです。議論の経緯は、以下のIssueをご参照ください。

https://github.com/typst/typst/issues/1988

方法

まず以下のコードを書きます。

time.typ
#let get-now() = {
  let now-str = if "now" in sys.inputs {
    sys.inputs.now
  } else {
    datetime.today().display("[year] [month] [day]") + " 00 00 00"
  }
  let (year, month, day, hour, minute, second) = now-str.split(" ").map(int)
  datetime(year: year, month: month, day: day, hour: hour, minute: minute, second: second)
}

#get-now()

プレビュー時

以上のコードはプレビュー時にtoday()に00:00:00の時間が表示されます。

datetime(
    year: 2024,
    month: 11,
    day: 10,
    hour: 0,
    minute: 0,
    seconds: 0
)

コンパイル時

Unix系のshell、例えばbashやfish、zshなどでコンパイルする際に以下のようなコマンドを実行すると

typst compile time.typ --input "now=$(date '+%Y %m %d %H %M %S')"

以下のように現時刻が表示されます。

datetime(
    year: 2024,
    month: 11,
    day: 10,
    hour: 16,
    minute: 20,
    seconds: 20
)

コミュニティ

「くみはんクラブ」というコミュニティを2024年1月に創設し、そこでTypstを始めとする様々な組版の話について議論されています。何かTypstなどを使う上で質問や不明点があれば、ぜひいらしてください。また、そのメンバーが中心となって、Typst Japan Communityを結成し、公式の認可を得てドキュメントの非公式日本語翻訳プロジェクトも始動しました。

https://discord.gg/dHRaAsBeRY

https://x.com/mkpoli/status/1751193383085973670

https://x.com/mkpoli/status/1827242838880408036

https://x.com/mkpoli/status/1858311758517326002

Discussion