새 환경 '이전'에서 환경 종료

새 환경 '이전'에서 환경 종료

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}

이것은 나를 행복하게 만드는 것보다 훨씬 더 부서지기 쉬우며 일반적인 솔루션으로 권장할지 모르겠습니다. 즉, 그것이 어떻게 작동하고 그 이유를 이해하면 나는 그것으로 살아갈 수 있다고 생각합니다. 물론 다른 솔루션도 열려 있습니다.

관련 정보