Pierwsze rozdziały na nowej stronie w pliku PDF wygenerowanym przez pandoc

20
%Title
%Author

#Header 1

Lots of words.

#Header 2

More words.

##Level 2 header

Powyższy tekst można przekształcić w plik EPUB dla e-czytników za pomocą pandoc -o output.epub input.mkdi można go przekonwertować do formatu PDF za pomocą pandoc -o output.pdf input.mkd. Ten ostatni wymaga zainstalowania silnika lateksowego, co może mieć znaczenie w odpowiedzi na pytanie.

W przypadku EPUB każdy nagłówek poziomu 1 jest automatycznie ustawiany na górze nowej strony (mniejsze nagłówki nie są). W przypadku pliku PDF tak nie jest - i nie spodziewałbym się, że będzie to domyślnie, ponieważ byłoby to sprzeczne z głównymi celami obniżki cen. Mam jednak problem ze znalezieniem opcji pandoc, aby włączyć to zachowanie.

Czy ktoś zna sposób, aby włączyć to zachowanie za pomocą pandoc? Edycja pliku konfiguracyjnego byłaby akceptowalnym rozwiązaniem, ale jeśli składnia jest oparta na lateksie, byłbym wdzięczny za wyjaśnienie (znaczenia tego, co jest w pliku konfiguracyjnym, a nie wyczerpujące wyjaśnienie dotyczące lateksu!).

--chaptersopcja pandoc wydaje się, że powinna robić to, co chcę ... ale to

  • Sprawia, że ​​rozdziały pojawiają się tylko na stronach nieparzystych, wstawiając puste strony w razie potrzeby (ciekawe, ale nie to, czego chcę - chcę wydrukować to na papierze A4, i nie będzie to układ w stylu książki, więc jakikolwiek pozytyw estetyczny jest tutaj równoważony przez marnotrawstwo papieru)
  • Wstawia Chapter xprzed rzeczywistym nagłówkiem, co prowadzi do niedorzecznych rzeczy, takich jak:

Rozdział 1

Prolog

Jeśli można oswoić --chaptersopcję, byłaby to odpowiednia odpowiedź.

zła
źródło

Odpowiedzi:

28

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

Aby to działało z pandoc, musisz wstawić następujące elementy do preambuły dokumentu LaTeX generowanego przez pandoc w drodze do pliku PDF:

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

Można to zrobić na kilka sposobów. Jednym z nich jest utworzenie niestandardowego szablonu LaTeX z tymi wierszami w preambule. Następnie możesz użyć opcji, --template mytemplate.latexaby powiedzieć pandocowi, aby używał tego szablonu. Aby uzyskać domyślny szablon LaTeX, który możesz zmodyfikować, wykonaj pandoc -D latex > mytemplate.latex.

Inną opcją jest utworzenie małego pliku titlesec.texzawierającego tylko te dwie linie. Następnie wywołaj pandoc z opcją --include-in-header titlesec.texwłączenia go do nagłówka, tak jak:

pandoc --toc --include-in-header titlesec.tex -o output.pdf input1.mkd input2.mkd
John MacFarlane
źródło
Dziękuję, to jest niesamowite. Ma to tę wadę, że przerywa łącza w pliku PDF i ustawia wszystkie zakładki (nie jestem pewien, czy to właściwe słowo) na stronie 1, ale ponieważ używam tego przede wszystkim do drukowania, to nie jest wielka sprawa. Jedyne, czego nie robi, to umieszczenie spisu treści na tej samej stronie co tytuł, ale to wcale nie jest tak ważne.
evilsoup
2
BTW, jeśli jesteś tym samym Johnem MacFarlane, który stworzył pandoc, chciałbym skorzystać z okazji, by ci podziękować - odkąd go odkryłem, twój program stał się istotną częścią mojego procesu pisania. Czy są jeszcze jakieś zasoby, które poleciłbyś do nauki o LaTeX?
evilsoup
4
Nie ma za co. Zacząłem od książki Lamport LaTeX: A Document Preparation System, która jest dobra.
John MacFarlane
1
titlesec wydaje się być niezgodny z obecnym szablonem lateksu pandoc, proponowana odpowiedź generuje błąd lateksu. Można użyć sectsty: \usepackage{sectsty} \sectionfont{\clearpage}.
Merlijn Sebrechts
Podczas korzystania z powyższej metody występują błędy. Rozwiązanie podano tutaj .
jdhao
11

Skończyło się na tym, że:

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

Powoduje to, że używana jest klasa dokumentu „raport” LaTeXa (domyślnie --chapterspandoc wydaje się używać klasy „książka” lub „pamiętnik”, które są zaprojektowane dla książek - marginesy różnej wielkości po każdej stronie, aby ułatwić oprawianie książek , rozdziały rozpoczynające się od nieparzystych stron itp.), które umieszczają nagłówki poziomu 1 na górze stron, ale nie tylko umieszczają je na górze stron nieparzystych.

To wciąż wstawia „Rozdział X” przed każdym rozdziałem, co nadal jest denerwujące. Chciałbym również, aby spis treści zaczynał się od tej samej strony, co tytuł (dzieje się tak w przypadku klasy dokumentów „artykuł”, ale rozdziały nie są przenoszone na początek nowych stron - zaczynają się gdziekolwiek). Myślę jednak, że zdobycie ich wymagałoby więcej wiedzy na temat LaTeX niż ja: nie oznaczę tego jako zaakceptowanej odpowiedzi, ponieważ idealna odpowiedź na to wyjaśnienie, jak obejść te dwa problemy.

zła
źródło
1

Także ponad dwa lata później, a ja wciąż napotykałem ten problem; więc dla każdego, kto napotka ten problem i znajdzie to ...

Dzięki odpowiedziom Johna i drugiego dołączonego linku używam następującego pliku z pandoc -Hopcją i wydaje się, że działa dobrze:

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

Wykorzystałem tę --chaptersopcję pandoci generuje rozdziały PDF na nowych stronach bez Chapter XX:nagłówków stron. Zastosowanie -V documentclass=reportrównież dało pożądany wynik, bez zjawiska pomijania stron i nowego rozdziału na nieparzystej liczbie stron generowanego przez bookklasę dokumentów.

Eugéne
źródło
0

Miałem ten sam problem i zorientowałem się, że opublikuję moje rozwiązanie przy użyciu tylko pól metadanych YAML.

documentclass: report
header-includes:
- \renewcommand{\chaptername}{}
- \renewcommand{\thechapter}{}
Jonathan Baldwin
źródło