パラコルと環境: 環境の働き方に関する考察

パラコルと環境: 環境の働き方に関する考察

興味深い問題に直面しています。私の考えでは、環境は名前、最初に実行するコード、最後に実行するコードによって定義されます。

それでも、私は次のことをやろうとしています:

\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}

関連情報