普通にやればオッケー。
% upLaTeX文書; UTF-8 \documentclass[uplatex,a4paper]{jsarticle} \和暦 \title{{\TeX}言語、ダメゼッタイ!} \author{某ZR} \begin{document} \maketitle % ダメゼッタイ \end{document}
平成!
……なのであるが、日本語LaTeXの「和暦の日付」に関する機能について、もう少しキチンとまとめておく。
\today を和暦にする話
以下に挙げる和文文書クラスでは、当日日付(\today
)を和暦で出力することができる。
- pLaTeXの標準和文クラス: jarticle、jreport、jbook、tarticle、treport、tbook
- upLaTeXの標準和文クラス: ujarticle、ujreport、ujbook、utarticle、utreport、utbook
- jsclassesバンドルのクラス: jsarticle、jsreport、jsbook
- LuaTeX-jaの和文クラス: ltjarticle、ltjreport、ltjbook、ltjtarticle、ltjtreport、ltjtbook、ltjsarticle、ltjsreport、ltjsbook
- BXjsclsバンドルのクラス: bxjsarticle、bxjsreport、bxjsbook、bxjsslide
- jlreqクラス
(恐らく、TeX Live収録の日本語用文書クラスはこれが全てである。)
これらのクラスでは、以下の命令を用いて\today
の和暦・西暦表示を切り替える。
\和暦
:\today
の年表示を和暦(元号)にする。\西暦
:\today
の年表示を西暦にする。
既定値については注意が必要である。
- 「pLaTeX/upLaTeXの標準和文クラス」および「LuaTeX-jaの“pLaTeX標準の互換クラス”1」については旧来は和暦が既定であったが、改元後に不適切な表示が出るのを防ぐため、2018年7月頃のリリースで既定が西暦に変更された。従って、これらのクラスにおいて
\today
命令を利用している(\date
を省略する場合も含む)場合は\和暦
か\西暦
を明示的に宣言してほうがよいであろう。 - それ以外のクラスについては、西暦表示が既定である。
それで結局令和できるのか
以前の記事の時点では一部のクラスは「令和」に未対応であった。しかし現在においては、和暦対応のクラスの全てが対応を済ませている。従って、最新のW32TeXでは明日の改元後に「令和」が出力される。
TeX Liveについては……、そう、ちょうど今朝(日本時間の午前7時頃)にTeX Live 2019がリリースされた。従って、新しいTeX Live 2019をインストールすれば、和暦対応のクラスの全てで「令和」が出力される。ただし、国内のミラーへの反映に時間がかかるため、TeX Live 2019が一般に入手できるのは明日になるだろう。「令和」の時代の初日から「令和」が使えるようになる見込みである。
和暦なのか西暦なのか
実用上の必要はないだろうが、実は「現在\和暦
と\西暦
のどちらが有効であるか」を判定することができる。
ifthenパッケージを読みこむ。和暦対応のクラスにおいては
西暦
という名の真偽値変数が定義された状態になるので、これを用いて判定ができる。\ifthenelse{\boolean{西暦}}{% % \西暦 が有効 }{% % \和暦 が有効 }
ただし、BXjsclsのクラスと欧文(pdf)LaTeXの組み合わせの場合は例外で、この場合は
西暦
の代わりにjsSeireki
という真偽値変数を用いる。(和文の変数名が使えないため。)
例えば次のようにできる。
% upLaTeX文書; UTF-8 \documentclass[uplatex,a4paper]{jsarticle} \usepackage{ifthen} \和暦 \title{新しいテフライブがリリースされた件} \author{非ZR} \begin{document} \maketitle \begin{abstract} {\TeX}~Live \ifthenelse{\boolean{西暦}}{2019}{平成31}% ええっ における変更点(特にアレ性)について解説する。 \end{abstract} \end{document}
Babelする場合は
Babelパッケージを利用する場合、\today
の表記はBabelの言語定義の内容に従うことになる。現在の版のBabelの日本語(japanese)用の定義では、和文クラスと同様に、\和暦
と\西暦
命令がサポートされていて\today
の表記の切替ができる。
% upLaTeX文書; UTF-8 \documentclass[uplatex,a4paper]{jsarticle} \usepackage[T2A,T1]{fontenc} \usepackage{paratype}% PTフォント使用 \usepackage[prefercjkvar]{pxcjkcat} % なぜか唐突にロシア語 \usepackage[main=japanese,russian]{babel} \newcommand{\Ru}[1]{% \begin{otherlanguage}{russian}#1\end{otherlanguage}} \和暦 \title{{\TeX}言語、ダメゼッタイ!\\ \Ru{Никогда не делай {\TeX} язык!}} \author{\Ru{не-ZR}} \date{\today\quad(\Ru{\today})} \begin{document} \maketitle % Ничего \end{document}
BXwarekiパッケージ
Beamerなどのスライド用の文書クラスでは、和文も欧文も共通のものが使われるのが一般的である。そういうクラスでは当然、\today
命令は和暦表示どころが日本語での表示にも対応していない。
% upLaTeX文書; UTF-8 \documentclass[dvipdfmx,14pt]{beamer} \usepackage{pxjahyper}% いつもの設定 \renewcommand{\kanjifamilydefault}{\gtdefault} \usetheme{EastLansing} \title{{\TeX}言語、ダメゼッタイ!} \author{某ZR} \date{\today} \begin{document} \begin{frame} \titlepage \end{frame} \end{document}
日付が英語表記の「April 30, 2019」になっている。
このような文書クラスで\today
を和暦で表示したい場合は、bxwarekiパッケージを使うのが手っ取り早い2。bxwarekiは次の命令を提供する。
\warekitoday
: 今日の和暦の日付を算用数字(平成31年4月30日)で出力する。\warekikanjitoday
: 今日の和暦の日付を漢数字(平成三一年四月三〇日)で出力する。\warekijkanjitoday
: 今日の和暦の日付を漢数字(平成三十一年四月三十日)で出力する。
% upLaTeX文書; UTF-8 \documentclass[dvipdfmx,14pt]{beamer} \usepackage{pxjahyper} \renewcommand{\kanjifamilydefault}{\gtdefault} \usepackage{bxwareki}% 和暦したい \usetheme{EastLansing} \title{{\TeX}言語、ダメゼッタイ!} \author{某ZR} \date{\warekitoday}% 和暦日付を明示指定する \begin{document} \begin{frame} \titlepage \end{frame} \end{document}
さらに、\warekicustomdate
という命令を使うと、日付3を様々な形式で出力することができる。だから実は「西暦の日本語の日付」を出力したい場合にも使える4。
% upLaTeX文書; UTF-8 \documentclass[dvipdfmx,14pt]{beamer} \usepackage{pxjahyper} \renewcommand{\kanjifamilydefault}{\gtdefault} \usepackage{bxwareki} \usetheme{EastLansing} \title{{\TeX}言語、ダメゼッタイ!} \author{某ZR} \date{\warekicustomdate{}}% 和暦じゃない \begin{document} \begin{frame} \titlepage \end{frame} \end{document}
まとめ
というわけで、和暦したい人も、西暦したい人も、困った場合はbxwarekiパッケージを使おう!
-
すなわち以下のクラス:ltjarticle、ltjreport、ltjbook、ltjtarticle、ltjtreport、ltjtbook↩
-
先述の通り、Babelを読み込んでメイン言語にjapaneseを指定すると
\和暦
が使えるので、こちらを利用する方法もあり、また(Babelの目的が多言語対応なので)その方がある意味で正攻法なのであるが、Babelは副作用も多いので、できるならば避けたいところである。↩ -
\warekitoday
等は必ず今日の日付を出力するが、\warekicustomdate
は予め\warekisetdate
命令で指定した日付を出力する。ただし、\warekisetdate
の初期値は今日の日付であるので、\warekisetdate
を使わない場合は\warekicustomdate
の出力も今日の日付になる。↩ -
\warekicustomdate
の書式指定の文字列を引数にとる。引数が空の\warekicustomdate{}
は西暦・算用数字で出力する。この他に、例えば\warekicustomdate{wk}
だと和暦・漢数字(\warekikanjitoday
と同じ書式)で出力する。↩