KTUGFaq

KTUG FAQ

로그인:
비밀번호:
가입
A king's castle is his home.
FrontPage › 다단편집
한 페이지에 들어오는 텍스트의 Column을 (段)이라 하고, 2단 이상이 오는 문서를 편집하는 것을 다단편집이라 한다.

목차

1 2단편집
1.1 twocolumn 옵션
1.2 \twocolumn 명령
1.3 multicol 패키지
2 2단 편집에서의 몇 가지 문제
2.1 단 사이의 간격, 단 사이의 rule
2.2 2단 편집에서의 떠다니는 개체 위치 지정
2.3 두 단에 걸치는 그림, 표, 수식
2.4 multicol 패키지를 사용할 때의 그림 삽입 문제
2.5 2단 편집에서 abstract 처리하기
2.6 마지막 페이지의 텍스트 밸런싱
2.7 2단편집에서 각주의 처리
3 TIP : 1단과 2단을 한 페이지 내에 배열하기
3.1 일부만 1단으로(2단 -> 1단 -> 2단)
3.1.1 twocolumn 옵션을 썼을 때
3.1.2 cuted와 midfloat의 strip 환경
3.1.3 multicol 패키지
3.1.4 revtex4
3.2 1단 -> 2단 전환
3.3 2단 -> 1단 전환
4 2단편집 이외의 다단편집
5 평행다단 편집

1 2단편집

1.1 twocolumn 옵션

\documentclass[twocolumn]{article}

1.2 \twocolumn 명령

\twocolumn
  • \twocolumn 명령은 새로운 페이지를 만든다.
  • \twocolumn 명령에는 선택 인자([ ])를 가질 수 있다. 이 선택 인자 안에 오는 내용은 새로운 페이지를 만들고 2단 조판을 시작하기 전에 상단 일부에 1단으로 들어간다. 타이틀 행을 식자하는 데 요긴하게 쓸 수 있다.
\twocolumn[%
  여기에 오는 내용은 1단으로 조판됨%
]

2단 내용 시작.

1.3 multicol 패키지

See KTUGSetup:11143 for a sample.
\usepackage{multicol}

\begin{multicols}{2}
....
\end{multicols}
  • multicol 패키지는 2단뿐 아니라 3단 이상의 텍스트도 배열할 수 있다는 장점이 있다.
  • 단의 수를 조정하면서 새로운 페이지를 시작하지 않는다.
  • 명령 \end{multicols}에서 텍스트 밸런싱을 처리해준다.
  • 각주는 여러 단에 걸친 page body width로만 조판된다.
  • floats들은 figure*, table*로만 들어간다. 즉, 단 안에 가두어지지 않는다.

2 2단 편집에서의 몇 가지 문제

일반적인 [twocolumn] 옵션으로 문서를 작성할 때 발생하는 문제와 해결책의 팁을 모아본다.

2.1 단 사이의 간격, 단 사이의 rule

단 사이의 간격, 단 사이의 구분선은 다음과 같은 길이변수로 설정한다.

  • \columnsep : 단 사이의 간격
  • \columnseprule: 단 사이에 그어질 선의 두께. 초기값은 0pt이고 선은 나타나지 않는다.

두 변수가 모두 길이변수이므로 \setlength\addtolength로 바꿀 수 있다. 예를 들어, 다음과 같이 0.4pt 두깨의 단 구분선을 그을 수 있다.
\setlength\columnseprule{0.4pt}
\begin{multicols}{2}
...
\end{multicols}

2.2 2단 편집에서의 떠다니는 개체 위치 지정

  • [twocolumn] 문서에서는 떠다니는 개체[b] 위치 지정자를 쓸 수 없다. 이것을 사용하려면 stfloats 패키지를 이용한다.
  • <!> LaTeX2e에서는 float를 쪽의 (중간이나) 아래에 두는 것이 "정상적으로는 가능하지 않다"(not normally possible in LaTeX2e)고 하였네요. 학회나 출판사에 따라서는 2단 편집에서 float를 쪽의 중간이나 아래 두는 것을 금하는 곳도 있습니다(See KTUGOperate:17074).-Yhchoe

