KTUGFaq

KTUG FAQ

로그인:
비밀번호:
가입
Someone is speaking well of you.
FrontPage › 장절명령

목차

1 장절명령(Sectioning Commands) 기초
1.1 level number
1.2 secnumdepth와 tocdepth
1.3 startsection 명령
2 장절명령 템플릿
2.1 article의 간단한 템플릿
2.2 book의 간단한 템플릿
3 장절명령의 응용과 재정의 (in progress)
3.1 장절 제목의 자리를 중앙이나 오른쪽으로 바꾸거나, 제목의 font를 어떻게 바꾸나요?
3.2 subsubsubsection는 어떻게 만드나요?
3.3 장이나 절의 앞에 붙는 번호를 전체적으로 없애고 싶지만 목차는 만들고 싶습니다. 어떡하죠?
3.4 장절 제목 앞에 붙는 번호를 로마 숫자나 알파벳으로 바꾸려면 어떻게 합니까?
3.5 장절 제목이 header에 들어가기에 너무 깁니다. 어떡하죠?
3.6 수식, 그림, 표, 참고 사항, theorem 등의 번호를 장이나 절에 따라서 다시 시작할 수 있나요?
3.7 report 클래스에서 장 표제 모양을 바꾸고 싶어요.
4 그밖의 사항들

1 장절명령(Sectioning Commands) 기초

1.1 level number

장절 명령은 다음 순서로 쓰인다. 여기에 각각 level number가 붙는다.
\part
\chapter
\section
\subsection
\subsubsection
\paragraph
\subparagraph
이것을 표에 정리한다면,
명령어 Level
\part (book/report) -1
\part (article) 0
\chapter 0
\section 1
\subsection 2
\subsubsection 3
\paragraph 4
\subparagraph 5

장절 명령어들의 형식과 특성들을 보면,
형식 번호 붙이기(numbering) 목차에 들어갈 제목(.toc) header/footer에 들어갈 제목
\section{제목} Y 제목 제목
\section[목차에 넣을 제목]{본문에 넣을 제목} Y 목차에 넣을 제목목차에 넣을 제목
\section*{제목} N 제목이 들어 가지 않음제목이 들어 가지 않음

(./) 주의: 보통 목차(TOC)에 들어갈 수준(Level)은 명령행
\setcounter{tocdepth}{5}
등으로 설정하는 데 이미 cls 파일에서 디폴트로 설정하여 둔 것이 있다. 문제는 cls 파일에 따라 수준(Level)을 나타내는 숫자가 다를 수가 있다는 것이다. 예로써 Utah 대학교의 학위 논문 cls인 uuthesis2e.cls를 보면
  \def\section{\@Ustartsection{section}{3}
                        {\z@}   %indent. \z@ == 0pt
             {\HFsectionSKIP}   % before=\baselineskip for \large
                        {1sp}   %after
        {\center                %style
         \HFsection\bfseries}}
  \def\subsection{\@Ustartsection{subsection}{4}
                        {\z@}   %indent
          {\HFsubsectionSKIP}   % before=\baselineskip for \normalsize
                        {1sp}   %after
          {\HFsubsection\bfseries}}   %style
  \def\subsubsection{\typeout{No subsubsections allowed with three levels.}}
  \def\paragraph{\@Ustartsection{paragraph}{5}
                 {\parindent}   %indent
                        {1sp}   %before
                       {-1em}   %after
           {\HFparagraph\bfseries}}   %style
book.cls의 수준과는 사뭇 다르다. 따라서 프리앰블에
\setcounter{tocdepth}{3}
을 썼다면 section 까지 밖에는 나타나지 않는다. subsection 까지 나타나게 할려면 숫자 4를 써야 한다.
  • 참고: uuthesis2e.clsKTUGOperate:13926에 첨부된 Byung.zip을 풀면 들어 있다.

1.2 secnumdepth와 tocdepth

장절 명령은 다음 순서로 쓰인다.
\part
\chapter
\section
\subsection
\subsubsection
\paragraph
\subparagraph
  1. 여기에 각각 level number가 붙는데, 현재 작성하려 하는 장절 구획의 level number가 secnumdepth보다 작거나 같다면 그 장절명령은 문서에서 번호(1.1.1 등)가 붙는다.
  2. 현재 작성하려 하는 장절 구획의 level number가 tocdepth보다 작거나 같다면 toc(Table of Contents)에 엔트리를 만든다. 즉, level number가 tocdepth보다 크다면 목차에 나타나지 않는다.
  3. secnumdepth와 tocdepth는 내부 카운터 변수이므로, \setcounter 명령으로 설정할 수 있다. article 클래스에서 \paragraph까지 목차에 나타나게 하려면
    \setcounter{tocdepth}{4}
    
    를 프리앰블에 넣는다.
  4. 표준 article 클래스에서 이 두(secnumdepth와 tocdepth) counter는 모두 3으로 설정되어 있다. book에서는 모두 2로 설정되어 있다..

