Pandoc markdown sayfa sonu


113

Son zamanlarda, belgemde çok fazla matematiksel formül bulunmadığından ve LaTeX ile HERHANGİ bir deneyimim olmadığından, LaTeX'e iyi bir alternatif gibi görünen Pandoc markdown kullanmaya başladım, bu da 2 haftadan daha kısa son teslim tarihi ile birleştiğinde onu iyi bir çözüm haline getiriyor.

Buraya gelemediğim bir şey, onu sayfanın geri kalanını boş bırakmaya nasıl zorlayacağım, kimse yardım edebilir mi?


5
Pandoc aromalı Markdown, matematiksel formülleri kullanırken de harikadır.
A. Donda

Yanıtlar:


135

Pandoc markdown bu amaçla standart LaTeX etiketleri kullanıyor gibi görünüyor:

\newpage ve \pagebreak


9
İkisi de işe yarar (teşekkürler!), Ama ikisi arasındaki fark nedir veya tam olarak eşdeğer mi?
Kalin

15
newpage geçerli sayfayı sonlandırır, oysa sayfa sonu daha çok dostane bir istek - olabilir veya olmayabilir. Bkz personal.ceu.hu/tex/breaking.htm
Parvus

5
Bunun nedeni, çıkışın lateks komutlarını anlaması durumunda ham lateks komutlarının doğrudan iletilmesidir.
Matthew Pickering

23

TL; DR : birçok formatta sayfa sonları\newpage almak için aşağıdaki Lua filtresini kullanın .

Pandoc, tüm girişleri dahili bir belge biçiminde ayrıştırır. Bu formatın sayfa sonlarını temsil etmek için özel bir yolu yoktur, ancak bilgileri başka yollarla kodlamak yine de mümkündür. Bunun bir yolu ham LaTeX kullanmaktır \newpage. Bu, LaTeX (veya LaTeX aracılığıyla oluşturulan pdf) çıktısını alırken mükemmel çalışır. Ancak, HTML veya docx gibi farklı biçimleri hedeflerken sorunlarla karşılaşılacaktır.

Diğer biçimleri hedeflerken basit bir çözüm , dahili belge sunumunu ihtiyaçlarımızı karşılayacak şekilde dönüştürebilen bir pandoc filtresi kullanmaktır . Pandoc 2.0 ve sonraki sürümleri , bu dönüşümü gerçekleştirmek için birlikte verilen Lua yorumlayıcının kullanılmasına bile izin verir .

\newpageBoş satırlar gibi çevrili bir satır koyarak sayfa sonlarını gösterdiğimizi varsayalım , şöyle:

lorem ipsum

\newpage

more text

\newpageBir şekilde ayrıştırılır RawBlock ham içeren TeX . Blok, yalnızca hedef format ham TeX (yani LaTeX, Markdown, Org, vb.) İçerebiliyorsa çıktıya dahil edilecektir.

Farklı bir formatı hedeflerken bunu çevirmek için basit bir Lua filtresi kullanabiliriz. Aşağıdaki işler için docx , LaTeX , epub ve hafif işaretlemesi.

--- 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

Güncellenmiş, daha özellikli bir sürüm yayınladık . Resmi pandoc lua-filtreleri deposundan edinilebilir .


8
Bu \newpage, pandoc'un MS Word çıktı biçiminde sayfa sonlarını zorlamak için güzel bir şekilde çalışıyor . Bu filtreyi kullanmak için, bu pagebreak.luayanıttaki kodu kaydedin ve pandoc'u--lua-filter=pagebreak.lua
Christian Long

3

Bunun .doc ve .odt biçimleri için çalışmadığını gözlemledim. Bulduğum bir çözüm, yatay bir çizgi eklemek -----------------ve bir sayfayı kırmak ve görünmez olmak için "yatay çizgi" stilini biçimlendirmekti (benim durumumda ibre office)


Nerden bileceksin format the "horizontal line" style to break a page?
nilon

Yalnızca HTML çıktısını biliyorum ve sonuç olarak pdf olarak yazdırıyorum. Chrome, baskı için gerçekten güzel bir CSS yorumlama uygulamasına sahiptir. Bu durumda hr{opacity:0;page-break-after: always;}işi yapar. <hr>Başka bir şey için kullanmak istiyorsanız, diğer unsurları feda edebilirsiniz .
Joaquin

0

LucasSeveryn yanıtını düzenleyemiyorum, sıranın dolu olduğu söylendi, bu yüzden buraya biraz bilgi ekleyin.

yol 1: + raw_tex

\newpageve uzantıya \pagebreakihtiyacınız raw_texvar.

// pandoc 2.9.2.1 ile, docx veya html çıktısı ile çalışmıyor, --verbose diyor

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

yol 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>
```

// ayrıca gfm giriş biçiminde desteklenmez.
// bu docx çıktısı için çalıştı, html çıktısı ile çalışmadı.

uzatma BİLDİRİM

bu +raw_texformat uzantısına ihtiyaç duyar . pandoc'daki tüm markdown varyantları için desteklenmeyen.

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.

yani -f markdown çalışacak, ama -f gfmçalışmayacak.

format uzantısı

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

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

Örneğin

-t html+raw_tex: çıktı raw_tex etkinleştir

-f markdown-raw_tex-raw_attribute: raw_tex ve raw_attribute işlevini devre dışı bırakın

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.