iwase/itoniki の履歴(No.14) - PukiWiki

<< 2024.11 >>
[iwase/itoniki]
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30


gloss-japanese.ldf (version 0.2.1) for polyglossia - a babel replacement for XeLaTeX

I started to use XeLaTeX in July 2006 for preparing lecture notes for an extension course.
And I gradually transfer my tex environments to fit with XeLaTeX including latex-beamer.
To complete the transfer from Japanese latex to xelatex, there was an issue to create some
Japanese localisation file for polyglossia to resolve some incompatibilities between Japanese
and European-American styles, as is done by Toru Inagaki for babel on Japanese latex.
Converting from Inagaki's japanese.ldf, I found an incompatibility of book.cls with standard
Japanese book style. So I wrote down two versions of gloss-japanese.ldf -- one is below with
many codes borrowed from book.cls and the other is to follow european-american style.
In addition, please try them at your own risk. I am not responsible at all.


2006年夏の公開講座に向けたノート作りを XeLaTeX で行ったのをきっかけにして
徐々に tex の環境を latex-beamer なども含めて XeLaTeX に移行しつつある。
この移行を完了させる障害となったのは日本語特有の事柄を反映させることのできる
polyglossia 用のファイル(ちょうど platex+babel 用に稲垣さんが作成されている)
が必要になった。 稲垣さんの japanese.ldf を変換する過程で、book.cls には
『第1章』などと表示することができない等の問題に遭遇し、gloss-japanese.ldf
では二つの解決法を並列している ー 一つは下にあるように book.cls からコードを
コピー&改変するもので、もう一つは欧米スタイルに合わせるものである。
これらはどうかご自身の責任においてお試し下さい。(私は責任を持てません)


The new version (0.2.1 - a bug fixed) has come as below. The old version (0.1) is here


明治から平成まで対応した新版(version 0.2.1)ができました。 旧版(version 0.1)は こちら

% Original version was written by Toru Inagaki for babel.sty
% Modified for polyglossia by Norio Iwase with some additional features
% Version 0.2.1
\ProvidesFile{gloss-japanese.ldf}[polyglossia: module for japanese]
\makeatletter
\def\japanese@font{%
  \@ifundefined{japanesefont}{%
    \font\zf@basefont="\csname zf@family@fontdef\f@family\endcsname" at \f@size pt}{\japanesefont}}

\def\selectnormalfontjapanese{%
   \let\normalfont=\japanese@font%
   \let\rmfamily=\japanese@font%
   \let\sffamily=\japanese@font%
   \let\ttfamily=\japanese@font%
   \def\reset@font{\normalfont}}

\ifx\l@japanese\@undefined
   \xpg@nopatterns{Japanese}
   \adddialect\l@japanese0
\fi

\def\japanese@capsformat{%
   \def\@seccntformat##1{\csname pre##1\endcsname%
      \csname the##1\endcsname%
      \csname post##1\endcsname}%
   \def\postsection{\textjapanese{}\space}% 節
   \def\postsubsection{\textjapanese{}\space}% 節
   \def\postsubsubsection{\textjapanese{}\space}% 節
   \def\presection{}% 第
   \def\presubsection{}% 第
   \def\presubsubsection{}}% 第

