5-2. Solstitium

目次

概説

 Solstitiumはプレーンテキスト形式 (txt) の文書を小説や脚本スタイルの縦書きPDFに変換するWindows用フリーウェアです。
 OSのフォントレンダリング機能にはまったく依存していませんので、Windows 10でちょくちょく起こっている縦書きに関する不具合(「ー」が縦にならなかったり拗音や句読点の位置がおかしかったりなど)の影響を受けません。

主な機能

Download

 Solstitium(以下本ソフトウェア)を使用したことによって何らかの問題が発生したとしても作者はその責を負いません。本ソフトウェアを利用される際には予めご了承ください。

Solstitium Version 1.100R5(2020/11/12版)
単体版 Zip版 (229 KB)
フォント同梱版 Zip版 (5.42 MB) 7-Zip版 (4.12 MB)

 Zip版も7-Zip版もアーカイヴの中身は同じです。

簡単な使用法1(GUI編)

「コマンドプロンプト」や「バッチ」に馴染みのない方は、同梱されているHelperGUIをご利用ください。HelperGUI.exeを起動させるとダイアログが出てきますので、そこへ変換したいテキストファイルをドラッグ(または「入力テキスト」欄右横の「選択」ボタンを押してテキストファイルを選択)して右下の「PDF変換開始」ボタンを押せばPDFが出力されます。

 テキストファイルはUTF-8形式で保存されている必要があります。シフトJISには対応していません。

 ダイアログ内の各設定項目に関しましては、コマンドプロンプト編の「オプション一覧」にて値の意味を解説しています。また値を直接入力する項目につきましては、空欄にしますとオプション一覧に書いてある既定値が使われるようになっています。

 ダイアログに入力されている値はソフト終了時にiniファイルへと出力されます。レジストリは使用していません。

簡単な使用法2(バッチ編)

 Zipまたは7-zipを解凍しますといくつかbatファイルが出てきます。そのうちの1つへ、PDFに変換したいテキストファイルをドラッグすると自動的に変換が行われてPDFが出力されます。
 たとえば 42x34@11pt.bat へテキストファイルをドラッグすると、42文字×34行・11ポイントの縦書きPDFが出力されます。

 各batファイルの設定値は次の通りです。

42x34@10.5pt.bat42文字×34行、文字の大きさは10.5ポイント。
42x34@11pt.bat42文字×34行、文字の大きさは11ポイント。
42x34@12pt.bat42文字×34行、文字の大きさは12ポイント。
40x34@10.5pt.bat40文字×34行、文字の大きさは10.5ポイント。
40x34@11pt.bat40文字×34行、文字の大きさは11ポイント。
40x34@12pt.bat40文字×34行、文字の大きさは12ポイント。
20x40@12pt.bat20文字×40行(シナリオ様式)、文字の大きさは12ポイント、ト書きの字下げは2文字分。

 ドラッグするテキストファイルはUTF-8形式で保存されている必要があります。シフトJISには対応していません。

詳細な使用法(コマンドプロンプト編)

 Solstitiumの本体は solstitium.exe というコンソールアプリケーションです。使い方は次の通りです([]は省略可能を表す)。

solstitium.exe 変換するテキストファイル [オプション1の名前 オプション1の引数 [オプション2の名前 オプション2の引数 ... ]]

 テキストファイルはUTF-8形式で保存されている必要があります。シフトJISには対応していません。

 テキストファイルの指定位置は先頭でなくとも構いません。オプション名とその引数との間にさえ割り込まなければ、「オプション1 オプション1の引数 変換するテキストファイル オプション2 オプション2の引数」というような順番でも大丈夫です。

 オプションには次のようなものがあります。

オプション一覧
-fs 本文のフォントサイズを指定します。単位はポイントで、既定値は11です。
使用例:-fs 10.5(10.5ポイントを指定)
-ls 行間のポイント数を指定します。既定値は10です。
-cols 一行あたりの文字数を指定します。既定値は42です。
-rows PDF一頁あたりの行数を指定します。既定値は34です。
-nombrept ノンブルのサイズを指定します。単位はポイントで、既定値は11です。
-nombrex ノンブルのx座標を指定します。既定値は紙の中央です。
-nombrey ノンブルのy座標を指定します。既定値は本文下部の余白の真ん中です。ちなみにPDFの座標原点は左下ですので、ここでの指定値が大きくなるほどノンブルは上へ移動してゆきます。
-nombrel ノンブルの左側に表示するものを指定します。既定では "― " が指定されています。
-nombrer ノンブルの右側に表示するものを指定します。既定では " ―" が指定されています。
-initnombre ノンブルの初期値を指定します。既定値は1です。ノンブルは1以上になるまで表示されませんので、初期値を負数にすることにより最初のほうだけノンブルが表示されぬようにすることも出来ます。本文の前に前書きやあらすじが付いている場合に有用です。
使用例:-initnombre -1(-1 → 0 → 1と推移するので最初の2頁はノンブルが表示されない)
-shiftx 本文全体を水平方向にずらしたい時に使います。負数を指定すると左方向へずれ、正数を指定すると右方向へずれます。
-shifty 本文全体を垂直方向にずらしたい時に使います。負数を指定すると下方向へずれ、正数を指定すると上方向へずれます(PDFの座標原点は左下です)。
-f

