paracol 與環境:圍繞環境運作方式的反思

paracol 與環境:圍繞環境運作方式的反思

我面臨一個有趣的問題。在我看來,環境是由名稱、開頭執行的程式碼和結尾執行的程式碼定義的。

然而,我正在嘗試這樣做:

\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.這是怎麼回事 ?

編輯

要了解目的,請查看這個問題我2天前問過。包裹也有同樣的問題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}

相關內容