Membuat bab untuk memulai pada halaman baru dalam PDF yang dihasilkan pandoc

20
%Title
%Author

#Header 1

Lots of words.

#Header 2

More words.

##Level 2 header

Teks di atas dapat diubah menjadi file EPUB untuk e-reader dengan pandoc -o output.epub input.mkd, dan dapat dikonversi ke PDF dengan pandoc -o output.pdf input.mkd. Yang terakhir membutuhkan mesin lateks untuk diinstal, yang mungkin relevan untuk menjawab pertanyaan.

Dengan EPUB, setiap tajuk level 1 secara otomatis ditetapkan di bagian atas halaman baru (tajuk yang lebih kecil tidak). Dengan PDF, ini bukan masalahnya - dan saya tidak akan mengharapkannya secara default, karena itu akan bertentangan dengan tujuan utama penurunan harga. Namun, saya mengalami kesulitan menemukan opsi pandoc untuk mengaktifkan perilaku ini.

Adakah yang tahu cara mengaktifkan perilaku ini dengan pandoc? Mengedit file konfigurasi akan menjadi solusi yang dapat diterima, tetapi jika sintaksnya berbasis lateks, saya akan sangat menghargai penjelasannya (tentang arti apa yang ada dalam file konfigurasi, bukan penjelasan komprehensif tentang lateks!).

Pilihan pandoc --chapterssepertinya harus melakukan apa yang saya inginkan ... tetapi itu

  • Membuat bab hanya muncul di halaman bernomor ganjil, menyisipkan halaman kosong seperlunya (menarik, tapi bukan yang saya inginkan - saya ingin mencetaknya di kertas A4, dan tidak akan ditata dengan gaya buku, jadi setiap estetika positif di sini diimbangi oleh pemborosan kertas)
  • Sisipan Chapter xsebelum tajuk yang sebenarnya, yang mengarah ke beberapa hal konyol seperti:

Bab 1

Prolog

Jika mungkin untuk menjinakkan --chaptersopsi, itu akan menjadi jawaban yang cocok.

Evilsoup
sumber

Jawaban:

28

Lihat /tex/9497/start-new-page-with-each-section .

Untuk membuat ini berfungsi dengan pandoc, Anda harus memasukkan yang berikut ke dalam pembukaan pandoc dokumen LaTeX yang dihasilkan dalam perjalanan ke PDF:

\usepackage{titlesec}
\newcommand{\sectionbreak}{\clearpage}

Ada beberapa cara untuk melakukannya. Pertama adalah membuat template LaTeX khusus dengan baris-baris ini di pembukaan. Anda kemudian dapat menggunakan opsi --template mytemplate.latexuntuk memberi tahu pandoc untuk menggunakan templat ini. Untuk mendapatkan templat LaTeX default, yang dapat Anda modifikasi, lakukan pandoc -D latex > mytemplate.latex.

Pilihan lain adalah membuat file kecil titlesec.texhanya dengan dua baris itu. Kemudian panggil pandoc dengan opsi --include-in-header titlesec.texuntuk memasukkannya di header, seperti:

pandoc --toc --include-in-header titlesec.tex -o output.pdf input1.mkd input2.mkd
John MacFarlane
sumber
Terima kasih, ini luar biasa. Ini memang memiliki kelemahan dari mematahkan tautan dalam PDF dan mengatur semua bookmark (tidak yakin apakah ini kata yang tepat) ke halaman 1, tetapi karena saya menggunakan ini terutama untuk pencetakan yang sebenarnya itu bukan masalah besar. Satu-satunya hal yang tidak dilakukan adalah meletakkan daftar isi pada halaman yang sama dengan judul, tetapi itu tidak terlalu penting sama sekali.
evilsoup
2
BTW, jika Anda adalah John MacFarlane yang sama yang membuat pandoc, saya ingin mengambil kesempatan ini untuk mengucapkan terima kasih - karena saya menemukannya, program Anda telah menjadi bagian penting dari alur kerja penulisan saya. Juga, apakah ada sumber daya yang Anda rekomendasikan untuk belajar tentang LaTeX?
evilsoup
4
Sama-sama. Saya mulai dengan buku Lamport, LaTeX: Sistem Persiapan Dokumen, yang bagus.
John MacFarlane
1
Titleec tampaknya tidak kompatibel dengan templat lateks pandoc saat ini, jawaban yang diajukan menghasilkan kesalahan lateks. Anda dapat menggunakan sectsty: \usepackage{sectsty} \sectionfont{\clearpage}.
Merlijn Sebrechts
Ada kesalahan saat saya menggunakan metode di atas. Solusinya diberikan di sini .
jdhao
11

Apa yang akhirnya saya lakukan adalah ini:

pandoc --toc -V documentclass=report -o output.pdf inputs*.mkd

Hal ini menyebabkan kelas dokumen 'laporan' LaTeX digunakan (secara default, dengan --chapters, pandoc tampaknya menggunakan kelas 'buku' atau 'memoar', yang dirancang untuk buku - margin dengan ukuran berbeda di setiap sisi untuk memfasilitasi pengikatan buku) , bab hanya dimulai pada halaman ganjil, dll.), yang menempatkan header level 1 di bagian atas halaman, tetapi tidak hanya menempatkannya di bagian atas halaman bernomor ganjil.

Ini masih menyisipkan 'Bab X' sebelum setiap bab, yang masih mengganggu. Saya juga sangat ingin agar Daftar Isi dimulai pada halaman yang sama dengan judul (ini terjadi dengan kelas dokumen 'artikel', tetapi kemudian bab-bab tidak didorong ke awal halaman baru - mereka hanya memulai di mana saja). Namun, saya pikir mendapatkan itu akan membutuhkan lebih banyak pengetahuan tentang LaTeX daripada yang saya miliki: Saya tidak akan menandainya sebagai jawaban yang diterima, karena jawaban ideal untuk ini akan menjelaskan cara mengatasi dua masalah ini.

Evilsoup
sumber
1

Juga lebih dari dua tahun kemudian, dan saya terus mengalami masalah ini juga; jadi untuk siapa pun yang mengalami masalah ini yang menemukan ini ...

Berkat jawaban John dan tautan lain yang disertakan, saya menggunakan yang berikut ini dalam file dengan pandoc -Hopsi dan sepertinya berfungsi dengan baik:

% /superuser/601469/getting-chapters-to-start-on-a-new-page-in-a-pandoc-generated-pdf
% http://tex.stackexchange.com/questions/120740/how-do-i-remove-chapter-n-from-the-chapter-titles-of-a-book
\usepackage{titlesec}
\usepackage{fancyhdr}

\newcommand{\sectionbreak}{\clearpage}
\titleformat{\chapter}[display]{\normalfont\bfseries}{}{0pt}{\Large}
\pagestyle{fancy}
\fancyhf{}
\fancyhead[RE]{\leftmark}
\fancyhead[LO]{\rightmark}
\fancyhead[LE,RO]{\thepage}
\renewcommand\headrulewidth{0pt}
\renewcommand\chaptermark[1]{\markboth{#1}{}} 
\renewcommand\sectionmark[1]{\markright{\thesection.\ #1}}

Dengan ini, saya menggunakan --chaptersopsi pandocdan menghasilkan bab-bab PDF pada halaman-halaman baru tanpa Chapter XX:judul halaman. Menggunakan -V documentclass=reportjuga menghasilkan hasil yang diinginkan, tanpa fenomena halaman-skipping-dan-bab-on-ganjil-halaman yang dihasilkan oleh bookkelas dokumen.

Eugéne
sumber
0

Punya masalah yang sama dan tahu saya akan memposting solusi saya hanya menggunakan bidang metadata YAML.

documentclass: report
header-includes:
- \renewcommand{\chaptername}{}
- \renewcommand{\thechapter}{}
Jonathan Baldwin
sumber