IDL/Programming

IDL에서 Carriage Return을 사용한 문자 표기 방법

이상우_IDL 2015. 8. 25. 09:30
728x90

Carriage Return(CR)이라는 것은 문자를 표기하는데 있어서 일부러 줄을 나누어 표기하는 방식을 뜻합니다. 즉, 예를 들어서 하나의 문자열인 aaabbb를 다음과 같이 그냥 한 줄에서 다 쓰는 것이 아니라 


aaabbb


다음과 같이 특정 위치에서 마디를 나누어 뒷부분을 바로 아랫줄에 표기하는 경우입니다.


aaa

bbb


오늘은 IDL에서 이와 같은 CR 표기를 하는 방법을 소개해보겠습니다. 먼저 그래픽창에서 표시하는 캡션문자를 이와 같이 표기하는 방법부터 소개하면, !c라는 일종의 제어 오퍼레이터를 문자열내에서 사용하면 됩니다. 다음 예제코드는 DG체계에서 플롯상의 캡션 문자를 CR 표기하는 예제입니다. 결과는 다음 그림과 같습니다.


DEVICE, DECOMPOSED=0

WINDOW, XSIZE=500, YSIZE=400, RETAIN=2

PLOT, SIN(FINDGEN(361)*!DTOR), BACKGROUND=255, COLOR=0

XYOUTS, 270, 0.5, 'Sine!cPlot', COLOR=0, CHARSIZE=2, /DATA



이와 같이 !c가 일단 붙으면 그 뒷 부분은 다음 줄로 넘어가는 방식입니다. 물론 문자열내에서 !c를 여러번 사용하면 그 횟수만큼 다음줄로 넘어가게 됩니다. 그래픽창에서의 이러한 CR 표기법은 NG 체계에서도 마찬가지입니다. 다음 예제코드는 NG체계에서 플롯상의 캡션 문자를 CR 표기하는 예제입니다. 결과는 다음 그림과 같습니다.


win = WINDOW(DIMENSIONS=[500, 400])

p = PLOT(SIN(FINDGEN(361)*!DTOR), /CURRENT)

tx = TEXT(270, 0.5, 'Sine!cPlot', COLOR='blue', FONT_SIZE=16, /DATA)



이와 같이 DG, NG의 그래픽창에 삽입하는 문자에 대하여 CR을 적용하려면 !c를 사용하면 됩니다. 물론 이러한 방법은 TITLE이나XTITLE, YTITLE과 같이 문자열을 삽입하는 기능들에 대하여 모두 동일하게 적용됩니다.


그런데 이와 같이 !c를 사용한 CR 표기법은 PRINT, PRINTF와 같은 명령에서는 적용되지 않습니다. 실제로 다음과 같은 명령을 실행해보면, 다음과 같이 우리의 희망과는 전혀 다른 결과가 나옵니다.


IDL> PRINT, 'aaa!cbbb'

aaa!cbbb


사실 이 경우에는 다른 방식을 사용해야 합니다. 이를 위해서는 ASCII 코드상에서 10번째 및 13번째에 있는 LF(Line Feed) 및 CR(Carriage Return) 문자열을 사용해야 하는데, 대개의 경우 13번째인 CR만 사용해도 됩니다. 예를 들면 다음과 같은 방식입니다.


IDL> PRINT, 'aaa'+STRING(13B)+'bbb'

aaa

bbb


여기서 STRING 함수의 역할은 ASCII 코드상의 13번째 항목인 CR을 불러서 사용하기 위한 것입니다. 그리고 제가 알기로 예전 버전의 IDL에서는 MS 윈도우즈와 X 윈도우 계열 OS 사이에 방식의 차이가 존재했던 것 같은데, 최근 버전의 IDL에서는 이러한 차이가 없는 것 같습니다. 제가 8.x 버전에서 테스트해본 바로는 OS에 상관없이 위의 방법이 다 적용되는 것으로 파악이 되는군요. 이와 같이 ASCII 코드상의 CR을 직접 사용하는 방식은 IDL Widget으로 제작되는 GUI상의 각종 라벨 문자들의 표기에 있어서도 동일하게 적용 가능하다는 점도 참조해두시면 좋습니다.

LIST