ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • tcolorbox가 페이지 하단에 걸릴 때
    TeX과 친구들 2020. 11. 11. 15:49

    장치 디스플레이에 표시되는 것들을 표현해야 한다. 도트 폰트를 사용하고 싶었는데 다행히 프리웨어인 것들을 쉽게 찾을 수 있었다. Dot Matrix Normal 폰트를 \dpfamily에 할당했다.

    왼쪽에 디스플레이 내용이, 오른쪽에 설명이 위치하는 것이 이상적일 것 같다.

    사용자 인터페이스를 두고 좀 고민했다.

    \display{내용 \\ 내용 \par 내용 }{설명 \\ 설명 \par 설명}

    이것은 여러모로 바람직하지 않다.

    내용을 verbatim으로 받아 파일로 저장하는 환경을 만들었다. 그리고 그것을 불러들여 (minipage로 감싼) tcolorbox 박스에 넣고, 설명을 그 옆에 오는 minipage에 넣는 환경을 만들었다.

    \begin{display}
    INFO|S:next, P:exit
    7.IP:192.168.10.13
    \end{display}
    \begin{dispdesc}
    데이터 로거의 IP 주소
    \end{dispdesc}

    일이 쉽게 끝나는가 했다. 저 박스가 페이지 하단에 걸릴 때 뒷 페이지들이 제대로 식자되지 않는 증상이 나타났다. 비슷한 문제를 전에도 여러 차례 겪었다. 까닭은 잘 알지 못하나 tcolorbox는 parbox와 달라서, tcolorbox를 포함하여 만든 매크로는 종종 기대한 대로 작동하지 않는다.

    저 박스의 높이를 재고 그것을 페이지의 남은 공간과 비교하여, 부족하면 다음 페이지로 넘기도록 매크로를 고쳤다. 다행히 기대한 대로 해결되었다. 이런 경우에 수직 간격을 조정하는 잔손질도 불가피한데 수고로운 정도는 아니다.

    \NewDocumentEnvironment { display }{}
    {
        \group_begin:
        \exp_args:Nx \verbatimoutput { \tmpvrb }
    }{
        \endverbatimoutput
        \group_end: 
    }

    \NewDocumentEnvironment { dispdesc }{ s +b }
    {
        \hbox_set:Nn \l_tmpa_box 
        {
            \begin{minipage}{\linewidth}
                \begin{minipage}[t]{.4\linewidth}
                    \vspace{0pt}
                    \begin{DisplayBox} 
                        \verbatiminput{ \tmpvrb }
                    \end{DisplayBox}
                \end{minipage}
                \hfill
                \begin{minipage}[t]{.57\linewidth}
                    \vspace{.5\baselineskip} #1
                \end{minipage} 
            \end{minipage}
        }
        \dim_set:Nn \l_tmpa_dim { \box_ht:N \l_tmpa_box + \box_dp:N \l_tmpa_box }
        \dim_add:Nn \l_tmpa_dim { .75\baselineskip }
        \dim_set:Nn \l_tmpb_dim { \pagegoal - \pagetotal }
       \dim_compare:nT { \l_tmpa_dim > \l_tmpb_dim }
      {
          \pagebreak
            \mbox{}\par \vspace{ -1.5\baselineskip }
       }
        \box_use:N \l_tmpa_box 
       \IfBooleanF{#1}

      {
          \vspace{ -.5\baselineskip }
      }

    }{} 

     

    'TeX과 친구들' 카테고리의 다른 글

    편집 디자인  (0) 2020.12.23
    polyglossia와 일본어  (0) 2020.12.23
    Graphviz  (0) 2020.10.05
    부 (part) 차례 만들기  (0) 2020.09.03
    Noto 수식 폰트  (0) 2020.08.24

    댓글

Designed by Tistory.