Obtendo capítulos para iniciar em uma nova página em um PDF gerado por pandoc

20
%Title
%Author

#Header 1

Lots of words.

#Header 2

More words.

##Level 2 header

O texto acima pode ser transformado em um arquivo EPUB para e-readers pandoc -o output.epub input.mkd, e pode ser convertido em PDF com pandoc -o output.pdf input.mkd. O último requer a instalação de um mecanismo de látex, o que pode ser relevante para responder à pergunta.

Com o EPUB, cada cabeçalho de nível 1 é automaticamente definido na parte superior de uma nova página (os cabeçalhos menores não). Com o PDF, esse não é o caso - e eu não esperaria que fosse por padrão, pois isso seria contrário aos principais objetivos da redução. No entanto, estou tendo problemas para encontrar uma opção pandoc para habilitar esse comportamento.

Alguém sabe uma maneira de habilitar esse comportamento com pandoc? Editar um arquivo de configuração seria uma solução aceitável, mas se a sintaxe for baseada em látex, eu apreciaria uma explicação (do significado do que está no arquivo de configuração, não uma explicação abrangente sobre o látex!).

A --chaptersopção do pandoc parece que ele deve fazer o que eu quero ... mas

  • Faz com que os capítulos apareçam apenas em páginas com números ímpares, inserindo páginas em branco conforme necessário (interessante, mas não o que eu quero - estou procurando imprimi-lo em papel A4, e não será apresentado em estilo de livro, portanto qualquer positivo estético aqui é compensado por um desperdício de papel)
  • Inserções Chapter xantes do cabeçalho real, o que leva a coisas ridículas como:

Capítulo 1

Prólogo

Se é possível domesticar a --chaptersopção, essa seria uma resposta adequada.

evilsoup
fonte

Respostas:

28

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

Para fazer isso funcionar com o pandoc, você precisará inserir o seguinte no preâmbulo do documento do LaTeX que o pandoc gera no caminho para o PDF:

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

Existem várias maneiras de fazer isso. Uma é criar um modelo personalizado do LaTeX com essas linhas no preâmbulo. Você pode usar a opção --template mytemplate.latexpara informar ao pandoc para usar este modelo. Para obter o modelo padrão do LaTeX, que você pode modificar, faça pandoc -D latex > mytemplate.latex.

Outra opção é criar um arquivo pequeno titlesec.texcom apenas essas duas linhas. Em seguida, chame o pandoc com a opção --include-in-header titlesec.texde incluí-lo no cabeçalho, da seguinte maneira:

pandoc --toc --include-in-header titlesec.tex -o output.pdf input1.mkd input2.mkd
John MacFarlane
fonte
Obrigado, isso é incrível. Isso tem a desvantagem de quebrar os links no PDF e definir todos os indicadores (não tenho certeza se essa é a palavra certa) para a página 1, mas como estou usando isso principalmente para impressão real, isso não é grande coisa. A única coisa que isso não faz é colocar o índice na mesma página que o título, mas isso não é realmente importante.
evilsoup
2
BTW, se você é o mesmo John MacFarlane que criou o pandoc, gostaria de aproveitar a oportunidade para agradecer - desde que o descobri, seu programa se tornou uma parte vital do meu fluxo de trabalho de redação. Além disso, existem recursos que você recomendaria para aprender sobre o LaTeX?
precisa saber é
4
Seja bem-vindo. Comecei com o livro de Lamport LaTeX: A Document Preparation System, o que é bom.
precisa
11
Se o títulosec parece ser incompatível com o modelo de látex pandoc atual, a resposta proposta gera um erro de látex. Você pode usar sectsty: \usepackage{sectsty} \sectionfont{\clearpage}.
Merlijn Sebrechts
Há erros quando eu uso o método acima. A solução é dada aqui .
jdhao 17/06
11

O que acabei fazendo foi o seguinte:

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

Isso faz com que a classe de documento 'report' do LaTeX seja usada (por padrão, com --chapters, pandoc parece usar a classe 'book' ou 'memoir', projetada para livros - margens de tamanhos diferentes uma de cada lado para facilitar a encadernação de livros , capítulos iniciando apenas em páginas ímpares etc.), que coloca os cabeçalhos de nível 1 no topo das páginas, mas não os coloca apenas no topo das páginas com números ímpares.

Isso ainda insere o 'Capítulo X' antes de cada capítulo, o que ainda é irritante. Eu também gostaria que o Sumário iniciasse na mesma página que o título (isso acontece com a classe de documento 'article', mas os capítulos não são desviados para o início de novas páginas - eles apenas começam onde quer que seja). No entanto, acho que obtê-los exigiria mais conhecimento do LaTeX do que eu: não vou marcar isso como a resposta aceita, já que a resposta ideal para isso explicaria como solucionar esses dois problemas.

evilsoup
fonte
1

Além disso, mais de dois anos depois, eu também continuei abordando essa questão; então, para quem mais se deparar com esse problema e encontrar esse ...

Graças às respostas de John e ao outro link incluído, eu uso o seguinte em um arquivo com a pandoc -Hopção e parece funcionar bem:

% /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}}

Com isso, usei a --chaptersopção pandoce gera capítulos em PDF em novas páginas sem Chapter XX:títulos de página. O uso -V documentclass=reporttambém produziu o resultado desejado, sem o fenômeno de pular página e novo número de capítulo em página ímpar produzido pela bookclasse de documento.

Eugéne
fonte
0

Tive o mesmo problema e descobri que postaria minha solução usando apenas campos de metadados YAML.

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