IDL/Data Type & Format

IDL의 폰트 체계 및 활용 [2] True Type Font

이상우_IDL 2022. 9. 20. 14:41
728x90

IDL에서 그래픽 표출 작업을 하면서 그림과 함께 문자들을 표시하는 경우가 상당히 많습니다. 주로 알파벳, 숫자 및 각종 기호들을 표시하게 되는데요. 이 때 적용 가능한 폰트(Font)들의 종류도 꽤 많습니다. IDL에서 지원되는 폰트들의 체계를 보면 크게 다음과 같은 3종의 카테고리들로 나눠집니다.

 

1) 허쉬 벡터 폰트 (Hershey Vector Font)

2) 트루타입 폰트 (True Type Font)

3) 디바이스 폰트 (Device Font)

 

그래서 각 카테고리에 대하여 순차적으로 소개를 해보고자 하는 포부를 갖고 관련 게시물들을 올려볼까 합니다. 다만 이번 기회에는 허쉬 벡터 폰트 및 트루타입 폰트 두 종류에 관하여 주로 소개를 하고, 디바이스 폰트는 일단 보류했다가 좀 더 나중에 기회가 되면 소개해보는 방향으로 하겠습니다. 오늘은 두번째 순서로 트루타입 폰트에 관하여 소개해보도록 하겠습니다.

 

트루타입(True Type) 폰트는 1980년대 말 애플 컴퓨터에서 개발되었으며 이후 마이크로소프트에게도 무료로 제공하여 윈도우즈 3.1에서부터 탑재되기도 했던 폰트입니다. 그래서 Mac OS와 윈도우즈 OS에서 매우 오랫동안 사용되어온 폰트이며,  IDL에서도 초창기 버전에서부터 상당히 오랜 기간 동안 사용되어왔습니다. IDL에서 지원되는 트루타입 폰트들의 종류는 다음과 같습니다(IDL 8.8 버전 기준).

 

 

이와 같이 Courier, Helvetica, Times, DejaVuSans 등이 문자 표기에 있어서 주로 사용되는 폰트들입니다. 세부적으로는 볼드체와 이탤릭체 등으로 변형도 가능합니다. 트루타입 폰트는 DG 뿐 아니라 다른 그래픽 체계들(OG, NG)에서도 사용이 가능합니다. 각 그래픽 체계별로 트루타입 폰트를 사용하기 위한 설정법은 다음과 같습니다.

 

DG 체계 : 각 루틴별로 FONT 키워드의 값을 1로 설정하거나 시스템 변수인 !P.FONT의 값을 1로 설정

OG 체계 : IDLgrFont 클래스의 객체를 정의할 때 세부적으로 설정

NG 체계 : TEXT 함수 및 기타 그래픽 함수 내에서 세부적으로 설정

 

그러면 지금부터 NG 및 DG 체계에서 트루타입 폰트를 사용하는 방법을 소개해보도록 하겠습니다. 먼저 NG 체계부터 보면 NG 체계에서는 기본적으로 트루타입 폰트가 사용됩니다. 그 중에서도 크기 11-point인 DejaVuSans 폰트가 디폴트입니다(IDL 8.8 버전 기준). 예를 들어 다음과 같이 NG 체계 기반의 간단한 플롯을 표출하면서 타이틀 문자를 추가해봅시다.

 

x = FINDGEN(91)
y = SQRT(x)*SIN(x*8*!DTOR)
win = WINDOW(DIMENSIONS=[600, 500], /NO_TOOLBAR)
p = PLOT(x, y, XRANGE=[0, 90], TITLE='Title of My Plot', /CURRENT)

 

여기서는 문자 표시에 있어서 폰트와 관련된 별도의 설정은 하지 않았습니다. 따라서 디폴트 폰트가 사용될 것입니다. 표출된 그림의 모습은 다음과 같습니다.

 

 

