KTUG마당은 KTUG를 방문하는 모든 이용자가 대화를 나누고 소식을 전하는 곳입니다.

  • 로그인 없이 자유롭게 글을 읽고 쓸 수 있는 철학은 처음과 같이 계속됩니다.
  • Team Blog의 글을 이곳 게시판의 "정보글"로 모았습니다. Team blog는 기고자가 올린 글에 질문과 답을 받는 부담을 줄이기 위하여 댓글을 허용하지 않았습니다. 그러나 이곳 게시판으로 모으면서 댓글을 달 수 있습니다. 게시물을 작성하실 때 댓글을 원하지 않으시면 댓글을 허용하시지 않으시기를 바랍니다. 또한 불필요한 소모성 댓글을 달지 않도록 주의하여 주시기를 바랍니다.
  • TeX과 관련된 질문이나 답변은 QnA 마당을 이용하십시오. TeX과 관련된 질문은 지웁니다
  • MathJax를 이용한 수식조판을 사용하실 수 있습니다. 여기를 참조하세요.
  • 최근 스팸글의 등록 빈도가 높아 졌습니다. 이를 막기위하여 짧은 시간내에 다시 글이 등록되는 IP를 막거나, 광고글을 막기위하여 금지어로 .com, .net등을 설정하고 있습니다. 다소간의 불편함이 있으시더라도 양해 바랍니다.
  • 사용하는 편집기를 스마트에디터에서 CKeditor로 변경하였습니다. 편집기에서 [enter]를 누르면 <p> 태그가 들어가고, 문단으로 생각하고 한줄을 비웁니다. 글줄만 바꾸려면 shift-enter 를 누르시면 <BR>가 들어가므로 용도에 맞게 나누어 쓸 수 있습니다.

정보글 \vsplit : 수직 박스 쪼개기

2011.07.06 11:40

DohyunKim 조회 수:3545 추천:1

아래 기사의 verbatim 배경색 칠하기는 박스를 이용하므로 페이지 끝에 박스가 걸렸을 때 잘라지지 않는다는 문제가 있거니와 이를 해결해주는 프리미티브가 \vsplit 이다. 예제를 보이고자 하는데 코드가 다소 복잡하므로 보고싶은 분만 보시면 된다. 다만 \vplit 명령으로 수직박스를 둘로 쪼갤 수 있고 따라서 박스를 두 쪽에 걸쳐 조판할 수 있다는 것만 알고 계시면 좋겠다. framed 패키지에서 바로 이 프리미티브가 사용되고 있다.

\usepackage{xcolor}
\usepackage{etoolbox}
\newbox\n \newbox\m   % vsplit에서 사용할 박스 두 개의 주소를 선언한다
\preto\verbatim{\medbreak\setbox\n\vbox\bgroup\hsize.95\linewidth}
\appto\endverbatim{\egroup\splitverbbox}
\def\splitverbbox{%
  % 현재 페이지의 남은 수직 공간을 계산한다. \baselineskip은 실험값
  \dimen0\dimexpr \ifdim\pagegoal=\maxdimen\vsize\else\pagegoal\fi
    -\pagetotal-\baselineskip \relax
  % 박스 높이가 남은 공간보다 크다면
  \ifdim\dimen0<\ht\n
    % vsplit! 이게 핵심. 남은 길이만큼 쪼개서 \m에 할당. 나머지는 \n에 남는다
    \setbox\m=\vsplit\n to\dimen0
    % m이 빈 박스가 아니고 높이가 충분하다면(이것도 실험값) 배경색을 칠한다
    \ifvoid\m\else \ifdim\ht\m>.5\baselineskip
      \noindent\colorbox{gray!30}{\box\m}\par \fi\fi
    % 페이지가 찼으므로 output으로 보내고 \n에 대해 재귀
    \eject \expandafter\splitverbbox
  \else
    % \n을 위한 공간이 되므로 약간의 검사를 거쳐 배경색 칠한다
    \ifvoid\n\else \ifdim\ht\n>.5\baselineskip
      \noindent\colorbox{gray!30}{\box\n}\medbreak \fi\fi
  \fi}

수직 모드에 대해서는 필자가 잘 알지 못하므로 위 코드는 분명 불안정하고 엉성할 테지만 다만 기본적인 작동원리를 보이고자 할 따름이다.

번호 제목 글쓴이 날짜 조회 수
공지 2019 한국텍학회 제12차 정기총회 및 학술대회 [2] yihoze 2019.01.04 52235
공지 KTUG 사설저장소 브라우저 베이드프즈 2017.07.16 55314
공지 장애 복구 안내 [9] 관리자 2017.05.04 58851
공지 TeX Live 2016 설치 안내 [7] 관리자 2016.06.05 92692
291 noweb, dot, 그리고 LaTeX을 위한 dot2tex 양사장 2011.07.28 24906
290 상용로그표 : 루아텍 버전 DohyunKim 2011.07.14 3492
289 상용로그표 file karnes 2011.07.13 3417
288 Right to Left DohyunKim 2011.07.12 2613
287 windows에서 jbig2을 이용한 pdf만들기 file 샘처럼 2011.07.09 40351
286 XeLaTeX 한글 문서에서 한자와의 베이스라인 맞추기 karnes 2011.07.06 3684
» \vsplit : 수직 박스 쪼개기 [6] DohyunKim 2011.07.06 3545
284 \unexpanded 와 etoolbox 패키지 DohyunKim 2011.07.05 2678
283 추억의 문서 <글쓰기와 병법> [1] file nova de hi 2011.07.04 28349
282 hcrnumbers를 oblivoir enumerate에서 쓰기 file karnes 2011.06.29 2733
281 함초롬의 nalt 속성을 이용해보자 file DohyunKim 2011.06.29 2679
280 추억의 문서 [생활한자] [5] nova de hi 2011.06.27 37169
279 \XeTeXinputnormalization DohyunKim 2011.06.27 2644
278 jbig2 사용법 file DohyunKim 2011.06.22 3213
277 graphicx 패키지 안 쓰고 이미지 삽입하기 DohyunKim 2011.06.22 3154
276 $$ 를 쓸까? \[ 를 쓸까? file DohyunKim 2011.06.21 2646
275 파이 구하기: 시각화 버전 file karnes 2011.06.18 2902
274 난수로 괘를 뽑아보았다 file karnes 2011.06.15 2687
273 몬테카를로 기법으로 파이 구하기: 정수 연산 버전 DohyunKim 2011.06.15 3010
272 "a unit of 65536" karnes 2011.06.14 2697



XE Login