興味深い問題に直面しています。私の考えでは、環境は名前、最初に実行するコード、最後に実行するコードによって定義されます。
それでも、私は次のことをやろうとしています:
\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 番目の環境で使用されるテキストを保存するだけです。
答え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}