If I am right, the expected behaviour of the ‘place’ function is that the content it contains cannot be split if its height is greater than that of the page.
When I was developing the ‘elsearticle’ template, I had some problems, since I wanted double-column content while the title and abstract were single-column. My current solution is to define show: columns(2, body) in the last line of the template.
However, this has a side effect: we have to use colbreak() instead of pagebreak() to insert a manual page or column break.
Another solution is to set the page to two columns and use the place function. This solves the page/column break issue, but unfortunately it only works when the abstract remains on the first page.
My question is: is it possible to have the best of both worlds?
Using #set page(columns: 2) is indeed the “right” way to make this kind of layout. As the columns doc says:
If you need to insert columns across your whole document, use the page function’s columns parameter instead. This will create the columns directly at the page-level rather than wrapping all of your content in a layout container. As a result, things like pagebreaks, footnotes, and line numbers will continue to work as expected. For more information, also read the relevant part of the page setup guide.
As you mentioned, the problem is that the abstract can be too large for the first page. I agree that in the final version of the paper such a long abstract would be rejected, but in the review phase given the margins, the font size and line spacing, such a situation can happen and it is accepted by Elsevier (at least in the journal in which I publish).
I am afraid you are right. It is currently impossible to have the best of both worlds. I have tested both approaches and that is why I posted my question
@sijo The codesnippets proposed by @ensko are the MWE reproducing the issue. (Thanks @ensko).
If you are “satisfied” with the non-solution, would you mind accepting sijos post though? I didn’t really help solve/explain the situation, and sijo had more context on the problem.
Breakable place and figure content would obviously be the desired solution, but if you are only concerned about having to use colbreak() instead of pagebreak(), you could in the meantime override the pagebreak function to act like a colbreak:
Actually, I am not personally concerned with this issue but the users of the package are. A PR has been proposed for this purpose. I thought about implementing the solution you propose. I think it is the right thing to do at the moment.