Ghostscript 縦書きサポート - OpenType(CFF/CID)

OpenType(CFF)フォント専用です。TrueType(TT)フォントは考慮していません。 「(あいうえお) show」で縦書き表示ができます。動作の仕組みは以下の通りです。 日本語OpenType(CFF)をGhostscriptで利用するための設定をベースにしています。 変更点は、縦書きフォントの設定ファイルにCDevProcの処理を加えていることです。

sample image

PostScriptコードv-sample.ps のサンプル出力です。 青が縦書き橙が横書きです。
縦書き・横書きサンプル

設定

Ghostscript/Windows - TeX Wik> Ghostscript/Windows - TeX Wiki やtexlive に含まれる haranoaji-tlpost.pl などにある日本語 OpenType fontを利用する設定を行います。
  1. CIDFont以下にフォントファイルの(シンボリック)リンクを作成
  2. 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
これらの情報はprint-opentype-fontで得ることができます。 この選択が正しいのか誤っているのかは理解できていません。「フォント(覚え書き) - you/uni/ps」の情報や PLRM3/5.4 Glyph Metric Informationにある「美」(p.333) の情報がうまく処理できそうなパラメータをさがしてこれらにしています。
$ 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の情報を参考にしています。

参考文献

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