2.3 두 단에 걸치는 그림, 표, 수식

figure나 table과 같은 floating objects들(심지어 긴 수식을 floating object로 만들어[1])은 별표붙인 환경으로 두 단에 걸칠 수 있다. cf. 떠다니는개체. KTUGOperate:17023
\begin{figure*}
...
\end{figure*}
또는
\begin{table*}
...
\end{table*}
figure* 환경, table* 환경은 떠다니는 개체이다. 따라서 이렇게 넣은 그림, 표, 수식의 위치는 LaTeX이 결정한다. 만약 플로팅된 위치가 마음에 들지 않는다면 [!h]와 같은 위치지정자로 플로팅을 억제해보는 방법이 있다. 대부분의 경우 두 단에 걸치는 그림은 [t] 위치로 가는 경우가 많다. 플로팅시키고 싶지 않다면 figure* 환경을 사용해서는 안된다. 다른 방법을 찾아보라. 참고로 here 패키지는 두 단에 걸치는 figure*의 위치를 되도록 현재 위치에서 만들어준다.

----
  • [1] 이 때 수식 번호 등이 일관되게 나오게 한다. 우선 프리앰블에 \newcounter{mytempeqncnt} 등을 넣고 환경 속에서도 \setcounter{mytempeqncnt}{\value{equation}} \setcounter{equation}{5} 로 시작한 후 실제 floating objects를 넣고 \setcounter{equation}{\value{mytempeqncnt}} \hrulefill \vspace*{4pt} 로 마무리 하면 독자들이 읽기 편하다.

2.4 multicol 패키지를 사용할 때의 그림 삽입 문제


multicol에서 그림을 넣을 수 없는 것은 아닙니다. float를 각 단 안에 가둘 수 없는 것입니다. 즉, 모든 float(table, figure)는 두 단에 모두 걸치는 형식으로만 넣을 수 있다는 것입니다.

floating 시킬 수 없지만 그림은 넣을 수 있습니다. 즉, non-float로 \includegraphics하면 됩니다. 이 경우 caption이 문제라면, caption 패키지, ccaption패키지 이용하는 방법도 있고(CaptionOfFloats), 다음과 같은 간단한 방법도 있습니다.
\makeatletter
\newenvironment{figureincolumnhere}
  {\def\@captype{figure}}
  {}
\makeatother

....

\begin{figureincolumnhere}
\includegraphics{myfig}
\caption{test my fig}\label{fig:test}
\end{figureincolumnhere}

Herbert Voss 씨의 "Multicols with Pictures"라는 문서([http]2columnArticleWithPics.pdf)에 이 문제에 대한 힌트가 있습니다.

2.5 2단 편집에서 abstract 처리하기

