Ghostscript 縦書きサポート - OpenType(CFF/CID)
OpenType(CFF)フォント専用です。TrueType(TT)フォントは考慮していません。 「(あいうえお) show」で縦書き表示ができます。動作の仕組みは以下の通りです。-
OpenType(CFF)フォントをCIDフォントとして利用
HaranoAjiフォントの利用を想定 -
Font定義でCDevProcを利用
PostsSript LANGUAGE REFERENCE third edition/5.9.2 Changing Glyph Metrics(p.350, p.374)参照
HaranoAjiMincho-Light-UniJIS-UTF8-V
sample image
PostScriptコードv-sample.ps のサンプル出力です。 青が縦書き、 橙が横書きです。
-
青・橙のドットは文字列を描画する際のポイント・描画後のポイント
「(あいうえお) show」の開始と終了の描画ポイント(currentpoint) - 破線は上記の開始・終了のポイントを結ぶ線分
設定
Ghostscript/Windows - TeX Wik> Ghostscript/Windows - TeX Wiki やtexlive に含まれる haranoaji-tlpost.pl などにある日本語 OpenType fontを利用する設定を行います。- CIDFont以下にフォントファイルの(シンボリック)リンクを作成
- Font以下に所定の内容のファイルを作成
*-V系のファイルにはCDevProcを利用する記述を追加
例
$ ls -1dF /usr/share/ghostscript/Resource/{CID,}Font
/usr/share/ghostscript/Resource/CIDFont/
/usr/share/ghostscript/Resource/Font/
$ cd /usr/share/ghostscript/Resource/CIDFont/
$ ln -s /usr/local/texlive/2025/texmf-dist/fonts/opentype/public/haranoaji/HaranoAjiMincho-Light.otf .
$ cd /usr/share/ghostscript/Resource/Font/
$ vi HaranoAjiMincho-Light-UniJIS-UTF8-H
︙
$ cat HaranoAjiMincho-Light-UniJIS-UTF8-H
%!PS-Adobe-3.0 Resource-Font
%%DocumentNeededResources: UniJIS-UTF8-H (CMap)
%%IncludeResource: UniJIS-UTF8-H (CMap)
%%BeginResource: Font (HaranoAjiMincho-Light-UniJIS-UTF8-H)
(HaranoAjiMincho-Light-UniJIS-UTF8-H)
(UniJIS-UTF8-H) /CMap findresource
[(HaranoAjiMincho-Light) /CIDFont findresource]
composefont
pop
%%EndResource
%%EOF
$ vi HaranoAjiMincho-Light-UniJIS-UTF8-V
︙
$ cat HaranoAjiMincho-Light-UniJIS-UTF8-V
%!PS-Adobe-3.0 Resource-Font
%%DocumentNeededResources: UniJIS-UTF8-V (CMap)
%%IncludeResource: UniJIS-UTF8-V (CMap)
%%BeginResource: Font (HaranoAjiMincho-Light-UniJIS-UTF8-V)
(HaranoAjiMincho-Light) /CIDFont findresource
dup length dict copy begin
[/FID /UIDBase /UniqueID] { % /FID inserted by definefont. PLRM p.325
currentdict exch undef
} forall
currentdict /XUID known { % redefine XUID
/XUID [XUID aload length 3 gt { 1 add } { 0 } ifelse] def
} if
% new fontname
%/CIDFontName (HaranoAjiMincho-Light-vert) cvn def
%/FontName CIDFontName def
% <w0x> <w0y> <llx> <lly> <urx> <ury> <w1x> <w1y> <vx> <vy> setcachedevice2 -
/CDevProc {
5 { pop } repeat % <w1x> <w1y> <vx> <vy> CID
0 % <w1x>
1000 neg % <w1y>
7 index dup 0 le {
pop 1000
} if 2 div % <vx>
880 % <vy>
} bind def
CIDFontName currentdict end
%definefont
/CIDFont defineresource
%
(HaranoAjiMincho-Light-UniJIS-UTF8-V)
(UniJIS-UTF8-V) /CMap findresource
3 -1 roll
[exch]
composefont
pop
%%EndResource
%%EOF
$ /usr/bin/gs v-sample.ps -c quit # --- これで上のsample imageが表示される
GPL Ghostscript 9.54.0 (2021-03-30)
Copyright (C) 2021 Artifex Software, Inc. All rights reserved.
This software is supplied under the GNU AGPLv3 and comes with NO WARRANTY:
see the file COPYING for details.
Loading HaranoAjiMincho-Light-UniJIS-UTF8-V font from /usr/share/ghostscript/Resource/Font/HaranoAjiMincho-Light-UniJIS-UTF8-V... 20179140 16240661 4035824 2721991 1 done.
Loading HaranoAjiMincho-Light-UniJIS-UTF8-H font from /usr/share/ghostscript/Resource/Font/HaranoAjiMincho-Light-UniJIS-UTF8-H... 20179140 16240720 4056024 2734380 1 done.
>>showpage, press <return> to continue<<
Enter
$ cat simple.ps # --- シンプルな縦書きサンプル
%!PS-Adobe-3.0
0.8 setgray
500 700 moveto
0 -500 rlineto
stroke
%
0 setgray
/HaranoAjiMincho-Light-UniJIS-UTF8-V findfont 100 scalefont setfont
500 700 moveto
(あいうえお)show
showpage
$ /usr/bin/gs -q simple.ps -c quit
>>showpage, press <return> to continue<<
Enter
$
縦書きフォント定義ファイルのマジックナンバー
ファイル*-V内の1000, 880は以下の情報から得ています。- 1000
- フォントのヘッダのunitsPerEm
- 880
- フォントのOS/2属性sTypoAscender
$ cd /usr/local/texlive/2025/texmf-dist/fonts/opentype/public $ python print-opentype-font haranoaji*/*.otf haranoaji-extra/HaranoAjiGothic-ExtraLight.otf HaranoAjiGothic-ExtraLight 1000 880 Adobe-Japan1-7 23060 haranoaji-extra/HaranoAjiGothic-Light.otf HaranoAjiGothic-Light 1000 880 Adobe-Japan1-7 23060 haranoaji-extra/HaranoAjiGothic-Normal.otf HaranoAjiGothic-Normal 1000 880 Adobe-Japan1-7 23060 haranoaji-extra/HaranoAjiMincho-ExtraLight.otf HaranoAjiMincho-ExtraLight 1000 880 Adobe-Japan1-7 23060 haranoaji-extra/HaranoAjiMincho-Heavy.otf HaranoAjiMincho-Heavy 1000 880 Adobe-Japan1-7 23060 haranoaji-extra/HaranoAjiMincho-Medium.otf HaranoAjiMincho-Medium 1000 880 Adobe-Japan1-7 23060 haranoaji-extra/HaranoAjiMincho-SemiBold.otf HaranoAjiMincho-SemiBold 1000 880 Adobe-Japan1-7 23060 haranoaji/HaranoAjiGothic-Bold.otf HaranoAjiGothic-Bold 1000 880 Adobe-Japan1-7 23060 haranoaji/HaranoAjiGothic-Heavy.otf HaranoAjiGothic-Heavy 1000 880 Adobe-Japan1-7 23060 haranoaji/HaranoAjiGothic-Medium.otf HaranoAjiGothic-Medium 1000 880 Adobe-Japan1-7 23060 haranoaji/HaranoAjiGothic-Regular.otf HaranoAjiGothic-Regular 1000 880 Adobe-Japan1-7 23060 haranoaji/HaranoAjiMincho-Bold.otf HaranoAjiMincho-Bold 1000 880 Adobe-Japan1-7 23060 haranoaji/HaranoAjiMincho-Light.otf HaranoAjiMincho-Light 1000 880 Adobe-Japan1-7 23060 haranoaji/HaranoAjiMincho-Regular.otf HaranoAjiMincho-Regular 1000 880 Adobe-Japan1-7 23060 $
無保証
このページの内容、サンプルファイルの内容およびコードは無保証です。謝辞
Ghostscriptを公開してくださっているArtifex Software, Inc. 関連情報を公開してくださっている方々に感謝いたします。 多くの情報を参考にさせていただきました。 特に以下のWeb Pageの情報を参考にしています。-
Ghostscript 9 で CID フォントを使った縦書きをやってみた | めもらんだむ
{日本語TrueType, 日本語CID} フォントの設定だけでは正しく動作していないことを知りました。
Ghostscript 9.x/10.xで日本語の縦書きが正しく動作するという情報もみつかるので、 以前は設定ミスかフォントの問題だろうと思っていました。 このページを拝見するまでは何が問題かを理解できていませんでした。
また、テスト用Postscriptファイル(v-sample.ps)はこのページからアイディアを得ています。 -
フォント(覚え書き) - you/uni/ps
現行のGhostscriptの縦書きサポートが完全ではないこと、CDevProcなどの情報を知りました。
このページにはTreuTypeフォントでの縦書きについて記載されているので TrueTypeフォントでの縦書きにも対応できるとのだと思います。 残念ながら私には理解できない部分がありTrueTypeはあきらめてOpenType(CFF)で試してみました。 -
Tips On PostScript
Ghostscript 5/6で日本語サポートを行うための情報が記載されています。 現在のGhostscriptは9/10なのでそのまま利用はできません。 しかし、日本語サポート、縦書きサポートの情報がまとまっている有用なページです。
参考文献
Adobe Systems Incorporated. (1999). PostScript Language Reference Manual (3rd ed.). Addison-Wesley.Retrieved from https://www.adobe.com/jp/print/postscript/pdfs/PLRM.pdf
Last modified: 2025/10/05