
XeLaTeX 소스 형식으로 여러 데이터 목록을 생성하는 코드가 있습니다. 데이터 라인이 매우 짧기 때문에 환경에서 제시하고 있습니다 multicols
. 각 목록에는 몇 가지 제목이 있습니다. 때로는 데이터 목록이 매우 짧습니다(단 하나의 제목과 한 줄의 데이터). 이 경우 제목과 다음 줄이 여러 열에 걸쳐 분할되는 것을 방지하기 위해 고군분투하고 있습니다. 다음은 문제를 보여주는 MWE와 다음을 사용하여 문제를 해결하려는 시도입니다 \needspace
.
\documentclass[a4paper]{article}
\usepackage{multicol}
\usepackage{needspace}
\newcommand{\tblheading}[1]{\needspace{2\baselineskip}\textbf{#1}\newline}
\begin{document}
\begin{multicols}{3}
\tblheading{Heading}
Entry
\end{multicols}
\end{document}
\Needspace*
대신에 를 사용해 보았고 \needspace
, \raggedcolumns
에서 요청된 공간을 늘리고 , 대신 에 또는 을 2\baselineskip
사용해 보았지만 무엇을 시도해도 이 두 줄이 두 열 사이에 분할되는 것을 막을 수는 없습니다. 누구든지 도와줄 수 있나요?\par
\\
\\*
\newline
minipage
(원칙적 으로 환경을 사용할 수 있다는 것을 알고 있지만 데이터가 생성되는 방식으로 인해 매크로 samepage
내에서 특별한 처리를 유지해야 하기 때문에 여기서는 이것이 가능하지 않다고 생각합니다 .)\tblheading
답변1
KOMA의 \minisec 명령은 대략 다음과 같은 작업을 수행합니다.
\documentclass[a4paper]{article}
\usepackage{multicol}
\makeatletter
\newcommand\minisec[1]{%
\if@noskipsec \leavevmode \fi
\par
\@afterindentfalse
\if@nobreak
\everypar{}%
\else
\addpenalty\@secpenalty\addvspace{1.5ex}% space before, adjust if needed
\fi
{\parindent \z@
\setlength{\parfillskip}{\z@ plus 1fil}
\normalfont\bfseries
\nobreak\interlinepenalty \@M #1\par\nobreak%
}\nobreak
\@afterheading
}
\makeatother
\begin{document}
\begin{multicols}{3}
\minisec{Heading}
Entry
\end{multicols}
\end{document}
답변2
Multicol은 실제로 전체 페이지를 단일 열로 형식화한 다음 두 개 이상의 동일한 길이로 분할합니다. \@afterheading
이 분할이 발생하는 것을 방지할 수 없으므로 \subsection*
등도 작동하지 않습니다. 다행스럽게도 이전 버전의 \needspace
가 작동합니다.
\documentclass[a4paper]{article}
\usepackage{multicol}
\setlength\columnseprule{.4pt}
\usepackage{lipsum}
\makeatletter
\newcommand{\tblheading}[1]{\par\rule{0pt}{\dimexpr 2\baselineskip-\dp\strutbox}\vspace{-2\baselineskip}\newline
\indent\textbf{#1}\newline}
\makeatother
\begin{document}
\begin{multicols}{3}
\noindent\rule{\columnwidth}{49\baselineskip}% 48 will go in first column
\tblheading{Heading}
Entry
\lipsum[1-4]
\end{multicols}
\end{document}