Estou enfrentando um problema interessante. Na minha cabeça, os ambientes são definidos com um nome, um código para executar no início e um código para executar no final.
No entanto, estou tentando fazer:
\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}
mas isso não funciona.
Isso me parece muito estranho, pois pensei que os códigos inicial e final dos ambientes foram executados conforme está escrito na definição. Este pequeno exemplo mostra que a definição do ambiente faz outra coisa.
Como fazer meu código funcionar?
Outra dúvida: o código não funciona se eu colocar \switchcolumn no código final do env1
. O que está acontecendo ?
Editar
Para entender o propósito, dê uma olhada emessa questãoEu perguntei há 2 dias. Esse foi o mesmo problema com o markdown
pacote. Esses ambientes são a base para a implementação de um livro de receitas.
Eu gostaria de iniciar o paracol
ambiente no início do ingredient
ambiente e finalizá-lo no final do preparation
ambiente (eventualmente, no final do recipe
ambiente também estaria ok.
Responder1
Não acho que você ganhe muito fazendo essa divisão. De qualquer forma, você pode fazer isso de uma maneira diferente.
Por que o seu jeito não funciona? Como os ambientes formam grupos, quando você fecha o seu env1
, grande parte da configuração feita por \begin{paracol}{2}
é esquecida.
\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}
Eu costumava latin
obter uma boa hifenização em colunas estreitas.
O primeiro ambiente armazena apenas o texto, que é utilizado no segundo.
Responder2
Você pode fazer isso (mais ou menos) usando o pacote environ. Você pode armazenar o texto como uma macro global, savebox ou lista de tokens (acredito que \BODY seja uma 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}