Salto de página de rebajas de Pandoc


113

Recientemente comencé a usar la rebaja de Pandoc, que parece una buena alternativa a LaTeX, ya que mi documento no tiene muchas fórmulas matemáticas y no tengo NINGUNA experiencia con LaTeX, lo que combinado con un plazo de envío de menos de 2 semanas lo convierte en una buena solución.

Una cosa que no he podido solucionar es cómo forzarlo a dejar el resto de la página vacía, ¿alguien puede ayudar?


5
Markdown con sabor a Pandoc también es excelente cuando se usan fórmulas matemáticas.
A. Donda

Respuestas:


135

Parece que pandoc markdown usa etiquetas LaTeX estándar para este propósito:

\newpage y \pagebreak


9
Ambos funcionan (¡gracias!), Pero ¿cuál es la diferencia entre los dos o son exactamente equivalentes?
Kalin

15
newpage finaliza la página actual, mientras que el salto de página es más una solicitud amistosa, puede que suceda o no. Ver personal.ceu.hu/tex/breaking.htm
parvus

5
Esto se debe a que los comandos de látex sin procesar se transmiten directamente si la salida comprende los comandos de látex.
Matthew Pickering

23

TL; DR : use \newpagey el filtro Lua a continuación para obtener saltos de página en muchos formatos.

Pandoc analiza todas las entradas en un formato de documento interno. Ese formato no tiene una forma específica de representar los saltos de página, pero aún es posible codificar la información de otras formas. Una forma es utilizar LaTeX sin formato \newpage. Esto funciona perfectamente cuando se genera LaTeX (o pdf creado a través de LaTeX). Sin embargo, uno se encontrará con problemas al apuntar a diferentes formatos como HTML o docx.

Una solución simple cuando se apunta a otros formatos es usar un filtro pandoc que puede transformar la representación interna del documento para que se adapte a nuestras necesidades. Pandoc 2.0 y posterior incluso permite usar el intérprete Lua incluido para realizar esta transformación.

Supongamos que estamos indicando saltos de página colocando \newpageuna línea rodeada como líneas en blanco, así:

lorem ipsum

\newpage

more text

Se \newpageanalizará como un RawBlock que contiene TeX sin formato . El bloque solo se incluirá en la salida si el formato de destino puede contener TeX sin formato (es decir, LaTeX, Markdown, Org, etc.).

Podemos usar un filtro Lua simple para traducir esto cuando apuntamos a un formato diferente. Lo siguiente funciona para docx , LaTeX , epub y marcado ligero.

--- Return a block element causing a page break in the given format.
local function newpage(format)
  if format == 'docx' then
    local pagebreak = '<w:p><w:r><w:br w:type="page"/></w:r></w:p>'
    return pandoc.RawBlock('openxml', pagebreak)
  elseif format:match 'html.*' then
    return pandoc.RawBlock('html', '<div style=""></div>')
  elseif format:match 'tex$' then
    return pandoc.RawBlock('tex', '\\newpage{}')
  elseif format:match 'epub' then
    local pagebreak = '<p style="page-break-after: always;"> </p>'
    return pandoc.RawBlock('html', pagebreak)
  else
    -- fall back to insert a form feed character
    return pandoc.Para{pandoc.Str '\f'}
  end
end

-- Filter function called on each RawBlock element.
function RawBlock (el)
  -- check that the block is TeX or LaTeX and contains only \newpage or
  -- \pagebreak.
  if el.text:match '\\newpage' then
    -- use format-specific pagebreak marker. FORMAT is set by pandoc to
    -- the targeted output format.
    return newpage(FORMAT)
  end
  -- otherwise, leave the block unchanged
  return nil
end

Hemos publicado una versión actualizada, más featureful . Está disponible en el repositorio oficial de pandoc lua-filters .


8
Esto funciona maravillosamente para forzar saltos de página \newpageen el formato de salida MS Word de pandoc. Para usar este filtro, guarde el código en esta respuesta en eg pagebreak.luae invoque pandoc con--lua-filter=pagebreak.lua
Christian Long

3

Observé que esto no funciona para los formatos .doc y .odt. Una solución que encontré fue insertar una línea horizontal -----------------y formatear el estilo de "línea horizontal" para romper una página y ser invisible, usando el editor de texto (ibre office en mi caso)


¿Cómo lo harías format the "horizontal line" style to break a page?
nilon

Solo conozco la salida HTML, que en consecuencia imprimo en pdf. Chrome tiene una implementación realmente agradable de la interpretación de CSS para impresión. En este caso, hr{opacity:0;page-break-after: always;}hace el trabajo. Puede sacrificar otro elemento si desea utilizarlo <hr>para otra cosa.
Joaquín

0

No se puede editar la respuesta de LucasSeveryn, se le dijo que la cola estaba llena, así que agregue información aquí

forma 1: + raw_tex

\newpagey \pagebreaknecesita raw_texextensión.

// con pandoc 2.9.2.1, no funciona con salida docx o html, --verbose dice

[INFO] Not rendering RawBlock (Format "tex") "\\pagebreak"
[INFO] Not rendering RawBlock (Format "tex") "\\newpage"

forma 2: + raw_attribute

https://pandoc.org/MANUAL.html#extension-raw_attribute

```{=openxml}
<w:p>
  <w:r>
    <w:br w:type="page"/>
  </w:r>
</w:p>
```

// tampoco es compatible con el formato de entrada gfm.
// esto funcionó para la salida docx, no funciona con la salida html.

extensión AVISO

esta necesidad de +raw_texextensión de formato. que no es compatible con todas las variantes de rebajas en pandoc.

https://pandoc.org/MANUAL.html#markdown-variants

Note, however, that commonmark and gfm have limited support for extensions.  

Only those listed below (and smart, raw_tex, and hard_line_breaks) will work.  

The extensions can, however, all be individually disabled.

Also, raw_tex only affects gfm output, not input.

también -f markdownfuncionará, pero -f gfmno funcionará.

extensión de formato

https://pandoc.org/MANUAL.html#option--from

Extensions can be individually enabled or disabled by appending 
+EXTENSION or -EXTENSION to the format name.

por ejemplo

-t html+raw_tex: salida habilitar raw_tex

-f markdown-raw_tex-raw_attribute: entrada deshabilitar raw_tex y raw_attribute

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.