我面臨一個有趣的問題。在我看來,環境是由名稱、開頭執行的程式碼和結尾執行的程式碼定義的。
然而,我正在嘗試這樣做:
\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}