KTUGFaq

KTUG FAQ

로그인:
비밀번호:
가입
Far duller than a serpent's tooth it is to spend a quiet youth.
FrontPage › NFSS
New Font Selection Scheme. LaTeX2e의 폰트 선택 스킴.

LaTeX 2.09와 LaTeX2e의 가장 큰 차이는 폰트 선택 방식에 있다. LaTeX 2.09에서는 Computer Modern METAFONT 글꼴만을 사용할 수 있었고 따라서 다른 형식의 글꼴을 사용하기 위해서는 상당한 고초를 겪지 않으면 안되었다. 이 문제를 해결하기 위한 "새로운 폰트 선택 스킴"이 1989년에 제안되었으며 1993년에 제2판이 나왔다. 현재 LaTeX2e에서 사용되는 것은 NFSS 2이다.

목차

1 텍스트 폰트
1.1 텍스트 폰트 속성
1.2 폰트 선택 방식
1.3 폰트 선택 명령
1.3.1 일괄변경
1.3.2 현재 값
1.3.3 default 매크로
1.4 사용자 레벨 명령
1.5 폰트 선언
1.6 특별한 명령
1.7 폰트 정의(fd) 파일
2 LaTeX 2.09의 폰트 선택 명령의 호환성

1 텍스트 폰트

1.1 텍스트 폰트 속성