Q. 요약문(abstract)가 단 안으로 들어가지 않고 2단 본문이 시작되기 전에 배치하고 싶을 때.

  1. abstract 패키지의 onecolabstract 환경을 \twocolumn의 옵션 인자로 쓰는 방법

    abstract 패키지( CTAN:macros/latex/contrib/abstract)를 포함하면 onecolabstract 환경을 쓸 수 있다.
    %==============================
    \usepackage{abstract}
    %...
    \begin{document}
    \twocolumn[
       \maketitle
       \begin{onecolabstract}
        여기에 요약문이....
       \end{onecolabstract}
    ]
    %==============================
    


  2. revtex4 를 경우: \maketitle 앞에 abstract 환경을 두면 1칼럼으로 조판된다.

  3. MemoirClass에서:
    \twocolumn[
     \maketitle
     \begin{onecolabstract}
        ....
     \end{onecolabstract}
    ]
    


  4. Preamble에서 \@maketitle을 재정의하는 방법 :
    %----------preamble----------------
    \makeatletter
    %%%%
    \renewcommand\@maketitle{%
      \newpage
      \null
      \vskip 2em%
      \begin{center}%
      \let \footnote \thanks
        {\LARGE \@title \par}%
        \vskip 1.5em%
        {\large
          \lineskip .5em%
          \begin{tabular}[t]{c}%
            \@author
          \end{tabular}\par}%
        \vskip 1em%
        {\large \@date}%
      \end{center}%
      \par
      \vskip 1.5em%
      \begin{center}%
      \abstract@produce
      \end{center}%
      \vskip 1.5em}
    %
    %%%
    \newbox\abstractbox
    \renewenvironment{abstract}{%
       \lrbox\abstractbox
         \minipage{.8\textwidth}%
         \centerline{\bfseries\large\abstractname}%
         \bigskip\small\it
      }{%
       \endminipage\endlrbox}
    \def\abstract@produce{%
       \leavevmode\box\abstractbox\par
    }
    \makeatother
    %--------------------------------------
    
    이 설정이 효과를 가지려면, \begin{abstract} ~~~ \end{abstract} 부분이 반드시 \maketitle 명령 이전에 와야 한다. 위의 코드에서는 눈에 띄게 하기 위해서 abstract 부분을 이탤릭 처리되어 있다.(\small\it 부분) 이 부분을 원하는 모양으로 수정해서 쓰면 된다.

2.6 마지막 페이지의 텍스트 밸런싱

Q. 마지막 페이지의 텍스트를 양단으로 균등분할하는 방법

  1. flushend 패키지를 이용하면 마지막 페이지를 균등분할(밸런싱)해줍니다. 다만, 이 패키지는 마지막 페이지의 왼쪽 단 아래, 즉 오른쪽 단으로 넘어가는 부분에 각주가 왔을 때, 페이지를 균등분할하면서 각주 위치를 잘못 잡아주는 버그가 있는 것으로 알려져 있지만, 그 이외의 경우에는 잘 쓸 수 있습니다.
    <!> 만약 마지막 페이지 각주에서 이런 일이 벌어지면, 원래 \footnote를 두었던 곳에는 \footnotemark만 두고 텍스트 밸런싱에 영향을 받지 않는 위치에 \footnotetext를 둠으로써 문제를 피해갈 수 있습니다.
  2. \usepackage{flushend}
    


  3. balance 패키지는 twocolumn 모드에서 마지막 페이지 균등분할을 가능하게 합니다. flushend와 비교할 때 각주 위치는 더 잘 해결해주는 듯합니다.
    \documentclass[twocolumn]{article}
    \usepackage{balance}
    
    \balance
    


  4. multicol 패키지는 마지막 페이지 밸런싱을 자동으로 처리해줍니다. 다만 flushend나 balance와 함께 써서는 안됩니다.

2.7 2단편집에서 각주의 처리

  1. [twocolumn]에서의 각주
    [twocolumn]으로 조판하면 각각의 단이 가상의 페이지처럼 처리된다. 그러므로 각주도 각 단의 아래에 온다. 페이지 레이아웃의 관점에서 이것이 바람직하지 않은 경우도 있다.

  2. multicol에서 각주
    multibol 패키지에서 각주는 각 단의 아래에 붙지 않고 페이지 하단에 식자된다. 그러므로 각주의 columnwidth는 textwidth와 같고, 1단 형식으로 조판된다. 각주가 짧을 때 이 방법은 지나치게 각주의 문단폭(width)이 길어져서 불편한 경우가 있다.

  3. ftnright 패키지
    ftnright 패키지를 사용하면 twocolumn 모드에서 모든 각주가 오른쪽 단의 아래에 모아서 배치된다. 즉, 한 페이지의 왼쪽 단은 각주를 붙이지 않고 그 페이지의 각주를 오른쪽 단의 아래에 붙여주는 것이다.

  4. Uploads:ftnrighttest.pdf
    첫 페이지는 ftnright를 사용한 경우이고, 두번째 페이지는 ftnright 없이 twocolumn으로 조판한 경우이다.


