Eu quero renderizar um documento pdf de duas colunas usando divs cercados de remarcação. O exemplo mínimo é este:
:::::::::::::: {.columns data-latex=""}
::: {.column width="40%" data-latex="[t]{0.4\textwidth}"}
contents...
:::
::: {.column width="60%" data-latex="[t]{0.6\textwidth}"}
contents...
:::
::::::::::::::
A renderização está OK em html, mas aparentemente alguém decidiu que a renderização de várias colunas em látex é apenas para beamer, então não funciona com látex simples e depois com pdf. Não posso mudar para o mecanismo html pdf do pandoc, pois preciso de modelos de látex para meu documento final.
O ambiente de látex minipage parece muito conveniente para conseguir o que eu quero. Depois de muitas investigações, cheguei com este filtro lua:
local pandocList = require 'pandoc.List'
Div = function (div)
local options = div.attributes['data-latex']
if options == nil then return nil end
-- if the output format is not latex, the object is left unchanged
if FORMAT ~= 'latex' and FORMAT ~= 'beamer' then
div.attributes['data-latex'] = nil
return div
end
local env = div.classes[1]
-- if the div has no class, the object is left unchanged
if not env then return nil end
local returnedList
-- build the returned list of blocks
if env == 'column' then
local beginEnv = pandocList:new{pandoc.RawBlock('tex', '\\begin' .. '{' .. 'minipage' .. '}' .. options)}
local endEnv = pandocList:new{pandoc.RawBlock('tex', '\\end{' .. 'minipage' .. '}')}
returnedList = beginEnv .. div.content .. endEnv
end
return returnedList
end
Infelizmente, o documento de látex gerado ( pandoc --lua-filter ./latex-div.lua -o test.latex test.md
) é o seguinte, que não renderiza como pretendido devido à linha em branco entre o final da primeira minipágina e o início da segunda:
\begin{document}
\begin{minipage}[t]{0.4\textwidth}
contents\ldots{}
\end{minipage}
\begin{minipage}[t]{0.6\textwidth}
contents\ldots{}
\end{minipage}
\end{document}
Estou quase lá. Como posso me livrar dessa linha em branco indesejada sem reprocessar o arquivo de látex?
Acontece que existe uma solução mais simples usando Tex
\mbox
para fazer as duas minipáginas ficarem juntas apesar da linha em branco.O código de látex resultante é:
Desde então, postei um filtro mais abrangente em um repositório git junto com outros filtros que podem ser úteis também.
Após novas investigações tentar e erros. Eventualmente, sou capaz de responder à minha própria pergunta (no caso de ser útil para alguém).
Como os divs aninhados são processados antes do div pai, é possível reprocessá-los para fechar um ambiente de minipágina e abrir o próximo no mesmo pandoc.RawBlock (e obviamente se livrar da linha em branco indesejada).
Aqui está o novo código do filtro lua:
O documento de látex gerado está correto agora: