Estoy enfrentando un problema interesante. En mi opinión, los entornos se definen con un nombre, un código para ejecutar al principio y un código para ejecutar al final.
Sin embargo, estoy tratando de hacer:
\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}
Pero esto no funciona.
Eso me suena muy extraño porque pensé que los códigos de inicio y fin del entorno se ejecutaron en la forma escrita en la definición. Este pequeño ejemplo muestra que la definición del entorno hace algo más.
¿Cómo hacer que mi código funcione?
Otra pregunta: el código no funciona si coloco \switchcolumn al final del código env1
. Qué está sucediendo ?
Editar
Para comprender el propósito, eche un vistazo aesta preguntaPregunté hace 2 días. Ese fue el mismo problema con el markdown
paquete. Estos entornos son la base para la implementación de un libro de recetas.
Me gustaría comenzar el paracol
entorno al principio ingredient
y terminarlo al final del entorno preparation
(eventualmente, al final del recipe
entorno también estaría bien).
Respuesta1
No creo que ganes mucho haciendo esta división. De todos modos, puedes hacerlo de otra manera.
¿Por qué tu método no funciona? Debido a que los entornos forman grupos, cuando cierras tu env1
, gran parte de la configuración realizada \begin{paracol}{2}
se olvida.
\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}
Solía latin
sólo conseguir una buena separación de palabras en columnas estrechas.
El primer entorno simplemente almacena el texto que se utiliza en el segundo.
Respuesta2
Puedes hacerlo (más o menos) usando el paquete ambiental. Puede almacenar el texto como una macro global, un cuadro de guardado o una lista de tokens (creo que \BODY es una lista de tokens).
\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}