german.sty と ngerman.sty (in VineLinux3.1)のハイフネーションを検証(分綴調査 その4)
-
VineLinux3.1 の tetex-2.0.2-0vl14.i386.rpm には、
/usr/share/texmf/tex/generic/german 以下に、
german.sty と ngerman.sty
が入っています。
前者が、
旧正書法用のスタイルファイル、後者が新正書法用のスタイルファイルで、
CTAN で(2005年7月)確認したところ、 それぞれ最新のものです。
(どちらも、v2.5e 1998-07-08)
今回は、本当に2つのスタイルファイルでハイフネーションが違うのかどうか、
検証してみました。
新・旧の正書法におけるおよその違いは、
こちらを参照して下さい。
なお、今回の検証に当っては、latex, platex ともに、
ドイツ語のハイフネーションを組み込んだ latex.fmt, platex.fmt
を使用しています。組み込みの手順は、
Babel+LaTeXの場合,
Babel+ptexの場合 を参照してください。
-
まずは、\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 |
-
\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
-
結果を整理すると、
(1) platex + jarticle.cls と latex + article.cls
では、ハイフネーションに差がでなかった。
(2) german.sty と ngerman.sty の違いは、
以下の表を参照。
(a) Abend, Ofenのような短い単語は、LaTeXでは分けないで、
単語間のスペース調節でのりきろうとしている。
(b) ckの扱いは、
german.sty と ngerman.sty
で明らかに異なる。
ただし、german.styでは、ckを
k- k と分けるためには、"ck
と陽にソースファイルで指定しなければならない。
ngerman.styでは、
ckの前で分割している。(tro-cken, ba-cken)
(c) stの扱いは、
german.sty と ngerman.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 |
-
コメント
これだけで german.sty, ngerman.styの違いを確定できませんが、
およその傾向は見てとれます。
TeXのハイフネーションは、文字毎の情報ではなく、
文字列の並びから予測して分割しているので、はずれる場合には、
積極的に
\hyphenation{ }を使って指定する必要があります。
例えば、ソースファイル内に、
\hyphenation{in-te-res-sant}と書いておけば、
その通りにハイフネーションが行われます。
また、別ファイルにして(例えば、myhyphen.tex)、
プリアンブルで\input{myhyphen}とすることが考えられます。
-
いじわるテキストを用意しました。たいしたものではないのですが、
以下のようなものです。
\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}
-
結果
latex+article.cls+german.sty(PNG)
platex+jarticle.cls+german.sty(PNG)
latex+article.cls+ngerman.sty(PNG)
platex+jarticle.cls+ngerman.sty(PNG)
-
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 の組み合わせは、
要注意ということになりました。
-
ちょっとした問題
いずれの結果を見ても、明らかに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)
|