태그 보관물: postscript

Postscript language editing

Postscript로 만들어진 .ps 또는 .eps 파일은 앞의 글에서 보셨던 것처럼, 일반적인 text 편집기로 편집할 수 있는 ascii 파일입니다. 파일의 내용은 출력물을 만들어내는 postscript 언어죠. 따라서 postscript 언어를 알면 eps 그림 파일도 마음대로 편집할 수 있습니다. Postscript language를 배우고 싶으신 분은 Adobe site에 가셔서 매뉴얼을 받아보시면 됩니다. 여기서는 앞의 글에서 만들었던 파일에서 legend unit의 위치를 바꾸는 법만 살펴보도록 하겠습니다. 앞에서 보았던 그림은 다음과 같습니다.

eps_bbox_after

위 그림에서 오른쪽 끝에 있는 “m/s”를 legend(scale bar) 위로 옮겨봅시다. 결과는 다음과 같습니다.(옮긴 후 bounding box도 바꿔줬습니다.)

eps_unit

위의 결과를 얻기 위해서는 .eps 파일을 열어서 ‘m/s’라는 문자열을 찾아 지워줍니다. 파일 끝에서 약간 앞에 두 개가 있을겁니다. 그런 후 아래의  코드를 .eps 파일 끝부분의 ‘showpage’ 명령 앞에 넣어줍니다.

%%%%% changed the position of unit
GS
270 190 TR
NP
/Helvetica findfont 8 scalefont setfont
0 0 0 setrgbcolor
21.96 -6.462 M
(m/s) SW exch -0.5 mul
exch -0.5 mul RM (m/s) SH
S
GR
%%%%%

%%%%%는 comment이고, ‘m/s’라는 문자열의 위치는 ‘GS’ 아래에 있는 두 개의 숫자(x좌표, y좌표)로 조정합니다. 그림 크기에 따라 위치는 달라집니다.

Postscript bounding box

SU(Seismic Un*x)에 있는 psimage로 Marmousi 속도모델을 그리면 다음과 같습니다.(그림 겉부분의 회색은 그림에 포함되어 있지 않은 부분으로, 경계를 표시하기 위해 넣었습니다.)

eps_bbox_before

여기서 사용한 명령은 다음과 같습니다.

psimage par='../marm8m.txt' label1="Depth (km)" label2="Offset (km)" labelsize=8 height=1.0 width=2.4 legend=1 lstyle=vertright lwidth=0.1 lheight=1 units="m/s" < ../marm8m.drt > marm.eps

이 때, psimage는 그림 주위로 지나치게 넓은 공간을 만들어 줍니다. Bounding box 정보가 정확하지 않기 때문이죠. 이 상태로는 eps 파일을 다른 그림파일로 변환하여 paper에 넣거나 power point 발표자료에 넣기에 좋지 않습니다(물론 자르기 crop 기능을 이용할 수도 있기는 하죠).

이 공간을 없애기 위해서는 아래 명령을 이용합니다.

gs -sDEVICE=bbox -dNOPAUSE -dBATCH marm.eps

그럼 다음과 같은 결과를 보여줍니다.

GPL Ghostscript 8.63 (2008-08-01)
Copyright (C) 2008 Artifex Software, Inc.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Loading NimbusSanL-Regu font from /usr/share/fonts/default/Type1/n019003l.pfb… 2656772 1085343 2641408 1357198 2 done.
Loading NimbusSanL-Bold font from /usr/share/fonts/default/Type1/n019004l.pfb… 2673436 1178370 2661504 1363393 2 done.
%%BoundingBox: 87 107 327 200
%%HiResBoundingBox: 87.695997 107.509005 326.645990 199.601994

위의 결과에서 마지막 두 줄에 나온 것이 흰 공간을 없앤 bounding box의 크기입니다. 둘 중 하나를 쓰시면 됩니다. 네 개의 숫자는 각각 왼쪽 아래 x좌표, 왼쪽 아래 y좌표, 오른쪽 위 x좌표, 오른쪽 위 y좌표를 의미합니다. Eps 파일을 텍스트 편집기로 열어서 %%BoundingBox 라고 써진 줄을 찾아 bounding box 크기를 위의 정보로 고쳐주면 아래와 같은 결과를 얻을 수 있습니다.

eps_bbox_after

또는 SU에 있는 psbbox 라는 프로그램을 이용할 수도 있습니다.

psbbox llx=87 lly=107 urx=327 ury=200 < marm.eps >marmfx.eps

Gpl에 있는 fixbbox 프로그램은 위의 과정을 자동으로 실행하는 Python 프로그램으로,

fixbbox <input eps file> <output eps file>

과 같이 실행할 수 있습니다.