Defina o tamanho da margem ao converter de Markdown para PDF com pandoc

179

Eu criei um arquivo RMarkdown no RStudio e consegui tricotar com knitr em um arquivo HTML e .md. Em seguida, usei o pandoc para converter o arquivo .md em um arquivo PDF (eu recebo um erro se tentar converter do arquivo .html). No entanto, o PDF produzido possui margens enormes (como http://johnmacfarlane.net/pandoc/demo/example13.pdf ). Como posso fazer com que o pandoc produza algo com margens menores? Examinei o guia do usuário do pandoc, mas não encontrei nada útil.

Mchangun
fonte

Respostas:

241

Versões recentes do rmarkdown e pandoc

Nas versões mais recentes do rmarkdown , as configurações das margens podem ser feitas no cabeçalho YAML por meio do elemento de nível superior geometry. O que você especificar na geometrytag será canalizado para o modelo LaTeX que acompanha o Pandoc através do seguinte trecho de código LaTeX

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

Por exemplo, para especificar margens com 2 cm de largura, incluiria

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

Para que especificações mais complexas sejam passadas para o pacote de geometria LaTeX, agrupe as opções como faria com o LaTeX:

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

Resposta original

Esta é uma pergunta do LaTeX, pois o Pandoc está processando em PDF via LaTeX - o que você vinculou representa as margens padrão em um documento do LaTeX.

O pacote de geometria LaTeX, por exemplo, pode ser usado para alterar as margens da página. No entanto, você precisará de uma maneira de dizer ao Pandoc para usá-lo, incluindo-o no cabeçalho LaTeX aplicado ao arquivo md convertido.

Como você faz isso está documentado no Guia do Usuário Pandoc . Veja em particular o --template=FILEargumento da linha de comandos e a seção Modelos . Essencialmente, encontre e modifique o modelo padrão para incluir as instruções do LaTeX que você deseja usar ou inicie seu próprio modelo a partir do zero e coloque-o no local apropriado; consulte o --data-dirargumento da linha de comandos.


Outra alternativa, se você estiver usando uma versão recente do Pandoc, é usar o argumento da variável (definido com -V KEY[=VAL]ou --variable=KEY[:VAL]). O geometrypacote foi adicionado ao modelo padrão do LaTeX em maio de 2012 (consulte esta discussão ). Dessa forma, se você deseja alterar as margens da página, pode usar:

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

Você também pode especificar vários valores de variáveis. Por exemplo, se você deseja criar um pdf de 4 por 6 polegadas com margens de meia polegada, pode usar:

pandoc -V geometry:paperwidth=4in -V geometry:paperheight=6in -V geometry:margin=.5in -o output.pdf input.md
Gavin Simpson
fonte
33
Se você estiver usando a versão mais recente do Pandoc, também poderá defini-lo usando o variablecomando, em vez de ter que criar um modelo a partir do zero ou codificar as margens no modelo padrão. Por exemplo, para margens de 1 polegada, você pode usar pandoc -V geometry:margin=1in -o output.pdf input.md.
A5C1D2H2I1M1N2O1R2T1
@mrdwab Isso é exatamente o que eu preciso. Muito obrigado. Deseja postar isso como resposta para que eu possa aceitá-lo?
Mchangun
8
@mchangun, editei a resposta de Gavin para incluir meu comentário, já que é válido e pode ser útil para usuários que desejam usar outros pacotes LaTeX personalizados não incluídos nos modelos Pandoc padrão.
A5C1D2H2I1M1N2O1R2T1
1
Muito novo para pandoc. Eu estava descobrindo que a -V geometry:margin=1inopção não estava tendo efeito. Através do Google, encontrei em algum lugar (desculpe, perdi o link) a documentação dizendo que essa opção não tem efeito se estiver usando o modelo padrão. Eu só quero converter um arquivo de remarcação de uma página em PDF para enviar a alguém como panfleto. Minha solução rápida: edite o arquivo de modelo diretamente e adicione a linha \usepackage[margin=1.0in]{geometry}. Na minha instalação, o arquivo está em:/usr/share/pandoc-1.9.1.1/templates
Steve Koch
Existe uma maneira, a partir da linha de comando, de afetar apenas uma das margens? Meu livro inteiro tem uma lacuna gigante no fundo e eu só quero afetar essa margem. -V geometry: margin: bottom não parece funcionar.
Austin Fatheree
105

Nas versões mais recentes do pandoc, você pode definir vários parâmetros no cabeçalho YAML . Você pode definir a geometria aqui, por exemplo:

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

body text of document

Quando o pandoc o converte em pdf, ele deve ter margens corretas.

naught101
fonte
Esta é uma solução muito melhor! É bastante útil quando você está construindo automaticamente o documento em um editor como Kileou Sublime Text 2/3alterar os argumentos da linha de comando seria um problema.
Abhinav