サブセット化してPDFに埋め込むフォントのパスを指定します。省略時は同じフォルダ内に霧明朝 Lightがあればそれを使い、なければ %SystemRoot%\Fonts ディレクトリ内にあるMS 明朝を使います。フォントがシステムにインストールされているか否かは問いません。
ttc形式(一つのファイル中に複数のフォントが同居している形式)のフォントを使う場合、ファイル名の後に ":枝番号" を付けて、ttc中の何番目(ベースは0)のフォントを使うのかを指定する必要があります。
使用例:-f C:\Windows\Fonts\meiryo.ttc:0(meiryo.ttc内の0番目である「メイリオ」を指定)

Version 1.100以降:インストール済みのフォントを使う場合には、フォント名による指定もできるようになりました。この場合は上記のパス指定のケースと区別するために、フォント名の前に : (半角のコロン)を付けて「-f :游明朝」のように指定します。
「MS 明朝」のようにフォント名の途中に空白文字があるフォントを指定する時には、-f ":MS 明朝" のようにコロンも込みで "" で括ります。
なおフォント名によってフォントを指定する際には誤字にご注意ください。Windowsのフォントマッパーは指定されたフォントがなかった時にも「なかった」と返事せず、代わりに自身が似ていると判断したフォントのデータを返してくるため、意図せぬフォントが使われてしまう可能性があります。

-foldingtype 行末の禁則処理の仕方を指定します。
  • 値が 1 の場合、句読点を「ぶら下げ」にします。閉じ括弧類は常に「追い出し」にします。
  • 値を 2 にすると句読点に加えて閉じ括弧類もぶら下げます。
  • 3 にすると句読点はぶら下げて、閉じ括弧類は追い込めそうなら「追い込み」にします。追い込むだけの隙間(行内の句読点や括弧を詰めることで捻出する)が確保できそうにない場合は、ぶら下げます。
  • 4 にすると句読点はぶら下げて、閉じ括弧類は追い込めそうなら追い込みます。追い込むだけの隙間が確保できそうにない場合は追い出します。
既定値は4です。参考・foldingtypeの値による違い (PDF)
-scenario 1以上の値を指定するとシナリオ様式の縦書きPDFを出力します。この場合テキスト中の全角空白で始まる行はト書きと見なされ、この-scenarioオプションで指定された数値分だけ字下げ処理が行われます。
全角の空白以外で始まる行は台詞ないし柱と見なされ、2行目以降は自動的に1文字分下げて表示されます。
使用例:-scenario 3(シナリオモードオン。ト書きの字下げは空白3文字分)

 数字を入力するもののうち、-initnombre-foldingtype-scenario以外は小数の指定も可能です。

ルビや縦中横の記法

ルビ・傍点・圏点

 ルビについては次の記法に対応しています。

 《》をルビ指定記号としてではなく本来の括弧として使いたい時は、《の直前に|(半角全角どちらでも可)を置きます。例えば「あ|《い》う」のように書くと、「あ《い》う」と表示されます。

 傍点・圏点はルビの仕組みを転用することで表現できます。

縦中横

 縦中横は次の条件に当てはまると自動的に処理されます。

 これらを自動的に回転させたくない時は次のように書きます。

 《》間に何もない場合は、先行する文字列に対して縦中横を禁止する指示だと解釈されます。従ってこの例では !? は縦中横の処理が行われず、横倒しの状態で表示されます。

マニアックな使用法

 Solstitiumは次の二層から成り立っています。

 プリプロセッサはUTF-8テキスト中に最初からコマンド文字が埋め込まれていても気にせず素通しします。そのため前項に記した表記法に頼らず、テキスト中にあらかじめコマンド文字を埋め込んでおくことでルビや縦中横などを指示することも可能です。

 Version 1.000現在、PDF変換エンジンが理解できるコマンド文字には次のものがあります。

