IDL에서 그래픽 표출 작업을 하면서 그림과 함께 문자들을 표시하는 경우가 상당히 많습니다. 주로 알파벳, 숫자 및 각종 기호들을 표시하게 되는데요. 이 때 적용 가능한 폰트(Font)들의 종류도 꽤 많습니다. IDL에서 지원되는 폰트들의 체계를 보면 크게 다음과 같은 3종의 카테고리들로 나눠집니다.
1) 허쉬 벡터 폰트 (Hershey Vector Font)
2) 트루타입 폰트 (True Type Font)
3) 디바이스 폰트 (Device Font)
그래서 각 카테고리에 대하여 순차적으로 소개를 해보고자 하는 포부를 갖고 관련 게시물들을 올려볼까 합니다. 다만 이번 기회에는 허쉬 벡터 폰트 및 트루타입 폰트 두 종류에 관하여 주로 소개를 하고, 디바이스 폰트는 일단 보류했다가 좀 더 나중에 기회가 되면 소개해보는 방향으로 하겠습니다. 오늘은 첫번째 순서로 허쉬 벡터 폰트에 관하여 소개해보도록 하겠습니다.
허쉬 벡터 폰트는 A. V. Hershey라는 사람에 의하여 개발되고 디지털화된 폰트라고 합니다. IDL에서는 초창기 버전에서부터 상당히 오랜 기간 동안 사용되어온 폰트이기도 합니다. 특히 IDL의 DG(Direct Graphics) 체계에서는 디폴트로 사용되는 폰트이기도 합니다. 물론 허쉬 폰트 자체도 세부적으로는 여러 종류가 있어서 각각 항목별로 일련번호가 있는데, 허쉬 폰트들 중에서 3번 폰트가 디폴트로 설정되어 있습니다. 허쉬 폰트는 DG 뿐 아니라 다른 그래픽 체계들(OG, NG)에서도 사용이 가능합니다. 각 그래픽 체계별로 허쉬 폰트를 사용하기 위한 설정법은 다음과 같습니다.
DG 체계 : 각 루틴별로 FONT 키워드의 값을 -1로 설정하거나 시스템 변수인 !P.FONT의 값을 -1로 설정 (-1이 디폴트)
OG 체계 : IDLgrFont 클래스의 객체를 정의할 때 세부적으로 설정
NG 체계 : TEXT 함수 및 기타 그래픽 함수 내에서 세부적으로 설정(?)
일단 허쉬 폰트는 기본적으로는 DG 체계에서 주로 사용됩니다. NG 체계에서도 원칙적으로 사용은 가능한 것으로 되어있긴한데, 실제로는 다소 문제가 있는 것으로 알고 있습니다(참고로 NG 체계에서는 트루타입 폰트 및 Tex 문법 등을 사용하는 것이 더 좋습니다). 따라서 여기서는 DG 체계에서 허쉬 폰트를 사용하는 방법을 주로 소개하도록 하겠습니다. 일단 허쉬 폰트에는 세부적으로 총 16종이 있습니다. 각 폰트는 고유 번호로 구분되는데 그 번호는 3~20(10, 19는 없음)입니다. 이들 중 디폴트에 해당되는 허쉬 3번 폰트의 경우 지원되는 문자들은 총 208개이며 그 전체 목록은 다음과 같습니다.

그리고 허쉬 4번 폰트의 경우 총 96개의 문자들이 지원되며 그 전체 목록은 다음과 같습니다.

이와 같이 각각의 허쉬 폰트에서 지원되는 문자들의 목록은 IDL 도움말에서 볼 수 있습니다. IDL 도움말의 검색창에서 "font"로 검색을 해보면 다음과 같이 세 개의 검색 항목들이 뜨는데 이 중 "Using Hershey Vector Fonts"라는 항목을 클릭하면 됩니다.

또는 IDL 내에서도 이러한 목록을 볼 수 있는 명령이 있습니다. 바로 SHOWFONT 명령을 사용하면 되는데요. 예를 들어 앞서 봤던 허쉬 4번 폰트의 문자 목록을 보고자 한다면 IDL의 커맨드 입력창에서 다음과 같이 SHOWFONT 명령을 실행하면 됩니다.
IDL> SHOWFONT, 4, 'SG'
여기서는 SHOWFONT 명령에 대하여 폰트 번호를 첫번째 인수로 부여하고 두번째 인수로는 그냥 적당한 문자값을 부여하면 됩니다. 이러한 명령을 실행하면 그래픽창이 뜨면서 문자 목록이 표시됩니다. 그 모습은 다음 그림과 같습니다.

