ダッシュ

 ダッシュ(ダーシ、倍角ダッシュ)――は好きですか?私は大好きです。めちゃめちゃ使います。ところがTeXにおいて倍角ダッシュは、使うフォントによって真ん中に隙間ができてしまいます。IPAもそうなのでデフォルトでの組版結果では隙間が空いています。
 それで全然気にならない人、あるいは繋がるフォントを使うことにした人には無用の試みなんですが、筆者はどうしても繋げたくてあがいてみました。

 さて一口にダッシュと言っても世の中には長い棒に見える記号がいくつもありますので、まずこれ――は何なのかきちんと確認しておきましょう。
 筆者はキーボードの0の隣、伸ばし棒(長音記号)のキーから長音記号を入れて、これを変換して出てくる「全角ダッシュ」を2つ並べたものを辞書登録して使っています。これをUniViewで見てみると、U+2015の「HORIZONTAL BAR」だと分かりました。

UniViewにおける各種ダッシュ

 ところが2015付近にはそれっぽい記号がたくさんあります。U+2010から順にHYPHEN、2011:NON-BREAKING HYPHEN、2012:FIGURE DASH、2013:EN DASH、2014:EM DASHとなっています。
 これらをコピーして2つ並べてタイプセットすると、結果はこうなりました。

縦組みのダッシュたち

 どれもガタガタですね。少なくともTeXにおいては和文のダッシュとみなされるのはホリゾンタルバーだけのようなので、ここではこの記号――を使うものとします。青空文庫の定義とも合致しています。
 (Wikipediaのダッシュの項などを参照すると、変換した時に出る全角のダッシュは本来ホリゾンタルバーではなくエムダッシュであるべきらしいんですが……TeXがそうなっていないのでここでも正しい定義は無視します)

 これの間を繋げるには、基本的には以下のTeXマクロでコマンドを定義してそれを使います。

\def\――{―\kern-.5zw―\kern-.5zw―}

 こうした上で文中の全てのダッシュの頭にバックスラッシュをつけてやります。いわば\――というコマンドによって、繋がったダッシュを出力してやるという方式です。
 このマクロでどうして間が繋がるのかというと、これはつまり「―を1つ出力したらその上に半文字分上にずり上げた―を重ねて出力、もうひとつ―を半文字分重ねて出力」という命令だからです。kernというのは「カーニング」という言葉があるように、「字詰め」のことです。図解するとこうなります。

カーニングの図解

 これで繋がるようにはなったんですが、いかんせん全部のダッシュを\――としなければなりません。

 やりたくない。

 だってかっこ悪いよ……原稿にぼこすか出てくる上、だいたいは感情が高まって言葉を途切らせたりタメを入れる時に使うので、いちいちバックスラッシュが入っているとなんとなく水を差されたように感じるんです。
 そんなことをぶつぶつ言いながらじたばたやっていたらZRさんがパッケージを書いて下さいました。契機はいかにダッシュを繋げるかということだったんです。(厳密にはGeneral Punctuationカテゴリの扱いをどうするかということ)

 というわけでzrjapunct1読み込み後は特に何もしなくても大丈夫です!普通に――と書けばそのまま繋がって出力されます!夢のようだ!本当にありがとうございます。

欧文ダッシュを打つ方法

 上記の方法は和文ダッシュを打つ方法なんですが、TeXには元々欧文のためのダッシュを入れる方法があります。そっちも探ってみましょう。

 教科書やチートシートを見てみると、-(半角ハイフン)を2つ並べて書くとエヌダッシュ、3つ書くとエムダッシュになるとあります。前者がnの横幅と同じ長さ、後者がmと同じ長さなのでこう呼ぶそうです。
 試しにこれを縦書きで組んでみましょう。

ハイフン2つと3つのダッシュ

 おお、エムダッシュの方がどうやら全角1文字分っぽいですね。ホリゾンタルバーよりも線が細くてシュッとした感じです。
 倍角ダッシュにしたいので、ハイフンを6つ続けて入れてみます。(もちろん欧文に対しては倍角にせずにそのままエヌダッシュかエムダッシュで使えます)

ハイフン6つの間が繋がったダッシュ

 やった!繋がった!けどちょっとバランスが変です。左に寄っていますね。

 これは前項で説明したベースラインのせいです。半角のカッコやダッシュは欧文のベースラインに合った位置に配置されていて、かつそのベースラインは全角文字の正方形の左辺に合わせてあるのでどうしても左にズレてしまうんでした。
 そして最後でちらっと触れたように、これを調節する方法は実はあります。\tbaselineshiftです。1
 文字通りベースラインのシフト(移動)量を決めるパラメータ(変数)で、値を設定してやることで和文に対する欧文の相対的な位置を決めることができます。
 パラメータとは何ぞやということは次項でやりますので、とりあえず位置を変えられるんだということだけ覚えておいてください。

 実際にやってみましょう。バランスを見るために山括弧なども入れて、ベースラインシフトを0にして組んでみます。

