Atur ukuran margin saat mengkonversi dari Penurunan harga ke PDF dengan pandoc

179

Saya telah membuat file RMarkdown di RStudio dan berhasil merajutnya dengan knitr menjadi file HTML dan .md. Selanjutnya, saya menggunakan pandoc untuk mengkonversi file .md menjadi file PDF (saya mendapatkan kesalahan jika saya mencoba dan mengkonversi dari file .html). Namun, PDF yang diproduksi memiliki margin yang sangat besar (seperti ini http://johnmacfarlane.net/pandoc/demo/example13.pdf ). Bagaimana saya bisa mendapatkan pandoc untuk menghasilkan sesuatu dengan margin yang lebih kecil? Saya telah membaca panduan pengguna pandoc, tetapi belum menemukan sesuatu yang bermanfaat.

mchangun
sumber

Jawaban:

241

Versi terbaru dari rmarkdown dan pandoc

Dalam versi rmarkdown yang lebih baru , pengaturan margin dapat dilakukan di header YAML melalui elemen tingkat atas geometry. Apa yang Anda tentukan dalam geometrytag akan disalurkan ke templat LaTeX yang dikirimkan bersama Pandoc melalui cuplikan LaTeX berikut

$if(geometry)$
\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry}
$endif$

Misalnya, untuk menentukan margin dengan lebar 2cm, orang akan memasukkan

---
title: "Habits"
author: John Doe
date: March 22, 2005
geometry: margin=2cm
output: pdf_document
---

Untuk spesifikasi yang lebih kompleks untuk diteruskan ke paket LaTeX geometri , opsi string bersama seperti yang Anda lakukan dengan LaTeX:

---
title: "Habits"
author: John Doe
date: March 22, 2005
geometry: "left=3cm,right=3cm,top=2cm,bottom=2cm"
output: pdf_document
---

Jawaban asli

Ini adalah pertanyaan LaTeX karena Pandoc merender ke PDF melalui LaTeX - apa yang Anda tautkan mewakili margin default pada dokumen LaTeX.

The geometri paket LaTeX misalnya dapat digunakan untuk mengubah margin halaman. Namun Anda akan membutuhkan cara untuk memberitahu Pandoc untuk menggunakan ini dengan memasukkannya ke dalam header LaTeX yang diterapkan pada file md yang dikonversi.

Bagaimana Anda melakukan ini didokumentasikan dalam Panduan Pengguna Pandoc . Lihat khususnya --template=FILEargumen baris perintah dan bagian Template . Pada dasarnya, cari dan modifikasi templat default untuk memasukkan instruksi LaTeX yang ingin Anda gunakan atau mulai templat Anda sendiri dari awal dan letakkan di lokasi yang sesuai; lihat --data-dirargumen baris perintah.


Alternatif lain jika Anda menggunakan Pandoc versi terbaru adalah dengan menggunakan argumen variabel (disetel dengan -V KEY[=VAL]atau --variable=KEY[:VAL]). The geometrypaket ditambahkan ke LaTeX template default Mei 2012 (lihat pembahasan ini ). Dengan demikian, jika Anda ingin mengubah margin halaman, Anda dapat menggunakan:

pandoc -V geometry:margin=1in -o output.pdf input.md

Anda dapat menentukan beberapa nilai variabel juga. Misalnya, jika Anda ingin membuat pdf 4 kali 6 inci dengan margin setengah inci, Anda dapat menggunakan:

pandoc -V geometry:paperwidth=4in -V geometry:paperheight=6in -V geometry:margin=.5in -o output.pdf input.md
Gavin Simpson
sumber
33
Jika Anda menggunakan Pandoc versi terbaru, Anda juga dapat mengatur ini menggunakan variableperintah alih-alih harus membuat templat dari awal atau mengkodekan margin pada templat default. Misalnya, untuk margin 1 inci, Anda dapat menggunakan pandoc -V geometry:margin=1in -o output.pdf input.md.
A5C1D2H2I1M1N2O1R2T1
@ mrdwab Itulah yang saya butuhkan. Terima kasih banyak. Ingin memposting itu sebagai jawaban agar saya dapat menerimanya?
mchangun
8
@mchangun, saya telah mengedit jawaban Gavin untuk memasukkan komentar saya karena itu adalah jawaban yang valid yang mungkin berguna bagi pengguna yang ingin menggunakan paket LaTeX khusus lainnya yang tidak termasuk dalam templat Pandoc default.
A5C1D2H2I1M1N2O1R2T1
1
Sangat baru untuk pandoc. Saya menemukan bahwa -V geometry:margin=1inopsi itu tidak berpengaruh. Melalui googling, saya menemukan dokumentasi di suatu tempat (maaf kehilangan tautan) yang mengatakan bahwa opsi ini tidak berpengaruh jika menggunakan templat default. Saya hanya ingin mengonversi file penurunan harga satu halaman ke PDF untuk dikirim ke seseorang sebagai selebaran. Solusi cepat saya: Edit file template secara langsung dan tambahkan baris \usepackage[margin=1.0in]{geometry}. Pada instal saya, file tersebut di:/usr/share/pandoc-1.9.1.1/templates
Steve Koch
Apakah ada cara, dari baris perintah untuk mempengaruhi hanya satu margin? Seluruh buku saya memiliki celah raksasa di bagian bawah dan saya hanya ingin memengaruhi margin itu. -V Geometri: margin: bawah sepertinya tidak berfungsi.
Austin Fatheree
105

Di versi pandoc yang lebih baru, Anda dapat mengatur sejumlah parameter di header YAML . Anda dapat mengatur geometri di sini, misalnya:

---
title:  Pandoc nice margins example
author: naught101
geometry: margin=3cm
---

body text of document

Ketika pandoc mengubahnya menjadi pdf, itu harus memiliki margin yang benar.

tidak ada apa-apa101
sumber
Ini adalah solusi yang jauh lebih baik! Ini sangat berguna ketika Anda secara otomatis membangun dokumen di editor seperti Kileatau Sublime Text 2/3dan mengubah argumen baris perintah akan menyusahkan.
Abhinav