1.3 startsection 명령

\section 이하 명령은 \@startsection 이라는 매크로를 이용하여 정의한다. 다음 예는 \section 명령을 재정의하는 것이다.
startsectioncommand.png


이 매크로는 모두 여섯 개의 인자를 갖는다.
  1. #1 카운터 명칭. section은 section이라는 카운터, subsection은 subsection이라는 카운터를 사용하기로 되어 있고 이 카운터들은 LaTeX과 class에서 이미 정의되어 있으므로 바꾸지 않는다.
  2. #2 단계(level). section의 level은 1이다. 장절명령의 level 값은 사전에 약속된 값이므로 위의 도표를 참고한다.
  3. #3 단락 머리 들여쓰기. 표제 문단의 들여쓰기 값이다.
  4. #4 표제 앞 수직간격. 앞 단락 마지막과 장절 표제까지의 수직 길이는 여기서 주어지는 길이값의 절대값이다.
    • 가령
      {-3.5ex \@plus -1ex \@minus -.2ex}
      
      일 때, 여기 설정한 값의 절대값만 생각하면 3.5ex plus 1ex minus .2ex이다. 이것은 3.5ex 기준으로 3.3ex에서 4.5ex까지 형편에 따라 늘리거나 줄일 수 있는 가변간격(소위 skip)이라는 의미이고, 실제 장절 표제 이전 마지막 단락의 마지막 줄 베이스라인에서부터 \baselineskip + \parskip + 여기 설정한 값 만큼의 간격이 주어지게 된다. 표준 문서에서는 baselineskip=12pt, parskip=0pt이므로, 12pt+0pt+3.5ex가 실제 간격으로 벌어지게 설정되어 있는 것이다. 마이너스 부호가 붙었다고 해서 절표제 기준으로 윗쪽으로 거슬러 올라가는 길이를 의미하는 것이 아니다. 마이너스 값은 단지, 절표제 다음에 처음 시작하는 문단의 들여쓰기(indenting)를 하지 말라는 뜻일 뿐이다. indentfirst라는 패키지는 강제로 이 값들을 모두 양수로 만들어준다. 음수든 양수든 절표제 앞쪽 길이는 똑같이 설정되며, 단지 첫단락 들여쓰기를 제어하기 위한 "기호"가 마이너스라고 생각하면 된다.
  5. #5 표제 다음 수직간격. 표제에서 다음 첫 단락까지의 길이는 여기서 주어지는 길이값의 절대값이다. 이 값이 음수이면 동행표제이기 때문에 표제에서부터 수평길이값이고 양수이면 첫단락까지의 수직길이값이 된다.
  6. #6 표제 스타일. 표제가 식자되기 전에 삽입할 매크로들이 온다. 주로 글꼴, 정렬 등에 대한 매크로를 배치함.

2 장절명령 템플릿

2.1 article의 간단한 템플릿

\documentclass{article}
\begin{document}

\maketitle

\section{제목}
   \subsection{부 제목}
         \subsubsection{부 제목}
\section*{제목} % *가 붙으면 숫자도 앞에 안붙고
                 % .toc에도 들어가지 않습니다.

\begin{thebibliography} ... \end{thebibliography}
\end{document}

/!\ 주의: article 클래스에는 \chapter가 없습니다.


2.2 book의 간단한 템플릿

\documentclass{book}
\begin{document}
%-------------------------책의 서두 (frontmatter)
\maketitle
    \section*{서문}
\tableofcontents
\listoffigures
\listoffigures
%------------------------본문
\part{제목}
\chapter{제목}
   \section{제목}
      \subsection{제목}
         \subsubsection{제목}
\chapter{제목}
\part{제목}
%----------------------뒷글 (backmatter)
\appendix
\chapter{제목}
\chapter{제목}
\begin{thebibliography} ... \end{thebibliography}
\begin{theindex} ... \end{theindex}
\end{document}

3 장절명령의 응용과 재정의 (in progress)

SamplesAndTemplates의 항목 "타이틀 페이지•장(章)•절(節)의 모양" 참조