3 TIP : 1단과 2단을 한 페이지 내에 배열하기

3.1 일부만 1단으로(2단 -> 1단 -> 2단)

3.1.1 twocolumn 옵션을 썼을 때

  1. cuted 패키지의 strip 환경을 쓴다.
    \usepackage{cuted}
    
    \begin{strip}
    ...
    \end{strip}
    
  2. 위의 소항목 "두 단에 걸치는 그림, 표, 수식" 참조

3.1.2 cuted와 midfloat의 strip 환경

cuted와 midfloat에는 똑같은 이름의 환경 strip이 정의되어 있다. 이 두 환경의 차이는 주변 텍스트가 어떤 식으로 배치되느냐의 문제이다. 다음 그림,
twocolumnorder.jpg
cuted의 strip 은 1-2-3-4-5 순이고 midfloat의 strip은 1-3-4-2-5 순이다. 다음 테스트 문서를 참고할 것. midfloat에서는 오른쪽 컬럼 위치에 strip이 올 수 없다.

3.1.3 multicol 패키지

multicols 환경을 이용한다. multicols 환경을 이용하기 위해서는 클래스 옵션이 onecolumn(디폴트이던 아니던)이라야 한다.

3.1.4 revtex4

(./) 두 단에 걸치는 긴 수식은 widetext 환경을 쓴다.
\begin{widetext}
...
\end{widetext}
예제는 UsefulDocuments의 항목 2 한국물리학회, "새물리" 샘플 논문에 첨부한 np2.zip을 풀면 있다.

\widetext\narrowtext 명령형 매크로도 있다.

(./) revtex4에서도 두 단에 걸치는 넓은 표나 그림은 widetext 환경에 넣지 않고 table* 또는 figure* 환경을 쓴다.->KTUGOperate:16793

3.2 1단 -> 2단 전환

  1. multicols 패키지를 사용한다면 간단히 \begin{multicols}{2}를 시작함으로써 전환할 수 있다.

  2. twocolumn 문서라면, \twocolumn 명령의 옵션 인자를 이용한다.
    \documentclass[a4paper]{article}  % 여기서 twocolumn을 선언하지 않음
    \usepackage{a4wide} % 이단 문서는 페이지 가로길이가 조금 길어져야 함.
    
    \begin{document}
    \twocolumn[%
       여기에 페이지 상단에 올 1단 텍스트의 내용을 넣습니다.
    ]
    여기서부터 페이지 하단의 2단 텍스트가 시작됩니다.
    
    \end{document}
    


3.3 2단 -> 1단 전환

KTUGOperate:13200 (Karnes) 에서 인용.

twocolumn 문서의 경우는 출력 루틴이 각 단을 하나의 페이지인 것처럼 짜는 방식입니다. 따라서 일 단 오른쪽 단을 사용해버리면 그 아래에 1단 박스를 넣을 수 없습니다. 논리적으로 이전 페이지로 되 돌아가지 않으면 안되기 때문인데, 이전 페이지로 되돌아갔다 하더라도 다음 페이지의 vsize를 자동 으로 조절할 길이 없기 때문입니다.

twocolumn 문서에서는,

한 페이지 내에서 1단 -> 2단 변경은 비교적 쉽지만 한 페이지 내에서 2단 -> 1단 변경은 어렵다는 것입니다.

동일한 페이지의 상단을 2단으로, 나머지를 1단으로 조판하는 방법을 생각해보겠습니다.

A. twocolumn 문서

(0) textpos와 같은 절대 위치 지정 패키지를 이용하거나 eso-pic과 같은 페이지별 제어가 가능한 패키지를 이용하여, 상단 2단 조판에는 관계 없이 페이지 하단에 1단짜리 박스를 강제로 배치하는 방법. 이 방법을 쓰려면 2단 부분을 balancing해주어야 하고, 아래쪽 1단 박스의 세로 높이를 정밀하게 계산해야 하는 불편함이 있습니다.

