
multicols
그룹을 닫고, 어떤 일을 하고, 새로운 일을 시작 하는 환경을 만들려고 합니다 multicols
.
다음과 같은 것
\newcount{\colcount}
\newenvironment{balancedbreak}{%
\let\colcount\col@number
\end{multicols}\newpage\begin{multicols}{\colcount}
}{
}
작동하지 않습니다. 오류 메시지가 나타납니다.
! LaTeX Error: \begin{balancedbreak} on input line 38 ended by \end{multicols}
MWE
이것이 빌드됩니다.
\documentclass{article}
\usepackage{multicol}
\usepackage{lipsum}
\newcount{\colcount}
\newenvironment{balancedbreak}{%
\let\colcount\col@number%
%\end{multicols}\newpage\begin{multicols}{\colcount}%
\newpage
}{%
}
\begin{document}
\begin{multicols}{2}
\lipsum[1]
\lipsum[2]
\begin{balancedbreak}
\textbf{Testing here}
\end{balancedbreak}
\lipsum[3]
\lipsum[4]
\end{multicols}
\end{document}
하나의 긴 불균형 열이 표시되고 새 페이지와 균형이 잡힌 열이 표시됩니다. 새 환경에서 시작하는 줄의 주석 처리를 제거 \end{multicols}
하고 다음 줄을 주석 처리하면 위의 오류 메시지가 나타납니다.
일반적인 경우가 궁금합니다. " 의 '이전' 섹션에서 환경을 어떻게 종료합니까 \newenvironment
?
(저에게 당장 필요한 것은 "페이지의 균형을 맞추고 다음 페이지로 이동하도록 페이지를 끝내는 목표를 어떻게 더 잘 달성할 수 있습니까 multicols
?"입니다. 지금의 방식으로는 전혀 할 수 없지만 다음을 사용하고 싶습니다. 다른 이유로 인한 환경.)
답변1
매크로를 사용하면 이 작업을 수행하는 것이 훨씬 더 쉬울 것입니다. 환경을 추적 \@currenvir
하고 올바른 그룹에 속해야 합니다. \endgroup 및 \begingroup은 blanacedbreak 환경을 종료하고 다시 시작하는 것입니다.
\documentclass{article}
\usepackage{multicol}
\usepackage{lipsum}
%\tracingmacros=1
\makeatletter
\newcount{\colcount}
\newenvironment{balancedbreak}{%
\global\colcount=\col@number% current value will otherwise be lost
\endgroup\endmulticols\newpage
\multicols\colcount\begingroup
\def\@currenvir{balancedbreak}%
}{}%
\makeatother
\begin{document}
\begin{multicols}{2}
\lipsum[1]
\lipsum[2]
\begin{balancedbreak}
\textbf{Testing here}
\end{balancedbreak}
\lipsum[3]
\lipsum[4]
\end{multicols}
\end{document}
답변2
추가 연구와 실험에 따르면 새로운 환경은 단순한 '물건의 포장지'가 아니라 실제로 구조적 의미(암시적 그룹 생성)를 갖고 있는 것으로 나타났습니다. 그건,
\newcount\colcount
\newenvironment{balancedbreak}{%
\let\colcount\col@number%
\end{multicols}\newpage\begin{multicols}{\colcount}%
}{%
}
다음과 같이 행동합니다
\begin{balancedbreak}
\begingroup
\let\colcount\col@number
\end{multicols}\newpage\begin{multicols}{\colcount}
나는 '이전'이 텍스트 대체와 같은 것이라고 생각했습니다. 잘못된 것 같습니다. 나는 암시적인 begingroup
.
위의 정의를 사용하면,
\balancedbreak
Some content goes here
\endbalancedbreak
작동하는 것 같습니다.
현재 작업 솔루션:
\newcount\colcount
\newenvironment{balancedbreak}{%
\ifnum\doublecol@number>\z@ % if multicol
\let\colcount\col@number%
\end{multicols}\newpage\begin{multicols}{\colcount}%
\else%
\newpage%
\fi
}{%
}
이는 와 \begin{someenv}
사이에 다른 항목이 없는 경우에만 작동합니다 . 문제가 없을 수도 있지만 , 다른 환경이나 그룹 '내부'에서는 이런 일이 일어날 수 없습니다.\begin{multicols}
\balancedbreak
\begin{someenv} some stuff goes here \end{someenv}
이것은 나를 행복하게 만드는 것보다 훨씬 더 부서지기 쉬우며 일반적인 솔루션으로 권장할지 모르겠습니다. 즉, 그것이 어떻게 작동하고 그 이유를 이해하면 나는 그것으로 살아갈 수 있다고 생각합니다. 물론 다른 솔루션도 열려 있습니다.