이와 같은 방식으로 3~20번까지 각각의 허쉬 폰트별로 문자 목록을 살펴보면서 내가 사용하고자 하는 문자들이 어디 있을지를 찾아볼 수 있습니다. 그런데 이와 같은 방식으로 내가 사용하고자 하는 문자들을 찾았을 경우 이를 IDL에서 어떻게 표시해야 할까요? 그 방법을 지금부터 살펴봅시다. 이를 위하여 다음과 같이 DG 체계에서 간단한 플롯을 표출하면서 타이틀 문자를 허쉬 폰트로 표시하는 예제를 보겠습니다.
DEVICE, DECOMPOSED=1
WINDOW, XSIZE=600, YSIZE=500
PLOT, RANDOMU(seed, 11), TITLE='!3Title of My Plot', $
CHARSIZE=1.5, COLOR='000000'x, BACKGROUND='FFFFFF'x
예제 코드의 내용을 보면 플롯의 타이틀 문자를 Title of My Plot으로 표시하고자 하는 것인데, 여기서 !3이라고 표기된 부분이 보입니다. 이것은 뒤에 나올 문자들을 허쉬 폰트 3번(Simplex Roman)으로 처리하겠다는 의미가 됩니다. 물론 DG 체계에서는 허쉬 폰트 3번이 디폴트이기 때문에 '!3Title of My Plot' 대신 그냥 'Title of My Plot'으로 표기해도 될 수도 있지만, 그래도 이와 같이 !3으로 확실히 명시하는 것이 좋습니다. 일단 실행 결과는 다음 그림과 같습니다.

만약 3번이 아닌 다른 폰트 번호를 사용하면 결과는 당연히 달라집니다. 예를 들어 '!4Title of My Plot'으로 표기하여 허쉬 폰트 4번이 사용되도록 할 경우에는 결과는 다음 그림과 같습니다.

이와 같이 타이틀 문자가 그리스 문자들로 표시되는데 그 이유는 허쉬 4번 폰트(Simplex Greek)가 주로 그리스 문자들로 구성되어있기 때문입니다. 앞서 소개했던 각 폰트별 문자 구성표를 참조하면 폰트 번호에 따라 결과가 달라질 것임을 쉽게 짐작할 수 있습니다. 하나만 더 예를 든다면, '!8Title of My Plot'으로 표기하여 8번 폰트(Complex Italic)를 사용할 경우의 결과는 다음 그림과 같습니다.

사실 이러한 결과들을 세부적으로 들여다보면, Title of My Plot이라는 문자열을 구성하는 각각의 개별 문자별로 고유의 코드번호가 있는데, 폰트 번호가 바뀌면 그 코드 번호에 대응되는 문자가 사용되기 때문에 이러한 다양한 결과들을 얻은 것이라고 보면 됩니다. 예를 들어 허쉬 9번 폰트(Math and Special)의 경우는 문자 구성표를 보면 각종 기호들 위주로 구성되어 있기 때문에, '!9Title of My Plot'로 표기하여 이 폰트를 사용할 경우에는 문자들이 이 폰트 구성표에서 대응되는 기호들로 표시될 것입니다. 그 모습은 다음 그림과 같습니다.

그런데 이 그림을 보면 상단의 타이틀 문자는 의도했던대로 허쉬 9번 폰트가 적용되었는데, X 및 Y축의 라벨 문자들까지도 이 폰트가 적용되는 바람에 보기에도 이상한 문자들이 표시된 것을 볼 수 있습니다. 그 이유는 허쉬 9번 폰트의 적용을 위하여 TITLE 키워드에 '!9Title of My Plot'라는 문자열을 부여할 경우 !9의 효력이 계속 지속되기 때문입니다. 따라서 !9의 효력은 필요한 범위까지만 적용되도록 하고 그 이후에는 원래의 폰트(여기서는 디폴트인 허쉬 3번)로 되돌아오도록 설정하는 것이 필요합니다. 이를 위해서는 '!9Title of My Plot' 대신 '!9Title of My Plot!3'으로 설정하는 것이 좋습니다. 즉 Title of My Plot이라는 타이틀 문자에 대해서만 9번 폰트가 적용되도록 하되, 그 이후에는 그냥 디폴트인 3번 폰트가 적용되도록 하는 것입니다. 이렇게 설정을 하면 결과는 다음 그림과 같습니다.