(1) cuted package의 strip 환경을 사용하는 방법 2단 텍스트의 마지막 부분의 balancing을 해준다는 점을 이용한다.
2단 텍스트.............
\begin{strip}
1단 텍스트..............
\end{strip}
~ \newpage

이 방법을 쓸 때 주의할 점은 다음 두 가지 입니다.
  1. cuted 패키지의 버그(?)인데, strip 이전의 텍스트 밸런싱을 하면서 마지막 오른쪽 단 서너 줄을 새로운 박스로 가져다 붙이는데, 이 때 위쪽 텍스트와 vskip 값이 고정되어 있다는 문제점. 문서의 기본 행간이 1.0일 때는 문제가 없으나 한글문서와 같이 1.3, 1.5를 사용하는 경우에는 행간이 좁아지는 부분이 생긴다는 것입니다. 이것을 고치려면.... 한참 고생해야 할 것 같습니다. :(

  2. strip 환경 바로 다음에 \newpage나 공백이 오지 못한다는 점입니다. 위의 코드에서 보였듯이, 그러므로 ~ 문자 하나를 넣어줌으로써 이 문제를 피해갈 수 있습니다.

(2) 제가 가끔 쓰는 "불편한" 트릭 이것은 상단이 2단으로 되는 페이지만을 먼저 짜고, 그 아래에 올 1단 텍스트는 stfloat 패키지를 이용하여 {figure*}[!b] 위치로 넣는 방법입니다. 신경써야 할 부분이 아주 많은데, 몇 가지만 지적하겠습니다.
  1. \begin{figure*}[!b] 로 시작하는 1단 부분은 반드시 왼쪽단 텍스트로 갈 부분에 있어야만 합니다. 이유는, 오른쪽 단은 새로운 페이지로 간주된다는 점을 잘 생각하시기 바랍니다.

  2. balance 패키지로 이 부분을 balancing합니다. balance 패키지가 가진 몇 가지 문제 때문에 일어나는 이상한 동작이 없다고 가정했을 때, balancing 된 부분이 아래쪽에 float를 넣지 못할 정도로 세로 길이가 길어지면 안됩니다.(당연히). 그러므로 이 페이지에 오는 상단 부분의 텍스트 양에도 주의를 기울여야 합니다.

  3. 하단의 1단 텍스트는 하나의 float로 가두어지는 것이므로, 다음 페이지로 넘어가지 않습니다. 그러므로 만약 뒷 페이지까지 이어지는 텍스트를 이 페이지의 하단에 두려면 텍스트 양을 적절히 조절하고 반드시 \onecolumn으로 새로운 페이지를 시작하도록 해야 합니다.

사실상 이 방법은 사용자가 텍스트의 양을 조절해가면서 수작업으로 페이지를 정렬하는 것과 마찬가지입니다. 그러나 도저히 multicol을 쓸 수 없는 상황이라면 이 방법을 이용하는 수밖에 없습니다. 몇 번의 시행착오가 필요할지도 모릅니다.

B. multicol 패키지

사실상 이런 문제, 즉 2단 -> 1단을 동일한 페이지에 구현하는 문제의 거의 유일한 해결책이 multicol입니다. multicol의 몇 가지 제한에도 불구하고 이 패키지를 버리지 못하는 이유는 바로 이 때문이라고 해도 과언이 아닙니다.

제가 생각할 때는, 각주가 많지 않고 장식적인 문서, 그리고 그림을 floating 시킬 필요 없이 here에만 넣으면 되는 문서라면 multicol을 이용하는 것이 가장 합리적이라고 생각됩니다.

4 2단편집 이외의 다단편집

multicol 패키지를 이용하면 3단 이상의 다단 편집이 가능하다. 다만 떠다니는 개체는 전체 단에 걸치는 형식(figure* 또는 table*)으로만 넣을 수 있고 각주는 단별로 배치되지 않고 모든 단에 걸치는 1단 형식으로 조판된다.

5 평행다단 편집


^
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2009-02-18 00:19:48
Processing time 0.1032 sec