ルビ・傍点・圏点

 あまり知られていませんが、Unicodeにはルビ用の文字コードというものが定義されています。Solstitiumはこの仕組みを使ってルビを実現しています。

  • U+FFF9()――ルビの対象となる文字列開始。
  • U+FFFA()――ルビ開始。
  • U+FFFB()――ルビ終了。

 例えば「漢字」という文字列に「かんじ」とルビを振りたい場合、「(U+FFF9)漢字(U+FFFA)かんじ(U+FFFB)」という並びにします。
 FFF9~FFFA間やFFFA~FFFB間には縦中横を含めることも出来ます。しかしその逆に、縦中横が指示されている区間にルビを含めることは出来ません。この場合FFF9~FFFBはすべて無視されます。

 ルビを振る対象文字列は暗黙に「途中での折返し禁止」となります。そのため一行あたりの文字数(-colsオプション)より長い文字列をFFF9~FFFAで囲うとPDFへの変換処理が続行不可能となり、エラーが返ってきますのでご注意ください。

縦中横・文字の強制右回転

 文字を回転させるための文字コードというものはUnicodeにも定義されていませんが、「プログラム内部で自由に使って良いコードポイント」というものがU+FDD0~U+FDEFに定義されています。このうち先頭の3つを使い、Solstitiumでは縦中横などを実現しています。

  • U+FDD1(﷑)――縦中横開始。
  • U+FDD2(﷒)――ここからグリフを90度右回転させよという指示(多くのTrueTypeフォントや源ノ明朝・源ノ角ゴシックなどのように「縦書き用の90度右回転させた欧文グリフ」を内部に持っていないフォント用に実装したもの)。
  • U+FDD0(﷐)――上記コマンド終了。

 FDD1~FDD0とFDD2~FDD0とは排他的で、入れ子にすることは出来ません。

ブロックインデント

 -scenarioオプションが指定されている時に限り、Tab (U+0009) 文字から始まる行(ここで言う「行」とは改行文字[CR、LF、CR+LFのどれか]によって区切られた文字列のこと)は、折返し以降も含めて-scenarioオプションで指定された値の分だけ字下げ処理が行われます。
 一方Tab以外の文字から始まる行は、折返し以降は一段下げて続きが表示されます。

ブロックインデントのイメージをブラウザ上で再現するとこのような具合です。ここは通常の行です。描画可能な範囲の端まで来て折返しが発生すると一段下げて続きの文字が描画されます。

一方TAB文字で始まる行は折返し以降も含めてブロック全体がインデント、即ち字下げ処理されます。何文字分インデントするかは、-scenarioオプションによって指定します(この例では-scenario 3相当)。

ここは再び通常の行です。

 Tab文字が特別扱いされるのは「-scenarioオプションが指定されていて」「なおかつその値が0でない状況で」「Tabが行頭に現れる」という3つの条件を満たした時のみです。それ以外のTab文字は通常の文字のように、フォント内にTAB文字用のグリフがあればそれが、なければ.notdefグリフ(いわゆる豆腐)が表示されます。

補註:Version 1.100現在、行頭に全角空白 (U+3000) がある場合もTAB文字同様の扱いをされるようになっています。これは試験的に実装したもので、今後正式な仕様とするか、あるいはやめてしまうか今のところまだ決めていません。
 なおこの影響で「全角の空白を並べて【完】や【つづく】などを下寄せする」ことが出来なくなっています。下寄せしたい場合は、行頭に半角の空白 (U+0020) をお使いください。

改頁

 Form feed (FF, U+000C) が現れると改頁処理が行われ、U+000Cに続く文字以降は次の頁に送られます。
 ただテキストエディタで編集する際、行の途中にFFが埋まっている状態ですと違和感があるでしょうから、特例としてU+000Cの直後に改行文字が続いている場合だけは、その改行文字の次の文字以降を次の頁に送るようにしてあります。

  • 「あいうえお(U+000C)かきくけこ」→「かきくけこ」以降が次の頁に送られます。
  • 「あいうえお(U+000C)(CR)(LF)かきくけこ」→これも「かきくけこ」以降が次の頁に送られます。U+000C直後の改行文字は特例で次の頁に送られません。
  • 「あいうえお(U+000C)(CR)(LF)(CR)(LF)かきくけこ」→「(CR)(LF)かきくけこ」以降が次の頁に送られます。従ってこの場合、次の頁はいきなり改行から始まることになります。

 改頁が行われる位置を正規表現で表しますと「/\f\r?\n?/ の直後」です。

※FF (U+000C) の入力方法はお扱いのエディタによって異なります。例えば秀丸なら「その他(O)→制御コード入力(I)→[12 CL Control+L]を選択」で入力できます。

改訂履歴

Valid HTML5