3.1 장절 제목의 자리를 중앙이나 오른쪽으로 바꾸거나, 제목의 font를 어떻게 바꾸나요?

  • 방법1) 간단하게 장절명령(Sectioning commands)들을 새롭게 다른 이름으로 다시 정의한다. 예를 들면:
     %<preamble에서 >
     \newcommand{\ssection}[1]{%      중앙에
          \section[#1]{\centering\sc #1}}
     \newcommand{\ssubsection}[1]{%     오른 쪽에
          \subsection[#1]{\raggedleft\it #1}}
     %<본문에서>
        \ssection\ssubsection\section\subsection 대신 사용한다.
    
    그러나 이 방법은 Section 번호가 Bold로 나타나거나 *형식(예, \ssection*{})들도 다시 이런 식으로 정의해야한다는 단점을 가지고 있다. /!\ preamble이란, \documentclass[]{} 와 \begin{document} 사이, 보통 \usepackage{} 이후 \begin{document} 전을 말한다.

  • 방법2) sectsty 패키지 이용 이 패키지는 이런 상황에서 쉽게 사용할 수 있는 툴(tool)들을 제공한다.

  • 방법3) titlesec 패키지 이용 이 패키지는 sectsty와 비슷하나 좀 더 형식적으로 갖추어져 있는 방법을 제공한다. 이 패키지를 사용하면 제목에 더 많은 변화를 줄 수도 있다. 예: Uploads:titlesec_hfont.tex, Uploads:titlesec_hfont.pdf
  • 방법4) fncychap 패키지 이용, 한글과 함께 사용할 때는 hfncychap 사용 이에 대한 자세한 내용은 도이기님의 hfncychap를 본다. 불행히도 fncychap는 book class에서의 frontmatter, backmatter에 대해 전혀 관여하지 않으므로,이 때 목차나 frontmatter, backmatter들도 바꾸고 싶다면 tocbibind 패키지도 함께 사용 한다.

  • 방법5) 가장 쉽고 좋은 방법 -- book/report/article class 대신 memoir class 나 KOMA-script 사용 memoir.cls는 sectsty나 titlesec와 비슷한 툴(tool)들을 클래스 안에서 함께 제공하고 있다. KOMA-script도 \partformat, \chapterformat, \sectionformat, 등을 통해 비슷한 기능들을 제공한다.

<!> hangul과 다른 패키지들을 함께 사용했을 때 문제가 있을 수 있으므로 항상 주의하라. 위의 내용에 대한 문제가 있다면, 특히 패키지들의 사용상의 문제는 게시판에 꼭 문제 제기해 줄 것을 권장한다.

3.2 subsubsubsection는 어떻게 만드나요?


LaTeX는 section에 대한 명령어들을 \subsubsection까지만 정의 하고 있다. 이는 LaTeX의 창조자인 Leslie Lamport가 어느 누가 숫자가 앞에 길게 달린 제목을 원하겠는가라는 생각에서 나온 디자인 결정에 따른 것이다. 하지만 사실상 대부분의 LaTeX의 class들은 \subsubsection 이하의 절을 정의하는 명령어들을 갖추고 있다. \paragraph과 \subparagraph가 이들인데, 이 명령어들은 앞에 숫자도 안 붙고, 본문이 제목 옆에 약간의 간격을 두고 이어붙는다. 이는 물론 LaTeX의 언제든 다시 정의할 수 있다(\renewcommand)는 장점을 이용해 해결할 수 있다.

  • 방법1) titlesec 패키지 사용 이 패키지를 통해 \paragraph의 typesetting을 변환시켜 \section의 typesetting과 비슷하게 만들 수 있다.

  • 방법2) ltsect.dtx, <사용중인 class>.dtx와 The LaTeX Companion를 참고하여 다시 정의하기 예) report class를 사용중일 때
    \documentclass{report}
    %-------------------------<preamble>
    % section number depth counter를 우선 먼저 level을 7에서 9로 늘립니다.
    \setcounter{secnumdepth}{9}
    %앞에 붙을 숫자를 어떻게 표기할 지를 정합니다
    \renewcommand{\theparagraph}{\thesubsubsection.\roman{paragraph}}
    \renewcommand{\thesubparagraph}{\theparagraph.\alph{subparagraph}}
    %-------------------------<본문>
    \begin{document}
    \part{Part}
    \chapter{Chapter}
    \section{Section}
    \subsection{Subsection}
    \subsubsection{Subsubsection}
    \paragraph{Paragraph}
    \subparagraph{Subparagraph}
    \end{document}
    


3.3 장이나 절의 앞에 붙는 번호를 전체적으로 없애고 싶지만 목차는 만들고 싶습니다. 어떡하죠?