모든 텍스트 폰트는 다섯 가지 속성(attributes)을 가진다.
  1. encoding
    폰트 인코딩이란 폰트 속에 글자들이 나열되어 있는 순서를 가리킨다. TeX류에서 흔히 쓰이는 폰트 인코딩은 두 가지인데 하나는 D. Knuth가 만든 TeX text encoding(OT1)이고 다른 하나는 Cork Encoding이라고 알려져 있는 (주로 유럽어를 위한) TeX text extended encoding(T1)이다. T1OT1의 확장이므로 OT1의 127문자 영역은 공통된다.
  2. family
    글꼴 제작사에서 같은 계열의 폰트들을 묶어서 부르는 명칭이다. 보통 roman upright, italic, bold 등을 같은 명칭 아래 묶어서 하나의 font family로 한다. Computer Modern Roman은 하나의 폰트 패밀리이다.
  3. series
    폰트의 무게(weight)와 장평(extension)은 series로 분류된다. LaTeX에서 흔히 쓰이는 글꼴들은 m(Medium), b(Boldface), bx(Boldface extended), sb(Semi-bold), c(Condensed) 등의 series를 정의하고 있다. 그러나 모든 폰트가 이런 시리즈를 모두 가진 것은 아니다.
  4. shape
    같은 패밀리에 속하는 폰트들의 모양(upright 또는 roman, italic, slanted 또는 oblique, Small caps 등이 폰트의 shape로 정의된다.
  5. size
    폰트 사이즈는 길이단위로 정의된다. 예컨대 10pt, 3mm 등이다. 폰트의 사이즈란 주어진 폰트의 디자인 사이즈를 가리키는 것으로 실제 식자되는 글자의 크기는 이와 다르다.

1.2 폰트 선택 방식


\begin{tabular}{ccccc|c|c}
\hline
 & LaTeX specification & & & & Font & TeX fontname \\
\hline
OT1 & cmr & m & n & 10pt & Computer Modern Roman 10pt & cmr10 \\
OT1 & cmss & m & sl & 12pt & Computer Modern Sans Oblique 12pt & cmssi12 \\
OML & cmm & m & it & 10pt & Computer Modern Math Italic 10pt & cmmi10 \\
T1 & ptm & b & it & 18pt & Adobe Times Bold Italic 18pt & ptmbq at 18pt \\
\hline
\end{tabular}

1.3 폰트 선택 명령

폰트 선택을 위한 다음 명령이 있다.
  1. \fontencoding
  2. \fontfamily
  3. \fontseries
  4. \fontshape
  5. \fontsize
마지막의 \fontsize는 두 개의 인자를 취하는데 첫번째 것은 사이즈이고 두번째 인자는 \baselineskip 값이다. 이 명령이 주어져도 바로 폰트가 바뀌지는 않는다. 새로운 설정을 활성화하려면 \selectfont를 선언해야 한다. \font...류 명령과 \selectfont 사이에 다른 텍스트가 들어오면 안된다.

1.3.1 일괄변경

이 가운데 encoding, family, series, shape를 한꺼번에 바꾸는 다음 명령이 있다.

\usefont{enc}{fam}{ser}{sha}

예를 들어 \usefont{OT1}{cmss}{bx}{it}은 \fontencoding{OT1}\fontfamily{cmss}\fontseries{bx}\fontshape{it}\selectfont 와 동일하다.

1.3.2 현재 값

현재 사용되고 있는 폰트의 설정값은 다음 매크로로 호출할 수 있다.
\f@encoding, \f@family, \f@series, \f@shape, \f@size,
\f@baselineskip, \tf@size, \sf@size, \ssf@size
따라서, 폰트의 baselineskip은 바꾸지 않으면서 사이즈만 12포인트로 변환하려면
\fontsize{12pt}{\f@baselineskip}\selectfont
위와 같이 하면 될 것이다. (스타일이나 클래스 파일 안이 아니라면 물론 이 행의 앞뒤에 \makeatletter\makeatother가 있어야 한다.)

1.3.3 default 매크로

\...default 매크로가 있다. 다음은 각각의 기본값이다.
\encodingdefault = OT1
\familydefault = \rmdefault
\seriesdefault = \mddefault
\shapedefault  = \updefault

fontfamily에 관련된 \...default 매크로와 기본값은 다음과 같다.
\rmdefault = cmr
\sfdefault = cmss
\ttdefault = cmtt

fontseries에 관련된 \...default 매크로는 다음과 같다.
\mddefault = m
\bfdefault = bx

fontshape에 관련된 \...default 매크로와 기본값은 다음과 같다.
\updefault = n
\itdefault = it
\sldefault = sl
\scdefault = sc

\normalfont는 문서가 시작하는 시점(\begin{document})에 호출되는 매크로이다. 이 매크로는 문서의 글자 기본 선택값을 활성화하고 몇 가지 간격을 설정한다.

1.4 사용자 레벨 명령

여기까지는 스타일 제작자를 위한 매크로라 할 수 있다. 문서작성자는 이런 번거로운 매크로를 이용하지 않고 다음과 같이 각각 대응하는 간편한 매크로를 사용하여 폰트를 선택한다.

먼저 문서 전체의 encoding을 바꾸려면 fontenc 패키지를 이용한다.
\usepackage[T1]{fontenc}

문서 전체의 글꼴 family 조합을 바꾸려면 \rmdefault, \sfdefault, \ttdefault 세 개의 매크로를 재정의한다. 예컨대 다음은 rm=Times, sf=Helvetica, tt=Courier로 설정하는 것이다.
\renewcommand{\rmdefault}{ptm}
\renewcommand{\sfdefault}{phv}
\renewcommand{\ttdefault}{pcr}

fontfamily를 선택하는 사용자 명령은 다음과 같다.

\begin{tabular}{ccc}
\hline
family & 선언형 & 명령형 \\
\hline
roman & \verb|\rmfamily| & \verb|\textrm{}| \\
sans serif & \verb|\sffamily| & \verb|\textsf{}| \\
typewriter & \verb|\ttfamily| & \verb|\texttt{}| \\
\hline
\end{tabular}
fontseries를 선택하는 명령은 다음과 같다.

\begin{tabular}{ccc}
\hline
series & 선언형 & 명령형 \\
\hline
medium & \verb|\mdseries| & \verb|\textmd{}| \\
boldface & \verb|\bfseries| & \verb|\textbf{}| \\
\hline
\end{tabular}
fontshape를 선택하는 사용자 명령은 다음과 같다.

\begin{tabular}{ccc}
\hline
shape & 선언형 & 명령형 \\
\hline
upright & \verb|\upshape| & \verb|\textup{}| \\
italic & \verb|\itshape| & \verb|\textit{}| \\
slanted & \verb|\slshape| & \verb|\textsl{}| \\
small caps & \verb|\scshape| & \verb|\textsc{}| \\
\hline
\end{tabular}
fontsize를 선택하는 사용자 명령은 다음과 같다.
\Huge, \huge, \LARGE, \Large, \large, \normalsize, \small, \footnotesize, \tiny
폰트 사이즈에 대해서는 글자크기BigFont를 참고하라.

1.5 폰트 선언

LaTeX2e에게 폰트는 미리 정의되어 있어야 한다. 텍스트 폰트 정의를 위한 매크로로 중요한 것은 다음과 같은 것이 있다.

\DeclareFontFamily
이 매크로는 세 개의 인자를 취한다.
  1. encoding
  2. family
  3. setting
예를 들어 \DeclareFontFamily{T1}{cmtt}{\hyphenchar\font=-1}과 같은 선언은 cmtt 폰트 패밀리를 T1 인코딩으로 사용한다는 의미이다.

\DeclareFontShape
이 매크로는 여섯 개의 인자를 취하는데 각각 다음과 같은 의미이다.
  1. encoding
  2. family
  3. series
  4. shape
  5. loading-info
  6. loading-option
이 가운데 encoding과 family는 \DeclareFontFamily로 선언되어 있는 것이어야 한다. series와 shape에 해당하는 loading-info를 정의해주어야 하는데 여기에는 일정한 문법이 적용된다. (이 문법에 대해서는 나중에...)

1.6 특별한 명령

사용례만을 보이겠다.
  • \DeclareFixedFont{\picturechar}{OT1}{cmr}{m}{n}{5} \picturechar라는 새로운 명령을 정의한다. 두번째 이후 인자는 차례로 encoding, family, series, shape, size(pt)인데 베이스라인 등 어떤 것도 바꾸지 않고 일시적으로 주어진 폰트를 선택할 수 있게 하는 것이다. 위와 같이 정의한 다음 {\picturechar a}와 같이 쓴다.
  • \DeclareTextFontCommand{\textxx}{<font selection>} 이것은 \text.. 류의 명령을 정의할 수 있게 해준다. 예를 들어 \DeclareTextFontCommand{\textrm}{\rmfamily}\textrm 명령형 매크로를 정의하는 방식이다.
  • \DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit} LaTeX2e에서는 지원되지 않는 LaTeX 2.09 형식의 명령을 정의하기 위한 매크로이다. 표준 클래스에서는 이것이 미리 정의되어 있으므로 사용자가 별도로 정의할 필요는 없다. 그러나 LaTeX 2.09 폰트 선택 매크로를 지원하지 않는 클래스에서 반드시 이전 형식의 매크로를 써야 한다면 이와 같은 정의가 유용할 수 있을 것이다.

