파라콜과 환경: 환경이 작동하는 방식에 대한 성찰

파라콜과 환경: 환경이 작동하는 방식에 대한 성찰

흥미로운 문제에 직면했습니다. 내 생각에는 환경이 이름, 처음에 실행할 코드, 마지막에 실행할 코드로 정의됩니다.

그러나 나는 다음을 시도하고 있습니다.

\documentclass[]{article}

\usepackage{paracol}
\usepackage{lipsum}

\newenvironment{env1}{%
    \begin{paracol}{2}%
}{}

\newenvironment{env2}{%
    \switchcolumn
}{%
    \end{paracol}%
}

\begin{document}

\begin{env1}
    \lipsum[1]
\end{env1}

\begin{env2}
    \lipsum[1]
\end{env2}

\end{document}

하지만 이것은 작동하지 않습니다.

환경 시작 및 종료 코드가 정의에 기록된 위치에서 실행된다고 생각했기 때문에 그것은 나에게 매우 이상하게 들립니다. 이 작은 예는 환경 정의가 다른 작업을 수행함을 보여줍니다.

내 코드를 작동시키는 방법은 무엇입니까?

다른 질문: 의 끝 코드에 \switchcolumn을 넣으면 코드가 작동하지 않습니다 env1. 무슨 일이야 ?

편집하다

목적을 이해하려면 다음을 살펴보세요.이 질문이틀 전에 물어봤습니다. 패키지 문제도 마찬가지였습니다 markdown. 이러한 환경은 요리책 구현의 기초입니다.

paracol환경 의 시작 부분에서 환경을 시작 ingredient하고 환경의 끝에서 끝내고 싶습니다 preparation(결국 환경의 끝에서도 recipe괜찮을 것입니다.

답변1

이 분할을 통해 많은 것을 얻을 수 있다고 생각하지 않습니다. 어쨌든, 다른 방법으로 할 수 있습니다.

왜 당신의 방식이 작동하지 않습니까? 환경은 그룹을 형성하므로 을(를) 닫으면 에서 env1수행한 설정의 대부분이 \begin{paracol}{2}잊혀집니다.

\documentclass[]{article}
\usepackage[latin]{babel}

\usepackage{paracol,environ}
\usepackage{lipsum}

\NewEnviron{env1}{\global\let\envone\BODY}
\newenvironment{env2}{%
  \paracol{2}\envone\switchcolumn
}{\endparacol}


\begin{document}

\begin{env1}
    \lipsum[1]
\end{env1}

\begin{env2}
    \lipsum[1]
\end{env2}

\end{document}

나는 latin좁은 열에 좋은 하이픈을 넣기 위해 사용했습니다.

첫 번째 환경은 두 번째 환경에서 사용되는 텍스트를 저장합니다.

답변2

Environ 패키지를 사용하면 (다소간) 이를 수행할 수 있습니다. 텍스트를 전역 매크로, 저장 상자 또는 토큰 목록으로 저장할 수 있습니다(\BODY는 토큰 목록이라고 생각합니다).

\documentclass[]{article}

\usepackage{paracol}
\usepackage{environ}
\usepackage{lipsum}

\newsavebox{\mycolumn}

\NewEnviron{env1}{%
    \global\setbox\mycolumn=\vbox{\hsize=\dimexpr 0.5\textwidth-0.5\columnsep\relax
      \BODY}%
}

\NewEnviron{env2}{%
    \begin{paracol}{2}%
    \unvbox\mycolumn
    \switchcolumn
    \BODY
    \end{paracol}%
}

\begin{document}
\sloppy% for lipsum in particular

\begin{env1}
    \lipsum[1]
\end{env1}

\begin{env2}
    \lipsum[1]
\end{env2}

\end{document}

관련 정보