위의 표1에서 말씀드린 것처럼 장절 명령의 *형식을 사용하면 그 장이나 절의 제목은 목차에 들어 가지 안습니다. 그래서 이럴 때는
%------<preamble>
\setcounter{secnumdepth}{-2}
라고 하고, 보통 때와 같이 장절 명령어를 사용 합니다.

3.4 장절 제목 앞에 붙는 번호를 로마 숫자나 알파벳으로 바꾸려면 어떻게 합니까?


%--------<preamble>
\renewcommand{\thesection}{\thechapter.\Roman{section}}%article에서는 "\thechapter."을 지울 것
\renewcommand{\thesubsection}{\thesection.\Alph{subsection}}
\renewcommand{\thesubsubsection}{\thesubsection.\arabic{subsubsection}}
등등...
이 때 \arabic{ctr}, \roman, \Roman, \alph, \Alph등이 사용가능하다.

3.5 장절 제목이 header에 들어가기에 너무 깁니다. 어떡하죠?


일반적으로 LaTeX는 장절 제목을 페이지의 헤더에 넣을 수 있도록 한다. 그러나 페이지 헤더가 들어가는 자리가 좁아 종종 문제가 되는 경우가 있다. 이 때, LaTeX의 장절 명령어들은 위의 표에서 말한 것 같이
 \section[짧은 제목]{긴 제목} 