여기서는 디폴트 폰트인 DejaVuSans 11-point가 사용되었습니다. 이것은 IDL 8.8 버전 현재 기준입니다. 사실 DejaVuSans 폰트는 IDL 8.6 버전에서부터 지원되기 시작하였고, 그 이전에는 NG 체계의 디폴트 폰트는 Helvetica였습니다. 그러다가 IDL 8.6에서 DejaVuSans 폰트가 도입되었고 이 폰트가 NG 체계의 디폴트로 사용되어오고 있습니다. 그러면 디폴트 외에 다른 폰트도 사용해봅시다. 예를 들어 Courier Bold 14-point 폰트를 사용할 경우에는 FONT_NAME, FONT_STYLE, FONT_SIZE 등의 속성들을 추가로 사용하면 됩니다. 즉 PLOT 함수가 사용된 내용만 다음과 같이 바꿔봅시다.

 

p = PLOT(x, y, XRANGE=[0, 90], TITLE='Title of My Plot', $
  FONT_NAME='Courier', FONT_STYLE='Bold', FONT_SIZE=14, /CURRENT)

 

그 결과는 다음 그림과 같습니다.

 

 

그리고 이번에는 Times Bold Italic 16-point 폰트로 설정해봅시다. 이를 위해서는 PLOT 함수가 사용된 내용을 다음과 같이 바꾸면 됩니다.

 

p = PLOT(x, y, XRANGE=[0, 90], TITLE='Title of My Plot', $
  FONT_NAME='Times', FONT_STYLE='Bold Italic', FONT_SIZE=16, /CURRENT)

 

결과는 다음 그림과 같습니다.

 

 

NG 체계에서 트루타입 폰트를 사용하는 방식은 대략 이와 같습니다. 이번에는 DG 체계에서 트루타입 폰트를 사용하는 방법을 알아보겠습니다. 앞서 정의했던 것과 동일한 데이터를 사용하여 DG 기반의 예제 플롯을 표출해봅시다. 그 과정은 다음과 같습니다.

 

x = FINDGEN(91)
y = SQRT(x)*SIN(x*8*!DTOR)

WINDOW, XSIZE=600, YSIZE=500
DEVICE, SET_FONT='Times Bold Italic', /TT_FONT
PLOT, x, y, XRANGE=[0, 90], TITLE='Title of My Plot', $
  FONT=1, CHARSIZE=2, COLOR='000000'x, BACKGROUND='FFFFFF'x

 

DG 체계에서 트루타입 폰트를 사용하려면 반드시 먼저 DEVICE 명령을 사용하여 폰트에 관한 설정을 해줘야 합니다. 즉 위와 같이 SET_FONT 키워드에서 폰트의 이름 및 스타일을 지정해주고 /TT_FONT 키워드까지 사용해야 합니다. 여기서는 Times Bold Italic 폰트로 설정하였습니다. 그리고 PLOT 명령에서는 반드시 FONT 키워드를 사용하여 그 값을 1로 설정해야 합니다. 이러한 과정을 거쳐야 DG 체계에서 트루타입 폰트를 정상적으로 사용할 수 있습니다. 결과는 다음 그림과 같습니다.

 

 

그리고 폰트를 Courier Bold로 바꿔서 표출해보면 결과는 다음 그림과 같습니다.

 

 

NG 및 DG 체계에서 트루타입 폰트를 사용하는 방법은 대략 이와 같습니다. 그런데 IDL에서 지원되는 트루타입 폰트들의 종류를 보면 그 갯수가 그리 많지는 않습니다. 물론 지원되는 폰트들만 사용해도 크게 불편하지는 않지만 그래도 종류가 더 다양했으면 하는 아쉬움이 들 수도 있습니다. 그런데 이러한 아쉬움을 어느 정도 해소할 수 있는 방법이 있는데, 바로 새로운 트루타입 폰트를 유저가 직접 추가하는 것입니다. 즉 트루타입 폰트에 해당되는 파일(확장자 .ttf)을 IDL 설치 폴더 내에 있는 resource/fonts/tt라는 하위 폴더에 넣어주고 그 안에 있는 ttfont.map 파일의 내용을 적절히 수정하는 방식입니다. 제가 예전에 IDL에서 한글을 표시하는 방법에 관한 게시물을 올린 적이 있는데, 이 게시물에서 소개된 방법도 바로 동일한 방식입니다. 따라서 트루타입 폰트를 새롭게 추가해서 사용하는 방법에 관해서는 그 게시물의 내용을 참조하시면 됩니다.

 

LIST