따라서 허쉬 폰트를 적용하는데 있어서는 그 범위가 어디까지가 되어야할 것인지에 대한 명확히 경계를 설정해주는 것이 필요하다는 것을 유의해야 합니다.
그러면 이번에는 특정한 번호의 허쉬 폰트에서 지원되는 문자들 중 특정한 문자 하나를 골라서 사용하고자 하는 경우를 생각해봅시다. 바로 앞서 사용했던 허쉬 9번 폰트에서 지원되는 문자들 중 "크거나 같은"의 의미를 갖는 기호(>=)를 골라서 사용하는 경우를 예로 들겠습니다. 실제로 허쉬 9번 폰트에서 지원되는 문자들의 목록을 보면 다음과 같습니다.

여기서 >= 기호는 (2, 96)의 좌표 위치에 있습니다. 일단 결과 그림부터 먼저 제시한다면 다음과 같습니다.

이 그림의 상단에 있는 타이틀 문자를 보면 data >= 74와 같은 내용이 표기되어 있습니다. 그런데 이 결과를 얻기 위한 과정을 보면, 이러한 표기를 하기 위해서 IDL 프로그램 내에서는 이 문자열을 다음과 같이 명시하였습니다.
PLOT, RANDOMU(seed, 11), TITLE='!3data !9b!3 74', $
CHARSIZE=1.5, COLOR='000000'x, BACKGROUND='FFFFFF'x
여기서 TITLE 키워드에 부여된 내용을 보면, 먼저 !3을 사용하여 data 및 74가 디폴트 폰트인 허쉬 3번으로 표시되도록 하였습니다. 그리고 >= 기호는 !9b라고 명시하였는데, 허쉬 9번 폰트의 문자들 중 소문자 b와 동일한 위치에 해당되는 문자가 사용되도록 한 것입니다. 그 이유는 앞서 우리가 사용해보았던 허쉬 8번 폰트의 문자 구성표를 9번 폰트의 구성표와 비교해보면 쉽게 알 수 있습니다.

즉 사용하고자 하는 특정한 문자의 위치를 파악한 다음, 그 위치에 대응되는 그리고 내가 키보드 자판으로 입력 가능한 문자(알파벳, 숫자, 기호 등의 문자들 중 하나)를 명시해주는 방식입니다. 그런데 이렇게 동일한 위치에 대응되는 문자를 표시하는 방식 뿐만 아니라 다음과 같은 방식을 사용해도 됩니다.
PLOT, RANDOMU(seed, 11), TITLE='!3data !9'+STRING(98B)+'!3 74', $
CHARSIZE=1.5, COLOR='000000'x, BACKGROUND='FFFFFF'x
여기서는 TITLE 키워드에 부여되는 내용에서 소문자 b에 해당되는 부분이 STRING(98B)가 되도록 하였습니다. 즉 이것은 사용하고자 하는 문자의 고유번호를 바이트형으로 명시하여 STRING 함수에 넣어줌으로써 그 문자가 표시되도록 하는 방식입니다. 여기서 98이란 숫자는 문자 구성표의 가로 및 세로 좌표 위치값을 서로 더해준 값입니다. 즉 허쉬 9번 폰트의 문자 구성표에서 >= 기호의 좌표는 (2, 96)이기 때문에 2+96=98이 됩니다. 따라서 이러한 두가지 방법 중 편한 것을 사용하면 됩니다.
그러면 허쉬 벡터 폰트(Hershey Vector Font)의 개요 및 DG 체계에서의 사용 예제들에 관한 소개는 이 정도 선에서 마칩니다. 다음 회차에서는 트루 타입 폰트(True Type Font)에 관하여 알아보도록 하겠습니다.
'IDL > Data Type & Format' 카테고리의 다른 글
| IDL의 폰트 체계 및 활용 [3] Device Font (2) | 2022.09.23 |
|---|---|
| IDL의 폰트 체계 및 활용 [2] True Type Font (0) | 2022.09.20 |
| 2진법/8진법/16진법의 사용법 (0) | 2022.02.03 |
| HDF-EOS 형식의 파일 읽기 (0) | 2021.02.05 |
| HDF5 형식의 데이터 파일 읽기 (0) | 2021.02.01 |