PostScript 言語で作成したプログラムを魔法陣の画像に変換する Mysticle と、PostScript を実行できる Ghostscript (Windows 版の gswin64c) の ps2pdf を用いて、Mysticle の examples フォルダの quicksort.ps のクイックソートの関数のプログラムを魔法陣の画像に変換する例を紹介します。

※ gs10.05.1 を使用します。
※ 2025 年 05 月 24 日に GitHub で公開されている mystical_ps, dmmlib リポジトリの複製を使用しています。
前回の記事
前回は、Mysticle の公式 GitHub のイントロのページに書かれている用例を、実際に行って、プログラムから魔法陣の画像をファイル出力する手順を紹介しました。
まだ Mysticle を実行する環境を構築していない場合も、以下の記事を参照してください。
今回は、前回の公式イントロで紹介されていた first.ps の内容を参考にして、クイックソートの関数を魔法陣の画像に変換します。
関数自体を貼り付けた ps から魔法陣の画像を作成
公式イントロ「mystical_ps/docs/intro.md at main · denismm/mystical_ps」で紹介されていた first.ps をベースにして、クイックソートの関数を魔法陣の画像に変換するように変更しました。
10 ~ 40 行目の { と } で囲まれている部分は、 mystical_ps/examples/quicksort.ps に書かれている quick 関数を定義している { と } までを貼り付けました。
%!PS
(dmmlib/base.ps) run
(mystical.ps) run
(dmmsigils.ps) run
72 dup scale % make the unit 1 inch
4.25 5.5 translate % move to the center of an 8.5x11 page
4 dup scale % make the unit 4 inches
{
2 dict begin
/domain exch def
/swap {
/a exch def /b exch def
domain a get domain b get
domain a 3 -1 roll put
domain b 3 -1 roll put
} def
domain length 2 ge {
% find pivot
/hi domain length 1 sub def
/pivot domain hi get def
% redistribute
/fulcrum 0 def
0 1 hi 1 sub { /i exch def
domain i get pivot le {
i fulcrum swap
/fulcrum fulcrum 1 add def
} if
} for
fulcrum hi swap
fulcrum 1 gt {
domain 0 fulcrum getinterval quicksort
} if
hi fulcrum sub 2 ge {
domain fulcrum 1 add hi fulcrum sub getinterval quicksort
} if
} if
end
} mystical
showpage
コマンドプロンプトで、前回と同様に、ps2pdf に、先ほど作成した example_quicksort1.ps を渡して、以下のコマンドを実行します。
ps2pdf -dNOSAFER example_quicksort1.ps
何もメッセージが表示されなければ問題ありません。
G:\Dev\Mistical\mystical_ps>ps2pdf -dNOSAFER example_quicksort1.ps
G:\Dev\Mistical\mystical_ps>
コマンドプロンプトのカレントディレクトリをエクスプローラで開くと、 ps ファイル名と同じ example_quicksort1.pdf ファイルが作成されていて、開くと魔法陣の画像が表示されました。

関数の名前を貼り付けた ps から魔法陣の画像を作成
6 行目では、 examples フォルダの quicksoft.ps ファイルを run で実行して、定義されている quicksort 関数を読み込みます。
12 – 16 行目では、読み込まれた quicksort 関数が、現在の辞書 (currentdict) に登録されていることと、登録されている quicksort の型を確認しています。
※ == によって、結果が標準出力されます。
※これらの確認は、画像の生成に特に必要ではありません。
19 行目では、読み込んだ quicksort 関数を定義した配列を、現在の辞書から取り出して mystical 関数に渡しています。
※ /quicksort とすることで、リテラルネームとして扱います。 quicksort と記述すると Executable Name (実行形式の名前?)として変数や関数として扱われます。
mystical 関数で魔法陣の画像を内部で描画した後、 showpage で1ページの描画内容を確定します。
%!PS
(dmmlib/base.ps) run
(mystical.ps) run
(dmmsigils.ps) run
(examples/quicksort.ps) run
72 dup scale % make the unit 1 inch
4.25 5.5 translate % move to the center of an 8.5x11 page
4 dup scale % make the unit 4 inches
% 現在の辞書に関数が登録されていることを確認
currentdict /quicksort known ==
% quicksort の型を確認
currentdict /quicksort get type ==
% quicksort の {...} の定義を取得して mystical に渡します。
currentdict /quicksort get mystical
showpage
コマンドプロンプトで、前回と同様に、ps2pdf に、先ほど作成した example_quicksort2.ps を渡して、以下のコマンドを実行します。
現在の辞書 (currentdict) に quicksoft が登録されていることを表す true と、quicksort の型の arraytype が標準出力で確認できました。
G:\Dev\Mistical\mystical_ps>ps2pdf -dNOSAFER example_quicksort2.ps
true
arraytype
G:\Dev\Mistical\mystical_ps>
コマンドプロンプトのカレントディレクトリをエクスプローラで開くと、 ps ファイル名と同じ example_quicksort2.pdf ファイルが作成されていて、開くと魔法陣の画像が表示されました。

作成した PDF の魔法陣のベクター画像の編集
作成した PDF の魔方陣のベクター画像の編集については以下の記事を参照してください。
まとめ
今回は、PostScript 言語で作成したプログラムを魔法陣の画像に変換する Mysticle と、PostScript を実行できる Ghostscript (Windows 版の gswin64c) の ps2pdf を用いて、Mysticle の examples フォルダの quicksort.ps のクイックソートの関数のプログラムを魔法陣の画像に変換する例を紹介しました。
参照サイト Thank You!
- denismm/mystical_ps
- mystical_ps/INSTALL.md at main · denismm/mystical_ps
- mystical_ps/docs/intro.md at main · denismm/mystical_ps
- denismm/dmmlib: Library of convenient postscript functions
- Git
- Git – git-clone Documentation
- Git – git-status Documentation
- Ghostscript
- Ghostscript/使い方 – TeX Wiki
- USBメモリ活用講座【dviout for Windowsポータブル化】
- 魔法陣のようなプログラミング言語「Mystical」 – GIGAZINE
記事一覧 → Compota-Soft-Press
コメント