Ich stehe vor einem interessanten Problem. Meiner Meinung nach werden die Umgebungen durch einen Namen, einen am Anfang auszuführenden Code und einen am Ende auszuführenden Code definiert.
Dennoch versuche ich Folgendes:
\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}
aber das funktioniert nicht.
Das klingt für mich sehr seltsam, da ich dachte, dass die Anfangs- und Endcodes der Umgebungen an der Stelle ausgeführt werden, an der es in der Definition steht. Dieses kleine Beispiel zeigt, dass die Umgebungsdefinition etwas anderes macht.
Wie bringe ich meinen Code zum Laufen?
Andere Frage: Der Code funktioniert nicht, wenn ich \switchcolumn am Ende des Codes einfüge env1
. Was ist los?
Bearbeiten
Um den Zweck zu verstehen, werfen Sie einen Blick aufdiese FrageIch habe vor 2 Tagen gefragt. Das war das gleiche Problem mit dem markdown
Paket. Diese Umgebungen sind die Grundlage für eine Rezeptbuchimplementierung.
Ich möchte die paracol
Umgebung am Anfang der ingredient
Umgebung starten und am Ende der Umgebung beenden (eventuell wäre auch preparation
am Ende der Umgebung ok).recipe
Antwort1
Ich glaube nicht, dass Sie durch diese Aufteilung viel gewinnen. Sie können es aber auch anders machen.
Warum funktioniert Ihre Methode nicht? Weil Umgebungen Gruppen bilden, werden beim Schließen Ihres env1
viele der von vorgenommenen Einstellungen \begin{paracol}{2}
vergessen.
\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}
Ich habe es latin
nur verwendet, um eine gute Silbentrennung in schmalen Spalten zu erreichen.
Die erste Umgebung speichert nur den Text, der in der zweiten verwendet wird.
Antwort2
Sie können dies (mehr oder weniger) mithilfe des Umgebungspakets tun. Sie können den Text als globales Makro, Savebox oder Tokenliste speichern (ich glaube, \BODY ist eine Tokenliste).
\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}