Bölümlerin, pandoc tarafından oluşturulan PDF'de yeni bir sayfaya başlamasını sağlama


20
%Title
%Author

#Header 1

Lots of words.

#Header 2

More words.

##Level 2 header

Yukarıdaki metin e-okuyucular için bir EPUB dosyasına pandoc -o output.epub input.mkddönüştürülebilir ve ile PDF'ye dönüştürülebilir pandoc -o output.pdf input.mkd. İkincisi, sorunun yanıtlanmasıyla ilgili olabilecek bir lateks motorunun kurulmasını gerektirir.

EPUB ile, her 1. düzey başlık otomatik olarak yeni bir sayfanın en üstüne yerleştirilir (daha küçük başlıklar yoktur). PDF ile durum böyle değil - ve varsayılan olarak olmasını beklemezdim, çünkü bu işaretlemenin ana hedeflerine aykırı olurdu. Ancak, bu davranışı etkinleştirmek için bir pandoc seçeneği bulmakta sorun yaşıyorum.

Herkes pandoc ile bu davranışı etkinleştirmek için bir yol biliyor mu? Bir yapılandırma dosyasını düzenlemek kabul edilebilir bir çözüm olacaktır, ancak sözdizimi lateks tabanlıysa, bunun bir açıklamasını takdir edeceğim (yapılandırma dosyasında ne anlama geldiğinin anlamı, lateksin kapsamlı bir açıklaması değil!).

pandoc'un --chaptersseçeneği istediğimi yapması gerektiği gibi görünüyor ... ama

  • Bölümleri yalnızca tek sayılı sayfalarda görünmesini sağlar, gerekirse boş sayfalar ekler (ilginç, ancak istediğim değil - Bunu A4 kağıda yazdırmak istiyorum ve kitap tarzı düzenlenmeyecek, bu yüzden buradaki herhangi bir estetik pozitif, kağıt israfıyla dengelenir)
  • Chapter xGerçek başlıktan önce ekler , bu da bazı saçma şeylere yol açar:

Bölüm 1

prolog

--chaptersSeçeneği evcilleştirmek mümkünse , bu uygun bir cevap olacaktır.

Yanıtlar:


28

Bkz. Https://tex.stackexchange.com/questions/9497/start-new-page-with-each-section .

Bu işlemin pandoc ile çalışmasını sağlamak için pandoc'un PDF yolunda oluşturduğu LaTeX belgesinin giriş bölümüne aşağıdakileri eklemeniz gerekir:

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

Bunu yapmanın birkaç yolu vardır. Bunlardan biri, önsözde bu satırlarla özel bir LaTeX şablonu oluşturmaktır. Daha sonra --template mytemplate.latexpandoc'a bu şablonu kullanmasını söyleme seçeneğini kullanabilirsiniz. Değiştirebileceğiniz varsayılan LaTeX şablonunu almak için bunu yapın pandoc -D latex > mytemplate.latex.

Başka bir seçenek, titlesec.texsadece bu iki satırlı küçük bir dosya oluşturmaktır . Ardından --include-in-header titlesec.tex, başlığı içine ekleme seçeneğiyle pandoc'u arayın, şöyle :

pandoc --toc --include-in-header titlesec.tex -o output.pdf input1.mkd input2.mkd

Teşekkür ederim, bu harika. Bu, PDF içindeki bağlantıları kırmanın ve tüm yer imlerini (bunun doğru kelime olup olmadığından emin değilim) sayfa 1'e ayarlamanın dezavantajı var, ancak bunu öncelikle gerçek baskı için kullanıyorum çünkü bu büyük bir sorun değil. Yapmadığı tek şey, içindekileri başlıkla aynı sayfaya koymak, ancak bu hiç de önemli değil.
evilsoup

2
BTW, pandoc yapan aynı John MacFarlane iseniz, size teşekkür etmek için bu şansı kullanmak istiyorum - keşfettiğimden beri, programınız yazma iş akışımın hayati bir parçası haline geldi. Ayrıca, LaTeX hakkında bilgi edinmek için önerebileceğiniz kaynaklar var mı?
evilsoup

4
Rica ederim. Lamport'un LaTeX: Bir Belge Hazırlama Sistemi kitabıyla başladım, ki bu iyi.
John MacFarlane

1
titlesec, mevcut pandoc lateks şablonuyla uyumsuz görünüyor, önerilen cevap bir lateks hatası oluşturur. Sen sectsty kullanabilirsiniz: \usepackage{sectsty} \sectionfont{\clearpage}.
Merlijn Sebrechts

Yukarıdaki yöntemi kullandığımda hatalar var. Çözüm burada verilmektedir .
jdhao

11

Yaptığım şey şuydu:

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

Bu, LaTeX 'rapor' belge sınıfının kullanılmasına neden olur (varsayılan olarak --chapters, pandoc kitaplar için tasarlanmış 'kitap' veya 'anı' sınıfını kullanıyor gibi görünüyor - kitap ciltlemeyi kolaylaştırmak için her bir tarafta farklı boyutlu kenar boşlukları , yalnızca tek sayfalarda başlayan bölümler vb.), 1. düzey üstbilgileri sayfaların en üstüne yerleştirir, ancak yalnızca tek numaralı sayfaların en üstüne yerleştirmez.

Bu hala her bölümden önce 'Bölüm X'i ekliyor ve bu da can sıkıcı. Ayrıca, İçindekiler'in başlıkla aynı sayfada başlamasını da istiyorum (bu, 'makale' belge sınıfıyla olur, ancak daha sonra bölümler yeni sayfaların başlangıcına kadar şant edilmez - sadece her yerden başlarlar). Ancak, bunları elde etmenin LaTeX hakkında benden daha fazla bilgi gerektireceğini düşünüyorum : Bunu kabul edilen cevap olarak işaretlemeyeceğim, çünkü bunun için ideal cevap bu iki sorunun nasıl çözüleceğini açıklayacaktır.


1

Ayrıca iki yıldan fazla bir süre sonra bu konuya da devam ettim; bu sorunu yaşayan herkes için bunu bulan ...

John ve dahil diğer bağlantı cevapları sayesinde , ben pandoc -Hseçeneği ile bir dosyada aşağıdakileri kullanın ve iyi çalışıyor gibi görünüyor:

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

Bununla --chaptersseçeneği kullandım pandocve Chapter XX:sayfa başlığı olmayan yeni sayfalarda PDF bölümleri oluşturur . Kullanıldığında -V documentclass=report, bookbelge sınıfı tarafından üretilen sayfa-sayısı-tek-sayfada-numarası olgusu olmadan da istenen sonuç elde edilmiştir .


0

Aynı sorunu vardı ve ben sadece YAML meta veri alanları kullanarak benim çözüm sonrası anladım.

documentclass: report
header-includes:
- \renewcommand{\chaptername}{}
- \renewcommand{\thechapter}{}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.