% \iffalse meta-comment
%
% This file is part of the `japanese' package,
% providing Japanese language support for Babel.
%
% Copyright (C) 1999--2007 by ING (Toru INAGAKI)
%               2016--2021 by Japanese TeX Development Community
%
% \fi
%
% ^^A  Ensure UTF-8 input encoding for pLaTeX
% ^^A  (effective since e-pTeX 20160201, thus TeX Live 2016)
\ifx\epTeXinputencoding\undefined\else
  \epTeXinputencoding utf8
\fi
%
%\iffalse
%    Tell the \LaTeX\ system who we are and write an entry on the
%    transcript.
%<*dtx>
\ProvidesFile{babel-japanese.dtx}
%</dtx>
%<code>\ProvidesLanguage{japanese}
%<*!sample>
%\ProvidesFile{babel-japanese.dtx}
        [2021/02/13 v3.1 Japanese support for babel (texjporg)]
%</!sample>
%\fi
%
%\iffalse
%
%<*filedriver>
\ifx\directlua\undefined
  \documentclass{jltxdoc}
  \usepackage{minijs}
\else
  \documentclass{ltjltxdoc}
\fi
\usepackage[japanese]{babel}% load it
\GetFileInfo{babel-japanese.dtx}
\setcounter{StandardModuleDepth}{1}
\CodelineNumbered
\MakeShortVerb{\|}
\OnlyDescription
\newcommand*\babel{\textsf{babel}}
\newcommand*\langvar{$\langle \it lang \rangle$}
\usepackage{hologo}% for XeLaTeX logo
\def\pTeX{p\kern-.15em\TeX}
\def\pdfTeX{\hologo{pdfTeX}}
\def\XeTeX{\hologo{XeTeX}}
\def\LuaTeX{\hologo{LuaTeX}}
\def\pdfLaTeX{\hologo{pdfLaTeX}}
\def\XeLaTeX{\hologo{XeLaTeX}}
\def\LuaLaTeX{\hologo{LuaLaTeX}}
\def\pLaTeX{p\hologo{LaTeX}}
\def\upLaTeX{up\hologo{LaTeX}}
\begin{document}
  \DocInput{babel-japanese.dtx}
\end{document}
%</filedriver>
%
%\fi
%
% \title{Babel-Option {\sffamily japanese} version \fileversion}
% \author{\copyright\ 1999--2007 ING\\
%                     2016--2021 Japanese \TeX\ Development Community}
% \date{\filedate}
% \maketitle
% \baselineskip=14pt
%
% \section*{The Japanese language definition file}
%
% The package ``babel-japanese'' provides ``\texttt{japanese}''
% option for Babel package.
%
% \begin{itemize}
%  \def\textbf#1{{\fontseries{b}\selectfont #1}}
%  \def\repl#1{``\nobreak#1\nobreak''}
%  \item \textbf{This package provides only translated
%     replacement texts for caption keywords and date}
%     (e.g. \repl{Table of contents} $\rightarrow$ \repl{目次},
%           \verb+\today+ $\rightarrow$ \repl{\和暦\today}).
%     \textbf{To display such Japanese terms correctly,
%     you will need to select a proper Japanese font
%     and set up Japanese typesetting rules beforehand.}
%     This is because typesetting requirements of Japanese
%     (including line breaking and spacing) are completely
%     different from those of Western languages, so setting
%     parameter values and additional hyphenation patterns
%     are not enough. You may need to enable some engine
%     extensions (\pTeX\ family) or use extensive package
%     with Japanese support (Lua\TeX-ja).
%     Please refer to \file{japanese.pdf} for detail.
%  \item Moreover, \textbf{the translations provided by
%     this package are \emph{incomplete} either}:
%     to make full use of this package, you will need some
%     common Japanese classes.\footnote{e.g.
%       (u)jclasses or jsclasses for (u)\pLaTeX,
%       ltj(s)classes for \LuaLaTeX\ with Lua\TeX-ja package.}
%     This is due to the following reasons:
%   \begin{itemize}
%    \item The word order in Japanese is sometimes different
%     from that in most Western languages
%     (e.g. ``Part 1'' $\rightarrow$ ``第1部'').
%    \item Common Western classes (article.cls etc)
%     provide placeholders in front of the numbering
%     (e.g. \cs{chaptername}), but lack any placeholders
%     behind the numbering.\footnote{Update: starting from
%     Babel v3.53 (2021-01-26), a new feature to adjust
%     e.g. chapter format to have placeholders like
%     \cs{prechaptername} ... \cs{postchaptername} is
%     available, which seems to work with standard classes.}
%     Therefore, the keywords like ``Part'' or ``Chapter''
%     cannot be simply replaced with Japanese counterpart.
%   \end{itemize}
% \end{itemize}
%
% The importance of this package is to ``restore'' Japanese
% keywords which have been defined by Japanese classes
% but (partially) redefined by other languages while
% the main text is in Japanese. Example usage:
%\begin{verbatim}
% \documentclass{jbook}
% \usepackage[german,english,japanese]{babel}
%\end{verbatim}
%
% \section*{Babel日本語定義ファイル}
%
% \file{japanese}パッケージは，
% 日本語による見出し語と日付を出力するためのマクロを
% 定義しています。\babel のオプションの最後で日本語を指定します。
% \begin{quote}
% |\usepackage[...,japanese]{babel}|
% \end{quote}
%
% バージョンv2.0以降では，\pTeX{}系（\pLaTeX{}，\upLaTeX{}）に加えて，
% ネイティブUnicodeなエンジン（\XeTeX{}，\LuaTeX{}）もサポートしました。
% また，バージョンv3.0以降では\pdfLaTeX{}でも動作します。
% このため，ファイルはUTF-8エンコーディングで保存するようにしてください。
%
% 2016年以降，本パッケージのメンテナンスは日本語\TeX{}開発コミュニティ
% (Japanese \TeX\ Development Community)によって行われています。開発版は
% GitHubリポジトリ
%\begin{verbatim}
%      https://github.com/texjporg/babel-japanese
%\end{verbatim}
% にあります。バグ報告は上記のリポジトリ，またはIssue Mailing List
%\begin{verbatim}
%      issue@texjp.org
%\end{verbatim}
% までお願いします。
%
%
% \section{この文書について}
%
% このソースコード説明書(\jobname.pdf)自体は
% \pLaTeX{}，\upLaTeX{}，\LuaLaTeX{}で処理できるようになっています。
%
%
% \section{コード}
%
% [2020-11-27] エンジン検査は削除しました。
% ^^A \pTeX{}系（\pLaTeX{}，\upLaTeX{}）でなく，
% ^^A かつUnicodeな\TeX{}（\XeLaTeX{}，
% ^^A \LuaLaTeX{}）でもない場合は，最初にエラーを出します。
%
%    \begin{macrocode}
%<*code>
%\ifx\kanjiskip\@undefined\ifx\Umathcode\@undefined
%  \@latex@error{Option '\CurrentOption' requires
%                one of the followings:\MessageBreak
%                pTeX, upTeX, XeTeX, LuaTeX\MessageBreak
%                It seems you are running unsupported engine!}\@ehc
%\fi\fi
%    \end{macrocode}
%
%    \begin{macrocode}
\LdfInit\CurrentOption{captions\CurrentOption}
%    \end{macrocode}
%
% \DescribeMacro{\l@japanese}
% ここでは|\l@japanese|が定義されているか否かを判断し，定義されていれば
% 日本語用ハイフネーションパターンを読み込みます。
% \DescribeMacro{\adddialect}
% しかし，日本語にはハイフネーションパタンが存在しないので
% |\adddialect|に|\l@japanese|を代入し，\file{language.dat}
% で最初に指定した言語（言語番号0，通常は英語）のハイフネーションパターンを
% 使用します。
%
% [2016-12-16] 旧バージョン(v1.3)では
%\begin{quote}\small\begin{verbatim}
% Package babel Warning: No hyphenation patterns were loaded for
% (babel)                the language `Japanese'
% (babel)                I will use the patterns loaded for \language=0
%                        instead.
%\end{verbatim}\end{quote}
% という警告が出るのを無視する方針でしたが，新しい\babel では警告が
% よりうるさくなっていました。
%\begin{quote}\small\begin{verbatim}
% Package babel Warning: No hyphenation patterns were preloaded for
% (babel)                the language `Japanese' into the format.
% (babel)                Please, configure your TeX system to add them and
% (babel)                rebuild the format. Now I will use the patterns
% (babel)                preloaded for english instead on input line 47.
%\end{verbatim}\end{quote}
% そこで，新しいバージョン(v2.0)からは警告を出さないことにして，代わりに
% ログファイルにのみInfoを出力します。
%
%    \begin{macrocode}
\ifx\l@japanese\@undefined
%  \@nopatterns{Japanese}% comment out (2016-12-16)
  \PackageInfo{babel}{%
    No hyphenation patterns are available for Japanese,\MessageBreak
    so I will use the patterns preloaded for \bbl@nulllanguage\MessageBreak
    instead}
  \adddialect\l@japanese0\fi
%    \end{macrocode}
%
% \DescribeMacro{\captionsjapanese}
% |\captionsjapanese|マクロは\pLaTeX{}の標準のクラスファイルで使われる
% 見出し語を日本語で出力します。\LaTeX{}の標準のクラスファイルなど，
% 西欧で開発されたものでも一部しますが，
% 語順の関係上すべてが日本語化されない場合があります
% （たとえば，Part 1→第1部とは変更することは不可能です）。
%
% [2016-12-15] 「証明」と「用語集」も日本語化するようにしました。
% |\postpartname| がタイポで |\postpartnam| になっていたのを直しました。
%
% [2021-02-06] Babel v3.53で追加された新機能により，西欧で開発された
% クラスファイルでも見出しの日本語化サポートが改善されました。
% 少なくとも\LaTeX{}の標準のクラスファイルでは動作するようです。
% 後の |\setlocalecaption| のコードを参照してください。
%
% UTF-8エンコーディングで直接和文文字を記述します。
%    \begin{macrocode}
\def\bbl@jpn@prefacename{前書き}%
\def\bbl@jpn@refname{参考文献}%
\def\bbl@jpn@abstractname{概要}%
\def\bbl@jpn@bibname{参考文献}%
%\def\bbl@jpn@chaptername{Chapter}%
\def\bbl@jpn@prechaptername{第}%    -- added
\def\bbl@jpn@postchaptername{章}%   -- added
\def\bbl@jpn@presectionname{}%  第  -- added
\def\bbl@jpn@postsectionname{}% 節  -- added
\def\bbl@jpn@appendixname{付録}%
\def\bbl@jpn@contentsname{目次}%
\def\bbl@jpn@listfigurename{図目次}%
\def\bbl@jpn@listtablename{表目次}%
\def\bbl@jpn@indexname{索引}%
\def\bbl@jpn@figurename{図}%
\def\bbl@jpn@tablename{表}%
%\def\bbl@jpn@partname{Part}%
\def\bbl@jpn@prepartname{第}%       -- added
\def\bbl@jpn@postpartname{部}%      -- added
%\def\bbl@jpn@enclname{encl}%     同封物
%\def\bbl@jpn@ccname{cc}%         Cc
%\def\bbl@jpn@headtoname{To}%     To（宛先）
%\def\bbl@jpn@pagename{Page}%     ページ
%\def\bbl@jpn@seename{see}%       参照
%\def\bbl@jpn@alsoname{see also}% も参照
\def\bbl@jpn@proofname{証明}%
\def\bbl@jpn@glossaryname{用語集}%
%    \end{macrocode}
%
% 実際の命令にこれらをコピーします。
%    \begin{macrocode}
\@namedef{captions\CurrentOption}{%
  \let\prefacename\bbl@jpn@prefacename
  \let\refname\bbl@jpn@refname
  \let\abstractname\bbl@jpn@abstractname
  \let\bibname\bbl@jpn@bibname
  %\def\chaptername{Chapter}%
  \let\prechaptername\bbl@jpn@prechaptername   % -- added
  \let\postchaptername\bbl@jpn@postchaptername % -- added
  \let\presectionname\bbl@jpn@presectionname   % -- added
  \let\postsectionname\bbl@jpn@postsectionname % -- added
  \let\appendixname\bbl@jpn@appendixname
  \let\contentsname\bbl@jpn@contentsname
  \let\listfigurename\bbl@jpn@listfigurename
  \let\listtablename\bbl@jpn@listtablename
  \let\indexname\bbl@jpn@indexname
  \let\figurename\bbl@jpn@figurename
  \let\tablename\bbl@jpn@tablename
  %\def\partname{Part}%
  \let\prepartname\bbl@jpn@prepartname   % -- added
  \let\postpartname\bbl@jpn@postpartname % -- added
  %\def\enclname{encl}%     同封物
  %\def\ccname{cc}%         Cc
  %\def\headtoname{To}%     To（宛先）
  %\def\pagename{Page}%     ページ
  %\def\seename{see}%       参照
  %\def\alsoname{see also}% も参照
  \let\proofname\bbl@jpn@proofname
  \let\glossaryname\bbl@jpn@glossaryname
  }
%    \end{macrocode}
%
% \DescribeMacro{\datejapanese}
% |\datejapanese|マクロは日本語で日付を出力するように |\today|コマンドを
% 再定義します。デフォルトの出力は西暦です。和暦を使用する際は，プリアンブルで 
% |\和暦| を指定するか，本文で |\和暦\today| のように指定します。
%
% フラグの準備。
%    \begin{macrocode}
\newif\ifbbl@jpn@Seireki \bbl@jpn@Seirekitrue
%    \end{macrocode}
%
% UTF-8エンコーディングで直接和文文字を記述します。
% \pdfLaTeX{}や\XeLaTeX{}の場合は
% |\bbl@jpn@Tate...| の2つは実際には使いません。
%    \begin{macrocode}
\def\西暦{\bbl@jpn@Seirekitrue}%
\def\和暦{\bbl@jpn@Seirekifalse}%
\def\bbl@jpn@kanjishowa{昭和}
\def\bbl@jpn@kanjiheisei{平成}
\def\bbl@jpn@kanjireiwa{令和}
\def\bbl@jpn@kanjigan{元}%
\def\bbl@jpn@TateSeirekiToday{%
    \bbl@jpn@maybekansuji\year 年%
    \bbl@jpn@maybekansuji\month 月%
    \bbl@jpn@maybekansuji\day 日}
\def\bbl@jpn@TateWarekiToday{%
    \bbl@jpn@gengo\bbl@jpn@maybekansuji\bbl@jpn@gengoyear 年%
    \bbl@jpn@maybekansuji\month 月%
    \bbl@jpn@maybekansuji\day 日}
\def\bbl@jpn@SeirekiToday{%
    \number\year 年%
    \number\month 月%
    \number\day 日}
\def\bbl@jpn@WarekiToday{%
    \bbl@jpn@gengo\number\bbl@jpn@gengoyear 年%
    \number\month 月%
    \number\day 日}
%    \end{macrocode}
%
% |\bbl@jpn@gengo| の内部で，元号を計算します。
%
% [2019-04-03] 2019年5月1日から始まる予定の新元号「令和」に対応しました。
%    \begin{macrocode}
\def\bbl@jpn@gengo#1\bbl@jpn@gengoyear{%
  \@tempcnta\year\relax
  \multiply\@tempcnta100
  \advance\@tempcnta\month
  \multiply\@tempcnta100
  \advance\@tempcnta\day
  \@tempcntb\year\relax
  \ifnum\@tempcnta<19890108
    \bbl@jpn@kanjishowa
    \advance\@tempcntb-1925
  \else\ifnum\@tempcnta<20190501
    \bbl@jpn@kanjiheisei
    \advance\@tempcntb-1988
  \else
    \bbl@jpn@kanjireiwa
    \advance\@tempcntb-2018
  \fi\fi
  \ifnum\@tempcntb=1
    \bbl@jpn@kanjigan   % 元年は \number も \kansuji も関係ない
  \else
    #1\@tempcntb % この #1 は \number または \bbl@jpn@maybekansuji
  \fi
}
%    \end{macrocode}
%
% (u)\pLaTeX{}とLua\TeX-jaで組方向判定方法が異なるため，
% |\catcode| のトリックで別々のコードを使い分けます。
% \pdfLaTeX{}や\XeLaTeX{}の場合，および\LuaLaTeX{}で
% Lua\TeX-ja不使用の場合は，縦組をサポートしません。
%    \begin{macrocode}
\chardef\bbl@jpn@l@catcode=\catcode`\L\relax
\chardef\bbl@jpn@p@catcode=\catcode`\P\relax
\chardef\bbl@jpn@x@catcode=\catcode`\X\relax
\ifx\directlua\@undefined
  \ifx\kanjiskip\@undefined       % pdftex/xetex
    \catcode`\L=14\relax
    \catcode`\P=14\relax
    \catcode`\X=14\relax
  \else                           % ptex/uptex
    \catcode`\L=14\relax
    \catcode`\P=9\relax
    \catcode`\X=9\relax
  \fi