\@ifclassloaded{book}{%
  \if@twoside
    \def\ps@headings{%
        \let\@oddfoot\@empty\let\@evenfoot\@empty
        \def\@evenhead{\thepage\hfil\slshape\leftmark}%
        \def\@oddhead{{\slshape\rightmark}\hfil\thepage}%
        \let\@mkboth\markboth
      \def\chaptermark##1{%
        \markboth {\MakeUppercase{%
          \ifnum \c@secnumdepth >\m@ne
            \if@mainmatter
              \@chapapp\ \thechapter\postchaptername. \ %
            \fi
          \fi
          ##1}}{}}%
      \def\sectionmark##1{%
        \markright {\MakeUppercase{%
          \ifnum \c@secnumdepth >\z@
            \thesection. \ %
          \fi
          ##1}}}}
  \else
    \def\ps@headings{%
      \let\@oddfoot\@empty
      \def\@oddhead{{\slshape\rightmark}\hfil\thepage}%
      \let\@mkboth\markboth
      \def\chaptermark##1{%
        \markright {\MakeUppercase{%
          \ifnum \c@secnumdepth >\m@ne
            \if@mainmatter
              \@chapapp\ \thechapter\postchaptername. \ %
            \fi
          \fi
          ##1}}}}
  \fi
}{}
\def\@chapter[#1]#2{%
  \ifnum \c@secnumdepth >\m@ne%
    \if@mainmatter%
      \refstepcounter{chapter}%
      \typeout{\@chapapp\space\thechapter\postchaptername}%
      \addcontentsline{toc}{chapter}%
        {\protect\numberline{\thechapter}#1}%
    \else%
      \addcontentsline{toc}{chapter}{#1}%
    \fi%
  \else%
    \addcontentsline{toc}{chapter}{#1}%
  \fi%
  \chaptermark{#1}%
  \addtocontents{lof}{\protect\addvspace{10\p@}}%
  \addtocontents{lot}{\protect\addvspace{10\p@}}%
  \if@twocolumn
    \@topnewpage[\@makechapterhead{#2}]%
  \else
    \@makechapterhead{#2}%
    \@afterheading
  \fi}
\def\@makechapterhead#1{%
  \vspace*{50\p@}%
  {\parindent \z@ \raggedright \normalfont
    \ifnum \c@secnumdepth >\m@ne
      \if@mainmatter
        \huge\bfseries \@chapapp\space\thechapter\postchaptername
        %\hspace{2em}\Huge \bfseries #1
        \par\nobreak
        \vskip 20\p@
      \fi
    \fi
    \interlinepenalty\@M
    \Huge \bfseries #1\par\nobreak
    \vskip 40\p@
  }}
\def\@part[#1]#2{%
  \ifnum \c@secnumdepth >-2\relax
    \refstepcounter{part}%
    \addcontentsline{toc}{part}{\thepart\postpartname\hspace{1em}#1}%
  \else
    \addcontentsline{toc}{part}{#1}%
  \fi
  \markboth{}{}%
  {\centering
   \interlinepenalty \@M
   \normalfont
   \ifnum \c@secnumdepth >-2\relax
     \huge\bfseries \partname\nobreakspace\thepart\postpartname
     \par
     \vskip 20\p@
   \fi
   \Huge \bfseries #2\par}%
  \@endpart}

\def\captionsjapanese{%
   \def\refname{\textjapanese{出典}}%
   \def\abstractname{\textjapanese{要旨}}%
   \def\bibname{\textjapanese{参考文献}}%
   \def\prefacename{\textjapanese{序文}}%
   \def\postchaptername{\textjapanese{章}}%
   \def\chaptername{\textjapanese{第}}%
   \def\appendixname{\textjapanese{付録}}%
   \def\contentsname{\textjapanese{目次}}%
   \def\listfigurename{\textjapanese{図目次}}%
   \def\listtablename{\textjapanese{表目次}}%
   \def\indexname{\textjapanese{索引}}%
   \def\figurename{\textjapanese{図}}%
   \def\tablename{\textjapanese{表}}%
   %\def\thepart{\textjapanese{}}%
   \def\postpartname{\textjapanese{部}}%
   \def\partname{\textjapanese{第}}%
   \def\pagename{\textjapanese{頁}}%
   \def\seename{\textjapanese{参照}}%
   \def\alsoname{\textjapanese{参照}}%
   \def\enclname{\textjapanese{添付}}%
   \def\ccname{\textjapanese{同報}}%
   \def\headtoname{\textjapanese{宛先}}%
   \def\proofname{\textjapanese{証明}}%
   \def\glossaryname{\textjapanese{用語集}}%
   }

  \newif\if@WameiReki \@WameiRekifalse%
  \newif\if@WameiTosi \@WameiTosifalse%
  \newif\if@WameiTuki \@WameiTukifalse%
  \newif\if@WameiHi \@WameiHifalse%
  \newif\if@IzumoTuki \@IzumoTukifalse%
  \newcount\WameiTosi@Tens
  \newcount\WameiTosi@Ones
   \XeTeXlinebreaklocale "ja"%
   \XeTeXlinebreakskip = 0em plus 0.1em minus 0.01em%
   \XeTeXlinebreakpenalty = 0

\def\datejapanese{{%
  \ifnum\year<1868 \xdef\the@WarekiCur{}%
  \else\ifnum\year<1912 \xdef\the@WarekiCur{明治} \advance\year-1867\relax%
  \else\ifnum\year<1926 \xdef\the@WarekiCur{大正} \advance\year-1911\relax%
  \else\ifnum\year<1989 \xdef\the@WarekiCur{昭和} \advance\year-1925\relax%
  \else\xdef\the@WarekiCur{平成} \advance\year-1988\relax\fi\fi\fi\fi%
  \xdef\the@WameiTosi{\the\year}%
  \WameiTosi@Ones=\the@WameiTosi \WameiTosi@Tens=\the@WameiTosi%
  \divide\WameiTosi@Tens by 10\relax%
  \multiply\WameiTosi@Tens by 10\relax%
  \advance\WameiTosi@Ones by -\WameiTosi@Tens\relax%
  \divide\WameiTosi@Tens by 10\relax%
  \xdef\the@WameiTositens{\number\WameiTosi@Tens}%
  \xdef\the@WameiTosiones{\number\WameiTosi@Ones}%
  }%
  \def\西暦{\@WameiRekifalse \@WameiTukifalse \@WameiHifalse}%
  \def\和暦{\@WameiRekitrue \@WameiTosifalse \@WameiTukifalse \@WameiHifalse}%
  \def\和名暦{\@WameiTositrue \@WameiTukitrue \@WameiHitrue}%
  \def\数字暦{\@WameiTosifalse \@WameiTukifalse \@WameiHifalse}%
  \def\出雲月{\@IzumoTukitrue}%
  \def\大和月{\@IzumoTukifalse}%
  \def\today{\textjapanese{\hspace{-.67em}%
 \if@WameiReki\the@WarekiCur\if@WameiTosi\ifcase\the@WameiTositens\or 十\or 廿\or 卅\or 四十\or 五十\or 六十\or 七十\or 八十\or 九十\fi\ifcase\the@WameiTosiones\or 一\or 二\or 三\or 四\or 五\or 六\or 七\or 八\or 九\fi\else\,\the@WameiTosi\fi\else\number\year\,\fi{年}\,%
 \if@WameiTuki\ifcase\month\or 睦月\or 如月\or 弥生\or 卯月\or 皐月\or 水無月\or 文月\or 葉月\or 長月\or \if@IzumoTuki 神在月\else 神無月\fi \or 霜月\or 師走\fi\else \number\month\,{月}\fi\,%
 \if@WameiHi\ifcase\day\or 一\or 二\or 三\or 四\or 五\or 六\or 七\or 八\or 九\or 十\or 十一\or 十二\or 十三\or 十四\or 十五\or 十六\or 十七\or 十八\or 十九\or 廿\or 廿一\or 廿二\or 廿三\or 廿四\or 廿五\or 廿六\or 廿七\or 廿八\or 廿九\or 卅 \or 卅一\fi\else\number\day\,\fi{日}}}%
   }

\def\japanese@language{\protect\language=\l@japanese}

\setlocalhyphenmins{japanese}{2}{2}%

サンプルを作らねばと思い、やはり稲垣さんの sample.tex を少し改変させて頂いたものをさらに少し変更してしまいました:

%!TEX TS-program = XeLaTeX
% version 0.2
\documentclass{book}
\usepackage{xunicode}%
\usepackage[no-math]{fontspec}
\usepackage{polyglossia}%
\usepackage{xltxtra}
%
\setdefaultlanguage{japanese}
\setotherlanguage{english}
\setotherlanguage{french}
\setotherlanguage{german}
%
\defaultfontfeatures{Mapping=tex-text}
\setromanfont{Hiragino Mincho Pro W3}%
\setsansfont{Hiragino Kaku Gothic Pro W3}%
\setmonofont{Osaka-Mono}
%
\makeatletter
\def\tbcaption{\def\@captype{table}\caption{キャプションの例}}
\def\fgcaption{\def\@captype{figure}\caption{キャプションの例}}
\makeatother
\def\sf{\selectlanguage{french}}
\def\se{\selectlanguage{english}}%
\def\sj{\selectlanguage{japanese}}
\def\sg{\selectlanguage{german}}
\setlength{\voffset}{-43mm}
\setlength{\hoffset}{-13mm}
\setlength{\textwidth}{16cm}
\setlength{\textheight}{27cm}
\begin{document}

\sj
\chapter{PolyGlossia}
japanese パッケージは日本語による見出し語と日付を出力するためのマクロを定義しています。
\se
\section{In ``\texttt{English}''}
(The value of language code is \the\language) \par\hfil\verb:\today: :\today\hfil

\fgcaption
\tbcaption

\sf
%\section{En ``\texttt{fran\c{c}ais}''}
\section{En ``\texttt{français}''}
(La valeur de code de langue est \the\language) \par\hfil\verb:\today: :\today\hfil

\fgcaption
\tbcaption

\sj
\section{『\texttt{日本語}』で}
(language コードの値は \the\language) \par\hfil\verb:\today: :\today\hfil

\fgcaption
\tbcaption

\begin{itemize}
 \item \verb:\和暦: は日付の表示をデフォルトの西暦「\today」から和暦「\和暦\today」に変更し、\verb:\西暦: はこれを元の表示「\西暦\today」に戻します。\par\smallskip\hfil\verb:\和暦\today: :\和暦\today\hfil
 \item \verb:\和名暦: は日付の表示をデフォルトの和暦「\和暦\today」から、月などの名に和名を採用した暦「\和名暦\today」に変更し、\verb:\数字暦: はこれを元の表示「\数字暦\today」に戻します。
 \item \verb:\出雲月: は神無月を神在月に、また \verb:\大和月: はその逆にします。
\end{itemize}

\sg
\section{In ``\texttt{Deutsch}''}
(Der Wert der Sprache Code ist \the\language) \par\hfil\verb:\today: :\today\hfil

\fgcaption
\tbcaption

\end{document}

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS