KTUGFaq

KTUG FAQ

로그인:
비밀번호:
가입
The Tree of Learning bears the noblest fruit, but noble fruit tastes bad.
FrontPage › CatCode

목차

1 CategoryCode
1.1 \catcode 명령
2 CategoryCode의 사용
2.1 \makeatletter, \makeatother
2.2 CategoryCode 예제

1 CategoryCode

TeX 설계상의 특징 중의 하나로서, 입력되는 모든 바이트를 16가지의 Category로 구분하여 처리하는 것이다. default는 다음과 같다.

Category 설명 기정값
0 escape character \
1 그룹 열기 {
2 그룹 닫기 }
3 수학모드 전환 $
4 정렬 탭 &
5 행끝 <Return>, ^^M(ASCII return)
6 parameter #
7 윗첨자 ^, ^^K
8 아랫첨자 _, ^^A
9 ignored character NUL, ^^@ (ASCII null)
10 스페이스 $$\verb*| |$$ , ^^I(ASCII horizontal tab)
11 글자(letter) A..Z, a..z
12 기타문자 나머지 모두
13 active character ~, ^^L(ASCII form feed)
14 커멘트 문자 %
15 invalid character DEL, ^^J(ASCII delete)

  • letter를 글자, character를 문자라고 번역

1.1 \catcode 명령

특정한 문자의 CategoryCode를 변경하려면 \catcode를 쓴다. 예컨대
\catcode`\[=1
\catcode`\]=2

2 CategoryCode의 사용

2.1 \makeatletter, \makeatother

LaTeX에서 흔히 쓰이는 명령으로 \makeatletter\makeatother가 있다.

TeX은 그 설계상 모든 ControlSequences가 원칙적으로 문자(letter = catcode 11)로 이루어지도록 약속되어 있다. 그런데 LaTeX의 설계자들은 @문자(at-문자)도 ControlSequences에서 사용하고 싶어했다.

@문자는 원래 기타문자(other characters = catcode 12)에 해당하는 것이다. 그러므로 그 자체로는 ControlSequences에 사용될 수 없다. 이 문자에 CategoryCode 11을 할당하여 마치 문자(letter)인 것처럼 취급하라는 명령이 \makeatletter이다. \makeatletter 명령을 지시한 이후로는 @문자의 catcode는 11이 되어 다른 문자들과 함께 명령(ControlSequences)의 일부로 쓰일 수 있다.

반면, @문자를 원래의 사용법으로 되돌려주려면 CategoryCode를 12로 설정해야 한다. 이것이 \makeatother이다. letterother는 catcode 11, 12를 각각 지칭하는 말이다.
\def\makeatletter{\catcode`\@11\relax}
\def\makeatother{\catcode`\@12\relax}
(!) @문자는 Tabular환경에서는 특별한 의미를 갖는다. 이에 대해서는 Tabular환경 참조.

@문자를 포함하는 ControlSequencesLaTeX 문서의 본문에서 쓰려면 \makeatletter, \makeatother를 지정해야만 한다. 이 점을 이용하면 사용자와 직접 인터페이스하는 명령이 아닌, 어떤 함수의 내부 명령으로 사용되는 것임을 보다 분명하게 (시각적으로) 보여줄 수 있다는 장점이 있다. 즉, @문자가 사용된 명령은 대부분 스타일이나 클래스의 내부명령들이다. 확장명이 .sty인 스타일과 .cls인 클래스 파일은 별도로 \makeatletter를 지시하지 않아도 그 파일의 범위 안에서 @ 문자를 ControlSequences의 일부로 인식한다.

2.2 CategoryCode 예제

CTAN에도 있는 것으로, 예전에 comp.text.tex에 올라왔던 재미있는 예제.
\let~\catcode~`76~`A13~`F1~`j00~`P2jdefA71F~`7113jdefPALLF
PA''FwPA;;FPAZZFLaLPA//71F71iPAHHFLPAzzFenPASSFthP;A$$FevP
A@@FfPARR717273F737271P;ADDFRgniPAWW71FPATTFvePA**FstRsamP
AGGFRruoPAqq71.72.F717271PAYY7172F727171PA??Fi*LmPA&&71jfi
Fjfi71PAVVFjbigskipRPWGAUU71727374 75,76Fjpar71727375Djifx
:76jelse&U76jfiPLAKK7172F71l7271PAXX71FVLnOSeL71SLRyadR@oL
RrhC?yLRurtKFeLPFovPgaTLtReRomL;PABB71 72,73:Fjif.73.jelse
B73:jfiXF71PU71 72,73:PWs;AMM71F71diPAJJFRdriPAQQFRsreLPAI
I71Fo71dPA!!FRgiePBt'el@ lTLqdrYmu.Q.,Ke;vz vzLqpip.Q.,tz;
;Lql.IrsZ.eap,qn.i. i.eLlMaesLdRcna,;!;h htLqm.MRasZ.ilk,%
s$;z zLqs'.ansZ.Ymi,/sx ;LYegseZRyal,@i;@ TLRlogdLrDsW,@;G
LcYlaDLbJsW,SWXJW ree @rzchLhzsW,;WERcesInW qt.'oL.Rtrul;e
doTsW,Wk;Rri@stW aHAHHFndZPpqar.tridgeLinZpe.LtYer.W,:jbye
<!> latex이 아니라 tex을 실행해야 합니다.



^
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2009-05-13 08:16:09
Processing time 0.0439 sec