\else
  \ifx\luatexjaLoaded\@undefined  % luatex
    \catcode`\L=14\relax
    \catcode`\P=14\relax
    \catcode`\X=14\relax
  \else                           % luatex + luatexja
    \catcode`\L=9\relax
    \catcode`\P=14\relax
    \catcode`\X=9\relax
  \fi
\fi
%    \end{macrocode}
%
% 実際に使用する命令にコピーします。
%
% [2019-04-03] 縦数式ディレクションは横組と同じ出力とします。
%    \begin{macrocode}
\@namedef{date\CurrentOption}{%
  \def\today{{%
P   \ifnum1=\iftdir\ifmdir0\else1\fi\else0\fi % tate
L   \ifnum\ltjgetparameter{direction}=3 % tate
X     \ifbbl@jpn@Seireki
X       \bbl@jpn@TateSeirekiToday
X     \else
X       \bbl@jpn@TateWarekiToday
X     \fi
X   \else
      \ifbbl@jpn@Seireki
        \bbl@jpn@SeirekiToday
      \else
        \bbl@jpn@WarekiToday
      \fi
X   \fi
  }}%
}
%    \end{macrocode}
%
% [2017-02-05] 新機能：|\languageattribute{japanese}{kansujitoday}|を指定すると，
% 縦書きでは |\today| の表記が漢数字（例：二〇一六年一二月二八日）になります。
%    \begin{macrocode}
\let\bbl@jpn@maybekansuji\number
\bbl@declare@ttribute{japanese}{kansujitoday}{\let\bbl@jpn@maybekansuji\kansuji}
%    \end{macrocode}
%
% トリックに使用した文字の |\catcode| を元に戻します。
%    \begin{macrocode}
\catcode`\L=\bbl@jpn@l@catcode\relax
\catcode`\P=\bbl@jpn@p@catcode\relax
\catcode`\X=\bbl@jpn@x@catcode\relax
%    \end{macrocode}
%
% \DescribeMacro{\setlocalecaption}
% [2021-02-06] Babel v3.53の新機能を使い，
% 西欧のクラスファイルの |\part| と |\chapter| の形式を
% |\pre...name| と |\post...name| で挟む形式に変更します。
%
% 参考：|\xkanjiskip| の自動挿入が不可能なエンジンでは
%\begin{verbatim}
%   [[prepart]][part][[postpart]]
%   [[prechapter]][chapter][[postchapter]]
%\end{verbatim}
% ではなく
%\begin{verbatim}
%   [[prepart]] [part] [[postpart]]
%   [[prechapter]] [chapter] [[postchapter]]
%\end{verbatim}
% のほうが見栄えが良いかもしれません。
%    \begin{macrocode}
\ifx\setlocalecaption\@undefined \else
\setlocalecaption{\CurrentOption}{part.template}%
  {[[prepart]][part][[postpart]]}
\setlocalecaption{\CurrentOption}{chapter.template}%
  {[[prechapter]][chapter][[postchapter]]}
\fi
%    \end{macrocode}
%
%    \begin{macrocode}
\@namedef{extras\CurrentOption}{}
\@namedef{noextras\CurrentOption}{}
\ldf@finish\CurrentOption
%</code>
%    \end{macrocode}
%
% \section*{謝辞}
%
% Babel-Option \Lopt{japanese}の作成に当って，バグフィックスや改良案を
% ご提案いただいた方に感謝します。
% bookworm $<$BYV01204$>$さんから，新しい言語を定義し，それに固有の
% 言語番号を付けるマクロ \verb+\addlanguage+の機能について，詳しい
% 解説をいただきました。本パッケージでは採用していませんが，\babel
% の言語切り替え機能を理解する上でたいへん参考になりました。
% Tony $<$PAG01322$>$さんから，キャプションと日付の定義について
% ご提案をいただきました。
% 大石勝 $<$DZH00446$>$さんから，初版に含まれていた \verb+\ifx\undefined+
% のバグをご指摘いただきました。
%
% \section*{変更履歴}
% \begin{itemize}
% \item 2005年2月：日付の定義を修正しました。
% \item 2007年10月：ZRさんからいただいた詳細なご指摘をもとに修正しました。\\
% \verb|http://oku.edu.mie-u.ac.jp/~okumura/texfaq/qa/48625.html|
% \item 2007年12月：ZRさん，ttkさんからいただいたご指摘を反映しました。
% \item 2016年12月：日本語\TeX{}開発コミュニティが開発を引き継ぎました。
%   以降の変更履歴は本文中に直接書いてあります。
% \item 2020年12月：冒頭のドキュメントを英語にしました。
%   また，このドキュメントを\file{japanese.pdf}から
%   \file{babel-japanese.pdf}にリネームし，新たに「ちゃんと日本語
%   する方法」を概説する新版\file{japanese.pdf}を追加しました。
% \item 2021年2月：Babel v3.53の新機能を活用しました。
% \end{itemize}
%
% \StopEventually{}
%
%    \begin{macrocode}
%<*sample>
\ifx\directlua\undefined
 \ifx\kanjiskip\undefined
  \ifx\XeTeXversion\undefined
    % pdfLaTeX: not beautiful
    \documentclass{book}
    \usepackage[whole]{bxcjkjatype}
  \else
    % XeLaTeX: not beautiful
    \documentclass{book}
    \usepackage{zxjatype}
    \setCJKmainfont{ipaexm.ttf}
  \fi
 \else
  \ifx\ucs\undefined
    % pLaTeX: OK
    \documentclass{jbook}
    \usepackage{minijs}
  \else
    % upLaTeX: OK
    \documentclass{ujbook}
  \fi
 \fi
\else
    % LuaLaTeX: OK
    \documentclass{ltjbook}
\fi
\usepackage[german,english,japanese]{babel}
\makeatletter
\def\tbcaption{\def\@captype{table}\caption{キャプションの例}}
\def\fgcaption{\def\@captype{figure}\caption{キャプションの例}}
\makeatother
\def\yes{--- はい。}
\def\no{--- いいえ。}
\def\TEXT{Textverarbeitung mit einem Rechner kann in vielf\"altiger Weise
erfolgen. Eigenschaften und Leistungsf\"ahigkeit sind hierbei weniger
vom jeweiligen Rechnertype, sondern vielmehr vom verwendeten
\textit{Textverarbeitungsprogramm} bestimmt.}
\def\se{\selectlanguage{english}}
\def\sj{\selectlanguage{japanese}}
\def\sg{\selectlanguage{german}}
\setlength{\hoffset}{-13mm}
\setlength{\textwidth}{16cm}
\begin{document}

\chapter{babel}
\section{japaneseパッケージ}
japaneseパッケージは日本語による見出し語と日付を出力するためのマクロを
定義しています。

\fgcaption

\begin{itemize}
\se
\item ここで英語（\texttt{english}）に変更します。
（languageの値は\the\language）

\TEXT

ここは英語？ \iflanguage{english}{\yes}{\no}\par
ここはドイツ語？ \iflanguage{german}{\yes}{\no}\par
ここは日本語？ \iflanguage{japanese}{\yes}{\no}

※ \verb:\adddialect\l@japanese0: と設定しているため，
日本語？も「はい」となります。

\sg
\item ここでドイツ語（\texttt{german}）に変更します。
（languageの値は\the\language）

\TEXT

ここは英語？ \iflanguage{english}{\yes}{\no}\par
ここはドイツ語？ \iflanguage{german}{\yes}{\no}\par
ここは日本語？ \iflanguage{japanese}{\yes}{\no}

※ ハイフネーションがドイツ語―旧正書法―に切り替わっている点に注目。
なお，新正書法（\texttt{ngerman}）では
\texttt{Leis-tungs-f\"a-hig-keit}のように分綴します。

\sj
\item ここで日本語（\texttt{japanese}）に変更します。
（languageの値は\the\language）
\tbcaption
\item \verb:\和暦: は日付の表示をデフォルトの西暦「\today 」から
和暦「\和暦\today 」に変更します。
\end{itemize}
\end{document}
%</sample>
%    \end{macrocode>
%
% \Finale
%
\endinput