1.7 폰트 정의(fd) 파일

위의 \DeclareFontFamily\DeclareFontShape 명령의 조합으로 미리 특정 폰트를 정의해두는 파일은 확장명이 .fd이다.

이 파일의 이름은 <''ENC''><''family''>.fd 형식을 띠는데, LaTeX2e는 예를 들어 현재 문서에서(fontenc 패키지에 의하여, 즉 \DeclareFontEncoding 매크로에 의하여) 선언된 \encodingdefault가 T1이고 \fontfamily{utm}\selectfont와 같은 매크로에 의하여 T1/utm/m/n/10pt 폰트를 요청받았을 때 우선 '''T1utm.fd'''라는 파일을 찾는다. 이 파일에는 \DeclareFontFamily{T1}{utm}{}`과 같은 행과 \DeclareFontShape{T1}{utm}{m}{n}{....}{}`과 같은 정의들이 포함되어 있어야 한다.

2 LaTeX 2.09의 폰트 선택 명령의 호환성

LaTeX 2.09에서는 \it, \bf 등의 매크로로 폰트를 선택했다. 선언형만이 정의되어 있었고 명령형은 없었다. 그러므로 {\it Italicized text}와 같은 방식으로 코딩하였다. 이러한 매크로를 하위호환성 때문에 많은 클래스에서 지원하지만 100% 호환이 보장되어 있지 않다. 표준 LaTeX 매크로가 아닌 예컨대 MemoirClass와 같은 클래스를 쓰게 되면 이러한 매크로는 정의되어 있지 않다는 오류를 낼 것이다(호환성 모드가 마련되어 있기는 하지만). 그러므로 NFSS 방식에 알맞은 폰트 선택 매크로를 사용하는 것이 좋다. 만약 {\it some stuffs}와 같이 이미 코딩이 되어 있다면 이것을 \textit{some stuffs}{\itshape some stuffs}로 바꾸도록 한다. LaTeX2e에서는 텍스트폰트와 수학폰트를 지정하는 방식이 구분되어 있다. 그러므로 수학 모드 안에서는 \it\mathit으로, \rm\mathrm으로 바꾸어주어야 할 것이다.

대부분의 경우 범위를 중괄호로 지정해주어야 하는 선언형 매크로의 사용은 중괄호 안의 내용이 길어질 경우 괄호 짝맞춤이 잘 되지 않아서 오류 추적이 어려워진다. 그러므로 \text... 형의 폰트 선택 명령을 사용하는 것이 작업을 간편하게 하고 오류를 쉽게 찾을 수 있게 하는 방법이 된다.

(to be continued)


^
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2007-09-28 21:45:16
Processing time 0.0574 sec