matlab

매트랩에서 텍스트를 컬러풀하게

게으른 the lazy 2024. 6. 10. 00:26

 

 

FileExchange에서 재밌는 함수를 찾았다. 이곳에서 확인할 수 있다. 개발자는 undocumented matlab으로 유명한 Yair Altman.

 


 

매트랩의 명령 창 텍스트 출력은 기본적으로 검은 색의 plain text이다. 그나마 하나 있는 자유도는 텍스트를 빨간색으로 할 수 있다는 것인데...

 

 

 

cprintf를 이용하면 임의의 색깔로 출력할 수 있다. 게다가 bold체도 되고 밑줄도 된다. 기본적으로 문법은

 

cprintf(style, format, A1, ..., An)

 

 

이다. style만 빼면 fprintf와 동일하며, 동작방식도 완벽히 동일하다. 추가된 것은 style인데, 여기에 색깔, bold 여부, 밑줄 여부를 지정할 수 있다.

 

style에 Text, Keywords, Comments, Strings, Hyper 등을 넣으면 환경설정의 Colors Preferences의 각 색깔을 그대로 따른다. 하지만 환경설정을 외우는 것도 아니고, 후술할 내용들을 알면 굳이 쓸 이유가 없는 기능이라고 생각한다.

 

 

색깔

텍스트 색은 세 가지 방식으로 지정할 수 있다.

 

1. red, green, blue, magenta, cyan, yellow, black, white 중 하나를 쓰면 된다. 글자를 다 쓰지 않고 일부만 써도 된다. cy라고 쓰면 알아서 cyan으로 인식한다. Ambiguity만 없으면 된다.

 

 

 

bl로 시작하면 black인지 blue인지 알 수 없으므로 Ambiguous하다는 에러를 발생시킨다. 왜인지 모르겠으나 'k'를 넣으면 에러는 안 뜨는데 blue로 나온다. 버그이려나?

 

2. 길이가 3인 벡터를 넣어도 된다. 재밌는 것은, 0-1 범위로 넣어도 되고 0-255 범위로 넣어도 된다. 알아서 인식한다.

 

 

문자열로 넣어도 되는데, 이게 왜 필요한지는 잠시 뒤에 설명한다.

 

3. Hex color code도 인식한다.

 

 

 

타입

Bold로 쓰고 싶으면 style을 *(별표)로 시작한다.

 

 

 

밑줄을 넣고 싶으면 style을 -(하이픈) 또는 _(언더스코어)로 시작한다. 색깔을 double vector로 지정하면서 bold나 밑줄을 넣으려면 전체를 char array로 써야 한다.

 

 

 

그런데 사실, 별표나 하이픈이나 언더스코어가 끝에 있어도 된다. 심지어 중간에 들어가도 된다(...).

 

 

 

개발자도 생각하지 못한 부작용인 걸까?

 

Bold와 밑줄을 동시에 적용할 수는 없다.

 

 

 

그런데 하려면 할 수는 있는게 아닐까 싶다. 바로 위 이미지를 보면 중간에 bold이면서 밑줄인 부분이 있으니까.

 

버그?

왜인지 모르겠으나, 출력할 문자가 4글자 이하이면 색깔이 제대로 나오지 않을 때가 있다. 코드를 파면 뭔가 나오긴 하겠지만 매우 귀찮아서 그냥 있는 대로 잘 활용하기로 했다.

 

cprintf('-r', 'GOOD\n'); 
cprintf('*gr', 'WELL\n'); 
cprintf('-blu', 'HMM\n'); 
cprintf('*magenta', 'WHAT\n'); 
cprintf('-cyan', 'THE\n'); 
cprintf('*yellow', 'HELL\n');

 

 

 

위 이미지를 보면 cyan이 제대로 나오지 않았다.

 

 

어쨌든 다양하게 활용할 수 있을 것 같다.

 

 

끗.