-
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