Hentian halaman penurunan harga Pandoc

113

Baru-baru ini saya mulai menggunakan penurunan harga Pandoc yang tampaknya merupakan alternatif yang baik untuk LaTeX, karena dokumen saya tidak memiliki banyak rumus matematika, dan saya tidak memiliki pengalaman APAPUN dengan LaTeX, yang dikombinasikan dengan tenggat waktu pengiriman kurang dari 2 minggu menjadikannya solusi yang baik.

Satu hal yang belum dapat saya sadari adalah bagaimana memaksanya untuk mengosongkan sisa halaman, adakah yang bisa membantu?

LucasSeveryn
sumber
5
Penurunan harga rasa pandoc juga bagus saat menggunakan rumus matematika.
A. Donda

Jawaban:

135

Sepertinya penurunan harga pandoc menggunakan tag LaTeX standar untuk tujuan ini:

\newpage dan \pagebreak

LucasSeveryn
sumber
9
Keduanya berfungsi (terima kasih!), Tetapi apa perbedaan antara keduanya atau apakah sama persis?
Kalin
15
halaman baru mengakhiri halaman saat ini, sedangkan pagebreak lebih merupakan permintaan ramah - ini mungkin atau mungkin tidak terjadi. Lihat personal.ceu.hu/tex/breaking.htm
parvus
5
Ini karena perintah lateks mentah diteruskan langsung jika keluarannya memahami perintah lateks.
Matthew Pickering
23

TL; DR : gunakan \newpagedan filter Lua di bawah ini untuk mendapatkan jeda halaman dalam banyak format.

Pandoc mem-parsing semua input menjadi format dokumen internal. Format tersebut tidak memiliki cara khusus untuk merepresentasikan hentian halaman, tetapi masih memungkinkan untuk menyandikan informasi dengan cara lain. Salah satu caranya adalah dengan menggunakan LaTeX mentah \newpage. Ini bekerja dengan sempurna saat mengeluarkan LaTeX (atau pdf yang dibuat melalui LaTeX). Namun, seseorang akan mengalami masalah saat menargetkan format yang berbeda seperti HTML atau docx.

Solusi sederhana saat menargetkan format lain adalah dengan menggunakan filter pandoc yang dapat mengubah representasi dokumen internal sehingga sesuai dengan kebutuhan kita. Pandoc 2.0 dan yang lebih baru bahkan memungkinkan untuk menggunakan juru bahasa Lua yang disertakan untuk melakukan transformasi ini.

Mari kita asumsikan kita menunjukkan jeda halaman dengan meletakkan \newpagegaris yang dikelilingi seperti baris kosong, seperti:

lorem ipsum

\newpage

more text

The \newpageakan diurai sebagai RawBlock mengandung baku TeX . Blok hanya akan disertakan dalam keluaran jika format target dapat berisi TeX mentah (yaitu, LaTeX, Penurunan harga, Org, dll.).

Kita dapat menggunakan filter Lua sederhana untuk menerjemahkan ini saat menargetkan format yang berbeda. Berikut ini adalah pekerjaan untuk docx , LaTeX , epub , dan markup ringan.

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

Kami menerbitkan versi yang diperbarui dan lebih berfitur . Ini tersedia dari repositori resmi pandoc lua-filter .

tarleb
sumber
8
Ini bekerja dengan baik untuk memaksa pemutusan halaman dengan \newpageformat keluaran MS Word pandoc. Untuk menggunakan filter ini, simpan kode dalam jawaban ini ke misalnya pagebreak.luadan panggil pandoc dengan--lua-filter=pagebreak.lua
Christian Long
3

Saya mengamati bahwa ini tidak berfungsi untuk format .doc dan .odt. Solusi yang saya temukan adalah menyisipkan garis horizontal -----------------dan memformat gaya "garis horizontal" untuk memecah halaman dan menjadi tidak terlihat, menggunakan editor teks (ibre office dalam kasus saya)

Joaquin
sumber
Bagaimana Anda akan format the "horizontal line" style to break a page?
nilon
Saya hanya tahu tentang keluaran HTML, yang kemudian saya cetak ke pdf. Chrome memiliki implementasi interpretasi CSS yang sangat bagus untuk pencetakan. Dalam hal ini, hr{opacity:0;page-break-after: always;}lakukan pekerjaan itu. Anda dapat mengorbankan elemen lain jika ingin digunakan <hr>untuk hal lain.
Joaquin
0

tidak bisa mengedit jawaban LucasSeveryn, diberi tahu antrian penuh, jadi tambahkan beberapa informasi di sini.

cara 1: + raw_tex

\newpagedan \pagebreakperlu raw_texekstensi aktif.

// dengan pandoc 2.9.2.1, tidak berfungsi dengan keluaran docx atau html, --verbose berkata

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

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

// juga tidak mendukung dalam format masukan gfm.
// ini berfungsi untuk keluaran docx, bukan untuk keluaran html.

ekstensi PEMBERITAHUAN

ini membutuhkan +raw_texekstensi format. yang tidak mendukung semua varian penurunan harga di 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.

begitu -f markdownakan berhasil, tapi -f gfmtidak berhasil.

ekstensi format

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

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

sebagai contoh

-t html+raw_tex: keluaran mengaktifkan raw_tex

-f markdown-raw_tex-raw_attribute: masukan nonaktifkan raw_tex dan raw_attribute

yurenchen.dll
sumber