제가 예전에 IDL의 NG 체계에서 Tex 형식의 특수 기호들을 사용하는 방법에 관하여 관련 게시물을 올린 적이 있었습니다. 3년이 좀 넘었는데 당시 IDL 8.2 버전부터 지원되기 시작했던 기능으로서 소개를 했었는데요. 오늘은 이러한 Tex 형식의 특수 기호가 사용된 그림을 저장하는 방법 및 이와 관련된 유의 사항 등에 대하여 다루고자 합니다. 특히 PS, EPS, PDF와 같은 벡터 포맷 파일로 저장할 경우 주의해야 할 점에 대해서 주목해보고자 합니다. 먼저 다음 예제 코드를 봅시다.
win = WINDOW(DIMENSIONS=[600, 500])
tt = 'ABC$\odot\alpha\beta\gamma\AA\aa\Mars\Sun\Arrrr$'
p = PLOT(/TEST, COLOR='crimson', THICK=2, TITLE=tt, /CURRENT)
win.Save, 'Tex_symbols.png', WIDTH=600
win.Save, 'Tex_symbols.pdf'
이 내용을 실행하면 NG 체계 기반의 플롯을 그리되, 플롯의 타이틀 문자에 Tex 형식의 특수 기호들 여러 개가 표기됩니다. 그리고 이 그림을 PNG 및 PDF 파일로 저장하게 됩니다. 이렇게 생성된 PNG 파일을 보면 다음 그림과 같습니다. 당연한 얘기지만 화면상에 나타났던 그대로 잘 저장이 된 것을 확인할 수 있습니다.
그런데 함께 생성된 PDF 파일도 한번 봅시다. 다른 뷰어 앱으로 열어본 이 파일의 모습은 다음 그림과 같습니다. 참고로 이 PDF 파일은 Mac OS X El Capitan용 IDL 8.5에서 저장한 것입니다. 근데 뭔가 좀 이상합니다.
보시다시피 문자들이 제대로 표기가 되지 않고 깨져 있는 모습을 볼 수 있습니다. 물론 이유는 있습니다. IDL에서 지원되는 이와 같은 Tex 형식의 특수 문자 또는 기호들 중 일부가 유니코드(Unicode) 기반인데, IDL의 PDF 및 Postscript 드라이버에서 이를 제대로 지원하지 않기 때문입니다. 이 내용은 IDL 도움말에서 TEXT 함수에 관한 내용 중에 수록되어 있는데 원문은 다음과 같습니다.
Note: The following symbols are generated using Unicode characters from the DejaVu Sans font. These characters will display correctly on the screen and when the graphics are saved to a bitmap file. However, because IDL's postscript and PDF drivers do not support Unicode, these characters will not display properly when the graphics are saved to a vector postscript or vector PDF file. If you want to use these characters with postscript or PDF, you should specify the /BITMAP keyword with the Save method.
그리고 이 원문을 보면 해결책도 제시가 되어 있는데요. 바로 /BITMAP 키워드를 사용하는 것입니다. 따라서 위의 예제 코드에서 PDF 파일저장하는 명령을 다음과 같이 바꿔서 실행하면 됩니다.
win.Save, 'Tex_symbols.pdf', /BITMAP
이와 같은 방식으로 다시 저장해 본 PDF 파일을 열어 보면 그 모습은 다음 그림과 같습니다. 특수 기호 및 문자들이 깨지지 않고 제대로 표기되어 있는 것을 확인할 수 있습니다.
물론 이것은 PS, EPS 포맷으로 저장할 경우에도 마찬가지입니다. 따라서 이와 같은 벡터 포맷으로 저장해야 하는 그림이 내부적으로 Tex 형식의 특수 문자나 기호를 사용했을 경우, BITMAP 키워드를 사용하는 것이 좋습니다.
이번에는 이와 유사한 작업을 DG 체계에서 하는 방법도 언급을 해보고자 합니다. DG 체계에서는 벡터 포맷의 파일을 저장할 때 그래픽 디바이스(Device)를 'PS'로 변환한 상태에서 그림을 그려주는 방식을 사용합니다. 위의 예제 코드와 유사한 작업을 DG에서 한다면 그 내용은 대략 다음 예제 코드와 같습니다.
SET_PLOT, 'PS'
DEVICE, DECOMPOSED=0, FILENAME='Tex_symbols_DG.eps'
tt = TEX2IDL('ABC$\odot\alpha\beta\gamma\AA\aa\Mars\Sun\Arrrr$')
PLOT, FINDGEN(100), TITLE=tt, COLOR=0, BACKGROUND=255, FONT=1, CHARSIZE=2
DEVICE, /CLOSE
SET_PLOT, 'X'
원래 DG 체계에서는 그래픽 디바이스를 화면 모드가 아닌 PS 모드로 전환한 상태에서 작업을 해야만 벡터 포맷 파일 저장이 가능합니다. 따라서 이 예제 코드를 실행하면 실제로 화면상에는 아무 것도 나타나지 않습니다. 그 대신 파일은 생성됩니다. 다만 DG 체계에서는 PDF 파일 생성은 불가능합니다. 이 기능은 NG 체계에서만 지원되기 때문입니다. 따라서 여기서는 EPS 포맷 파일로 생성해보았습니다. 물론 PS 포맷으로 저장하는 것도 가능합니다. 그리고 위 예제 코드에서 맨 하단을 보면 SET_PLOT 명령의 인자가 'X'로 되어 있는데, 이는 Mac OS나 Linux와 같은 OS에서 화면상 표시 모드를 나타냅니다. 만약 MS Windows OS일 경우에는 'Win'으로 대체해야 한다는 점 유의하시기 바랍니다. 이 명령을 사용한 이유는 일단 PS 모드에서 그림 그리고 저장까지 다 마친 후 다시 원래의 화면 표시 모드로 돌아오도록 하기 위함입니다.
어쨌든 위와 같은 예제 코드를 실행하여 생성된 EPS 또는 PS 파일을 전용 뷰어 앱(Ghostview 등과 같은)을 사용하여 한번 열어 보시면 됩니다. 아마 특수 기호들이 정상적으로 표기된 모습을 볼 수 있을 것입니다. 다만 이 부분은 100% 확신이 좀 어렵습니다. 왜냐하면 벡터 포맷의 파일을 생성하는 기능이 어느 정도 OS에 따라 상황이 약간씩 다를 가능성이 존재하기 때문입니다. 따라서 이 부분은 각자의 IDL 사용 환경에 따라 다소 차이가 있을 수 있음을 염두에 두는 것이 좋을 것 같습니다.
'IDL > Programming' 카테고리의 다른 글
인덱스 기반의 배열의 생성에 관하여 (0) | 2017.04.07 |
---|---|
텍스트 파일을 쓰는 방법에 관하여 (0) | 2016.12.27 |
배열의 사용과 관련하여 유의해야 할 최근 변동사항 (0) | 2016.07.25 |
SAVE 명령 및 IDL_SAVEFILE 클래스의 사용에 관하여 [1] (0) | 2016.06.22 |
배열 인덱싱을 배열로 할 경우의 유의사항 (0) | 2016.06.09 |