티스토리 툴바


공부/LaTeX2011/12/23 07:32
간호 latex code를 보면 \makeatletter 와 \makeatother 라는 명령을 보게 되는데 처음엔 이게 무슨 의미인지를 몰랐었는데 오늘 stack overflow 사이트에서 답을 찾은김에 기록차 남겨둔다.

일단 위 두 명령어는 macro 이름에 과여하는 명령들이라는 것을 알아두면 편하다. 일반적으로 .cls 파일 (class 파일)과 .sty 파일 (style 파일)에는 매크로 이름에 @ 를 사용할 수가 있다고 한다. 반대로, user file, 즉 class나 style 파일이 아닌 일반 문서에서는 @를 매크로 이름에 사용할 수 없다. 즉 @를 매크로 이름에 사용가능하게 한 것은 일종의 macro 보호목적으로써, c++에서 사용되는 namespace나 class의 public, private 지시자와 비슷한 역할을 하기 위한 것으로 보인다.  그런데 부득이하게 user file에서 class나 style file에서 internal purpose로 사용되는 macro에 접근해야할 필요가 생길경우 TeX 컴파일러에게 @를 사용할 수 있게 해주세요라고 알려주는 역할을 하는 것이 위 두개의 명령어가 된다. stack overflow에 좀 더 상세한 설명이 기술되어 있는데 요약하자면 TeX에서 각 문자에 category code 혹은 catcode라는 일종의 일련번호를 부여했는데, 예를 들어 \ 는 catcode가 0이고 일반 알파벳문제들은 catcode가 11이다. 그리고 @는 catcode가 12로 일반 알파벳문자들과 구분하고 있다는 것을 알 수 있다. 그래서
\makeatletter라고 하면 @의 catcode를 12 -> 11 로 변경시켜 macro 이름에 사용할 수 있게 하는 것이고 볼일이 다 끝나고 나면 \makeatother 명령으로 @의 catcode를 원래대로 11->12 바꾸어 주는 것이다. 그리고 한가지 주의사항이 있는데 class와 style 파일 내부에서는 이 명령어들을 명시적으로 사용하지 않아야한다는 것이다. 왜냐하면 class파일과 style 파일을 불러오면서 내부적으로 \makeatletter와 \makeatother 명령을 불러오기 때문에 오작동의 소지가 있기 때문이다.
Posted by 다루치기