이라는 식의 옵션을 갖고 있다. 그러나 이 형식을 사용하면 짧은 제목이 목차에서도 사용된다. 이것이 문제가 된다면 목차에는 간략한 제목을 넣고 헤더에는 더 짧은 제목을 넣는 것이 더 바람직할 것 이다.

  • 방법1) 실제로, 대부분의 클래스의 장절 명령들은 `mark'라는 명령을 통해 제목에 대한 정보를 페이지 헤더에 전한다. 예를 들면, \chapter는 \chaptermark를, \section는 \sectionmark를 사용한는 것이다. 이를 이용하여 장명령을
    \chapter[간추린 제목]{원래의 긴 제목}%본문에는 긴 제목이, 목차에는 간추린 제목,
    \chaptermark{짧은 제목} %헤더에는 짧은 제목이 사용된다. 
    
    이라는 식으로 사용할 수있다.

    그러나, 보통 장은 새 장이 시작되는 페이지 헤더에 그 제목이 들어가지 않기에 이런 식으로 쉽게 되지만, 절은 그 절이 시작되는 페이지에 그 제목이 들어가므로 약간 더 복잡하다. 절명령은
    #! vim tex
    \section[간추린 제목]{원 제목% 
    	\sectionmark{짧은 제목}} % 이것은 새 절이 시작되는 장의 헤더를 위한 것임
    \sectionmark{짧은 제목} %보통 페이지의 헤더를 위한 것임 
    란 식으로 사용되야 한다. 이 때, 간출인 제목과 원래의 긴 제목이 같더라도 옵션형인
    \section[제목]{제목}
    이 사용되야 하는 것에 주의한다.

    사용하는 클래스가 장이 시작되는 페이지에도 헤더를 넣는다면 위의 식으로 장명령도 사용 되어야 한다.

    /!\ 주의: titlesec 패키지는 헤더를 완전히 다른 식으로 다루기에 이 방법을 사용하지 말고 그 패키지의 설명서(documentation)를 참고하도록 한다.

  • 방법2) memoir 클래스는
     \section[middling version][terse version]{verbose version} 
    라는 식의 옵션형을 장과 절 모두를 위해 갖추고 있어 사용자가 쉽게 이용할 수 있다.

3.6 수식, 그림, 표, 참고 사항, theorem 등의 번호를 장이나 절에 따라서 다시 시작할 수 있나요?


book과 report 클래스에서는 수식, 그림, 표, 참고 사항등의 번호가 장에 따라 이런 식으로 된다.이는 master와 slave counter를 통해 저절로 되는 것으로 master counter가 더해지면 그 밑의 모든 slave counter들의 값이 다시 0으로 정해진다.
예를 들어, 사용자가 직접 program이란 환경을 정의할 때, 절에 따라 각 프로그램에 번호가 붙기를 원한다면,
\newcounter{program}[section] % program이 slave이고 section이 master이다. 
라는 식으로 관련된 카운터를 처음에 정의할 때 아예 관계를 함께 정의하면 된다.

그러나 패키지나 클래스에서 이런 수식과 그림 같은 물건(object)들이 정의되어 있지만 그 물건들의 카운터 성격을 재 정의 할 수 있게 하는 programmer interface는 함께 제공하지 않는 경우에는
  • 방법1)
    %-------------<preamble>
    \makeatletter
            \@addtoreset{equation}{section}
            \@addtoreset{figure}{section}
    \makeatother
    \renewcommand{\theequation}{\thesection.\arabic{equation}}
    \renewcommand{\thefigure}{\thesection.\arabic{figure}}
    
    이 때 amsmath 패키지를 사용중이라면 수식은 간단히
    \renewcommand{\theequation}{\thesection.\arabic{equation}}
    \numberwithin{equation}{section}
    
    로 처리 할 수 있다.

    예: Uploads:sec_eqn_fig_num_test.tex, Uploads:sec_eqn_fig_num_test.pdf
  • 방법2) chngcntr 패키지 사용 이 패키지는 \counterwithin을 통해 addtoreset 명령을 사용할 수 있도록 한다.
    %-----------<preamble>
    \usepackage{chngcntr}
    %----------<본문>
    \counterwithin*{equation}{section}
          %equation 카운터를 section 카운터의 slave로 만든다
    \counterwithin{figure}{section}
          %위와 같이 figure 카운터를 section 카운터의 slave로 만들고 게다가
          % \thefigure를 <section 번호>.<figure 번호>의 식으로 재 정의한다.
    


/!\ 주의: 이 때 master 카운터가 페이지 카운터라면 이 방법들을 사용하지 않는다.

3.7 report 클래스에서 장 표제 모양을 바꾸고 싶어요.

before chapheader_before.jpg

after chapheader_after.jpg

위와 같은 설정은 \@makechapterhead를 재정의하면 됩니다. 다음 설정은 HLaTeXeuc-kr.tex에서 빌어온 코드를 수정한 것입니다.
\makeatletter
%% from euc-kr.tex (HLaTeX)
  \def\@makechapterhead#1{%
%    \vspace*{50\p@}%
    \vspace*{0pt}%
    {\parindent \z@ \raggedright \normalfont
      \ifnum \c@secnumdepth >\m@ne
        \centering  %%% <-----------------
%        \huge\bfseries
        \LARGE\bfseries
        \pre@chaptercnt\thechapter\post@chaptercnt
%        \par\nobreak
%        \vskip 20\p@
      \fi
%      \interlinepenalty\@M
%      \Huge \bfseries #1\par\nobreak
      \quad #1%
      \vskip 40\p@
    }}
\makeatother

memoir와 같은 클래스를 사용한다면 위와 같은 renewcommand 방식이 아니라 장 표제를 제어하는 매크로에 의하여 보다 쉽고 안전하게 원하는 모양을 구현할 수 있습니다.

4 그밖의 사항들


DeleteMe 음... 접속조건이 썩 좋으신 편은 아닌 듯도 한데, 좋은 페이지 만들어주셔서 감사합니다. ;) --Karnes
아 예... 호주는 아직 ADSL접속 가격이 쌔, 전 계속 56K 모뎀으로... 제 netconfig과 emacs 테스트할 겸해서 기본적인것 인것만 대충 모아 보았습니다. notebook 고치는 동안 옛날에 쓰던 Redhat6.1으로 돌왔더니 왜 이리 안되는 것도 많고 업데이트 할 것도 많은지 매일 컴퓨터랑 신경전만 벌이다 지쳐 요즘은 Nintendo게임에 열중하고있답니다 :)
두번째 부분은 아무레도 Q&A식으로 꾸미는 것이 나을것 같아 자료들만 우선 모으고 있습니다. --HJhan
앗싸~ 어제부터 makeatletter가 도대체 뭐지 라고 고민하고 있었는데 아침에 보니 페이지가 떡하니 생겼네요. 그래서 어제 보던 몇몇 관련글에 대한 링크를 달아 봅니다. 물론 다 알고 계신 거라 생각되지만 정리하시는데 도움이 좀 되시라고 ;) 지만들기도 하나 만들어야 할까요? 앗싸~!--hermian
''감사합니다. \makeatletter\makeatother에 대해서는 찾으셨는지요.제 생각에는 아주 처음부터 다시 명령어를 정의 하는 것 보다, 여러 패키지들을 사용하는 방법을 강조하는 것이 어떨까 했습니다.초보자들에게나 보통 상황에서 그리하는 것이 더 깔끔할것같아서요...참고하겠습니다.'' --HJhan



Contributors : HJhan


^
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2007-06-03 17:24:07
Processing time 0.0812 sec