\tbaselineshift = 0pt%
\verb|<|あたしの車をtouf-toufだといったね。\verb|>|
手籠を持った馬耳塞《マルセイユ》人------それぞれクッションのバネの滑かな動揺につれて、
欧文和文のベースラインが中央で一致

 思いっきり右にずれました。0=移動しないということなので、和文のベースラインである中央に欧文のベースラインであるアルファベットの底が来ています。
 何も指定していない時のデフォルトが具体的にどういう値になっているのかは分からないんですが、とにかく少し左にズレていたデフォルトと、大幅に右にズレる0ポイントの間で調節を行います。数値を増やすほど左に行きます。こんな感じになりました。

2~3.25ptのシフト

 うーんどれがいいだろう……実際に使いそうなのは2.5~3ポイントあたりでしょうか。
 ベースラインをずらしているので、当然ですがすべての欧文文字が一緒についてきます。そんなに半角英数を入れていない場合は目立たないかもしれませんが、十蘭のようにちょいちょいアルファベットが入ってくる文体の人は、和文に対する欧文文字のバランスも見ながら最適な数値を選んでください。

 この指定は上の例のように本文に書き込むと効力を発揮しますが、同じようにプリアンブルに書き込んでも効き目がありません。プリアンブルには次の形にしたものをコピペしてください。2

\AtBeginDocument{\tbaselineshift = 2.75pt}

 文字通り、\begin{document}のところで第一引数を展開せよというマクロです。
 これでハイフン6つでダッシュが出力できるようになりました。普段ダッシュを多用しない人などは、もしかしたらキーボード直で打てるこっちの方法が楽かもしれません。



(2018/1/27)以下レガシーな内容です

ハイフンさえ打ちたくない人

  • ハイフン6つではなくどうしても普段書いてるホリゾンタルバーのまま繋げて出力したい人
  • 欧文扱いしたい字が多く、[prefernoncjk]モードにしている人

 は、ホリゾンタルバーを欧文扱いにして、原稿中にベタ書きで出力させるこの方法を取ります。

 なおGeneral Punctuationブロックは、‼・⁉・⁈・⁇という一文字の二重感嘆符・疑問符記号が出てこない時にしか欧文扱いできません。原稿にこれらの記号が入ったままprefernoncjkで走らせようとするとエラーになります。
 rensujiでも記号そのものでもいいよとか言ってすいません……ダッシュを欧文扱いしたいなら二重感嘆符記号直書きは諦めてください。逆も然りで、記号を直書きしたいならダッシュの直書きは諦めてください。orz

(17/11/24追記)
 ZRさんにご指摘頂きました。基本的にこの方法はイバラの道だと思ってください。「General Punctuation」全体が欧文扱いになっているせいで起こる不具合がたくさんあります。‼・⁉・⁈・⁇という一文字の二重感嘆符・疑問符記号が原稿に入っているとエラーが出ますし、何より三点リーダーが欧文扱いでベースライン上(左端)に組まれてしまうという恐ろしい副作用が起こります。

行の左端に寄った三点リーダー

 回避する手は一応、本当に一応あります。普通の三点リーダー(U+2026「HORIZONTAL ELLIPSIS」)を、全てタテの三点リーダー(U+FE19「PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS」)に置き換えることです。つまりこういうことです。

タテ向きを2つ並べた三点リーダー

 かっこ悪い。・゚・(ノД`)・゚・。これならコマンド使ったほうがマシだ(´;ω;`)
 小説を始めとした散文を書いていて、三点リーダーの見栄えよりあるかなきかのダッシュの見栄えを優先したいと思う人はごく稀でしょう。ここは素直にコマンドかハイフンを使うのが得策かと思います。

 それでもどうしても欧文扱いしたい人のプリアンブルは以下のようになります。

\usepackage[utf8]{inputenc}
\usepackage[prefercjkvar]{pxcjkcat}  %基本的に和文扱い
\cjkcategory{latn1,sym04}{noncjk}  %Latin-1 SupplementとGeneral Punctuationを欧文扱い
%あるいは
\usepackage[utf8]{inputenc}
\usepackage[prefernoncjk]{pxcjkcat}  %基本的に欧文扱い
\cjkcategory{sym18,sym19}{cjk}  %☆や■を和文扱い
%どちらの場合もGeneral Punctuationは欧文扱いになる

 あとの手順は上と同じです。バランスを見ながら\AtBeginDocument{\tbaselineshift = 何pt}に最適な値をセットします。

参考


  1. ちなみに今は縦書きなのでtbaselineshiftを使いますが、横書きの時は\ybaselineshiftになります。 [return]
  2. 例によってどうしてプリアンブルだと効かないのかは分かってないです。 [return]
comments powered by Disqus