岡本順治研究室

学習院大学

cosmos
HOMERESEARCHEDUCATIONLinuxLaTeXet cetraPDGHOME(Deutsch)

german.sty と ngerman.sty (in VineLinux3.1)のハイフネーションを検証(分綴調査 その4)

  1. VineLinux3.1 の tetex-2.0.2-0vl14.i386.rpm には、 /usr/share/texmf/tex/generic/german 以下に、
    german.styngerman.sty が入っています。
    前者が、 旧正書法用のスタイルファイル、後者が新正書法用のスタイルファイルで、 CTAN で(2005年7月)確認したところ、
    それぞれ最新のものです。 (どちらも、v2.5e 1998-07-08
    今回は、本当に2つのスタイルファイルでハイフネーションが違うのかどうか、 検証してみました。
    新・旧の正書法におけるおよその違いは、 こちらを参照して下さい。
    なお、今回の検証に当っては、latex, platex ともに、 ドイツ語のハイフネーションを組み込んだ latex.fmt, platex.fmt
    を使用しています。組み込みの手順は、 Babel+LaTeXの場合, Babel+ptexの場合 を参照してください。
  2. まずは、\showhyphens{  }を使って、 どのようにハイフネーションが行われるのかを見てみます。
    テストに使ったLaTeX ソースファイルは、以下のものです。
    このファイルを、latex, platex を使い、 article.cls, jarticle.cls と共にそれぞれコンパイルして、
    ログファイルに書き出されたハイフネーションを比較してみます。 (本文がないため、*.dvi ファイルは出力されません。)
    \documentclass[12pt]{article}
    \usepackage{german}
    %\usepackage{ngerman}
    \begin{document}
    
    \showhyphens{Abend Ofen sechste Kasten trocken gestern }
    \showhyphens{interessant aufeinander backen P"adagogik Helikopter}
    \end{document}
    
    なお、これらの単語は、以下のように分けられます。 新正書法では、 ハイフネーションの可能性が増えたことにも注目しておいて下さい。

    単語旧正書法新正書法
    Abend Abend A- bend
    Ofen Ofen O-fen
    sechste sech- ste sechs- te
    trocken trok- ken tro- cken
    Kasten Ka- sten Kas- ten
    Kasten Ka- sten Kas- ten
    gestern ge- stern ges- tern
    interessant in- ter- es- sant in-ter-es-sant / in- te- res- sant
    aufeinander auf- ein- an- der auf- ein- an- der / auf- ei- nan- der
    backen bak- ken ba- cken
    Pädagogik Päd- ago- gik Päd- ago- gik / Pä- da- go- gik
    Helikopter He- li- ko- pter He- li- ko- pter / He- li- kop- ter
  3. \showhyphens{  }の結果をまとめてみると、 以下のようになります。

    (1) article.cls, german.sty を使って latex でコンパイル
    [] \OT1/cmr/m/n/12 Abend Ofen sech-ste Ka-sten trocken ge-stern
    [] \OT1/cmr/m/n/12 in-ter-es-sant auf-ein-an-der backen P[]adago-gik He-li-ko-pter


    (2) jarticle.cls, german.sty を使って platex でコンパイル
    [][] \OT1/cmr/m/n/12 Abend Ofen sech-ste Ka-sten trocken ge-stern
    [][] \OT1/cmr/m/n/12 in-ter-es-sant auf-ein-an-der backen P[]adago-gik He-li-ko-pter


    (3) article.cls, ngerman.sty を使って latex でコンパイル
    [] \OT1/cmr/m/n/12 Abend Ofen sechs-te Kas-ten tro-cken ges-tern
    [] \OT1/cmr/m/n/12 in-ter-essant auf-ein-an-der ba-cken P[]adago-gik He-li-ko-pter


    (4) jarticle.cls, ngerman.sty を使って platex でコンパイル
    [][] \OT1/cmr/m/n/12 Abend Ofen sechs-te Kas-ten tro-cken ges-tern
    [][] \OT1/cmr/m/n/12 in-ter-essant auf-ein-an-der ba-cken P[]adago-gik He-li-ko-pter


  4. 結果を整理すると、
    (1) platex + jarticle.clslatex + article.cls では、ハイフネーションに差がでなかった。
    (2) german.styngerman.sty の違いは、 以下の表を参照。
     (a)  Abend, Ofenのような短い単語は、LaTeXでは分けないで、 単語間のスペース調節でのりきろうとしている。
     (b)  ckの扱いは、 german.styngerman.sty で明らかに異なる。
      ただし、german.styでは、ckk- k と分けるためには、"ck と陽にソースファイルで指定しなければならない。
      ngerman.styでは、 ckの前で分割している。(tro-cken, ba-cken)
     (c)  stの扱いは、 german.styngerman.sty で明らかに異なる。
      ngerman.styでは、 sを前の母音字に付けて分割している(Kas- ten, ges- tern)
      のに対してgerman.styでは、 st は、分割を禁じる文字の組み合わせなので、 stの前で切られることになる。
     (d)  interessant の扱いは、予想外だった。
      ngerman.styでは、 in- ter- essant とおおまかな分割になっている。
     (e)  aufeinander, Helikopter, Pädagogik の扱いは、旧正書法と同じだった。

    単語german.sty(旧) ngerman.sty(新)
    Abend Abend Abend
    Ofen Ofen Ofen
    sechste sech- ste sechs- te
    Kasten Ka- sten Kas- ten
    trocken trocken tro- cken
    gestern ge- stern ges- tern
    interessant in- ter- es- sant in-ter-essant
    aufeinander auf- ein- an- der auf- ein- an- der
    backen backen ba-cken
    Pädagogik Pädago- gik Pädago- gik
    Helikopter He- li- ko- pter He- li- ko- pter
  5. コメント
    これだけで german.sty, ngerman.styの違いを確定できませんが、 およその傾向は見てとれます。
    TeXのハイフネーションは、文字毎の情報ではなく、 文字列の並びから予測して分割しているので、はずれる場合には、
    積極的に \hyphenation{  }を使って指定する必要があります。
    例えば、ソースファイル内に、 \hyphenation{in-te-res-sant}と書いておけば、 その通りにハイフネーションが行われます。
    また、別ファイルにして(例えば、myhyphen.tex)、 プリアンブルで\input{myhyphen}とすることが考えられます。
  6. いじわるテキストを用意しました。たいしたものではないのですが、 以下のようなものです。
    \documentclass[12pt]{article}
    \textwidth 122mm
    \usepackage{ngerman}
    %\usepackage{german}
    \usepackage{times}
    \begin{document}
    
    \noindent
    gestern     Abend       interessant Ofen        Kasten 
    sechste     backen      trocken     Ofen        Zucker
    Abend       Ofen        Kasten      Helikopter  interessant 
    backen      sechste     backen      trocken     Zucker 
    gestern     Kasten      Zucker      gestern     Ofen 
    Kasten      sechste     interessant backen      trocken 
    Zucker      gestern     Abend       aufeinander Kasten 
    sechste     backen      Helikopter  Zucker      trocken
    Zucker      gestern     Abend       Ofen        sechste
    Helikopter  backen      trocken     interessant Zucker
    gestern     sechste     Abend       Ofen        Kasten
    Ofen        backen      trocken     aufeinander Zucker
    gestern     Abend       interessant Ofen        Kasten
    Zucker      sechste     trocken     gestern     Abend 
    Kasten      sechste     backen      Kasten      interessant 
    Zucker      gestern     Abend       Ofen        Kasten 
    interessant sechste     backen      trocken     Zucker
    Abend       Ofen        Kasten      sechste     backen 
    trocken     Helikopter  aufeinander Zucker      gestern 
    Ofen        Kasten      Zucker      sechste     backen 
    trocken     Helikopter  Zucker      gestern     Kasten 
    sechste     trocken     interessant Helikopter  backen 
    Zucker      gestern     Abend       Ofen        sechste 
    backen      trocken     Helikopter  aufeinander Zucker 
    gestern     Abend       Ofen        Kasten      backen 
    trocken     backen      aufeinander Zucker      gestern 
    Abend       Kasten      sechste     trocken     Ofen
    backen      interessant gestern     Abend       Ofen 
    Kasten      sechste     backen      Kasten      backen 
    Helikopter  Zucker      gestern     Zucker      Abend 
    Ofen        Kasten      sechste     backen      trocken 
    Zucker      Abend       Ofen        Kasten      sechste 
    backen      trocken     Abend       backen      Zucker 
    gestern     Ofen        Kasten      sechste     backen 
    trocken     aufeinander Zucker      gestern     Abend 
    Kasten      sechste     backen      trocken     backen 
    Zucker      gestern     Abend       Zucker      Ofen 
    sechste     backen      trocken     Zucker      gestern 
    Abend       Ofen        Kasten      backen      trocken 
    backen     Abend        aufeinander Ofen        gestern 
    Abend       Ofen        sechste     P"adagogik  Kasten 
    sechste     trocken     Abend       gestern     Abend 
    Ofen        P"adagogik  aufeinander interessant Kasten  
    P"adagogik  gestern     Abend       Zucker      interessant 
    P"adagogik  P"adagogik  P"adagogik  P"adagogik  Kasten
    aufeinander P"adagogik  P"adagogik  P"adagogik  trocken 
    P"adagogik  P"adagogik  P"adagogik  P"adagogik  P"adagogik 
    P"adagogik  interessant Zucker      gestern     trocken
    \end{document}
      
  7. 結果
    latex+article.cls+german.sty(PNG)
    platex+jarticle.cls+german.sty(PNG)
    latex+article.cls+ngerman.sty(PNG)
    platex+jarticle.cls+ngerman.sty(PNG)
  8. german.styを使うと、 ngerman.sty に比べて右側がかなり不揃いになります。
    これを避けるには、 ckのハイフネーションをba"cken のように指定してやると、bak-kenと分綴され、 多少は改善されます。
    しかし、今度は、platex でコンパイルすると、 行替えの時にハイフン抜けが起こってしまいます (troc, bac, Zucという箇所が、合計 5 箇所あります)。

    latex+article.cls+german.sty+"ck(PNG)
    platex+jarticle.cls+german.sty+"ck(PNG)

    "ck platex の組み合わせは、 要注意ということになりました。
  9. ちょっとした問題
    いずれの結果を見ても、明らかにPädagogik のハイフネーションを何とかしたい、と考えるでしょう。そこで、例えば、
    \hyphenation{P\"ad-a-go-gik}と指定してやって、 思った結果になるといいのですが、...
    ! Improper \hyphenation will be flushed.
    \grmn@OTumlaut ->\protect
                              \newumlaut
    \hyphenation{P"a
                    d-a-go-gik}
    ?
    
    とか、
    \hyphenation{P"a
                    d-a-go-gik}
    Hyphenation exceptions must contain only letters
    and hyphens. But continue; I'll forgive and forget.
    
    とか、
    \hyphenation{P"a
                    d-a-go-gik}
    Letters in \hyphenation words must have \lccode>0.
    Proceed; I'll ignore the character I just read.
    
    とか、
    \hyphenation{P"a
                    d-a-go-gik}
    This error message was generated by an \errmessage
    command, so I can't give any explicit help.
    Pretend that you're Hercule Poirot: Examine all clues,
    and deduce the truth by order and method.
    
    とか、
    \hyphenation{P"a
                    d-a-go-gik}
    You've closed more groups than you opened.
    Such booboos are generally harmless, so keep going.
    

    などなど、言われ放題になってしまいます(ここまで言われたくない)。
    解決策というのは、いわゆるゴーストハイフンを使うことでしょうか。 つまり、P"adagogikの部分は、 初めからP"ad\-ago\-gikと書いておくことです。 そうすると、例えば、旧正書法でも、この程度の見栄えになります。

    latex+article.cls+german.sty+"ck+ghost-hyphen(PNG)

  このページの先頭へ戻る

  LaTeXのページのトップへ戻る