Bắt các chương để bắt đầu trên một trang mới trong một tệp PDF được tạo ra


20
%Title
%Author

#Header 1

Lots of words.

#Header 2

More words.

##Level 2 header

Văn bản trên có thể được chuyển thành tệp EPUB cho người đọc điện tử pandoc -o output.epub input.mkdvà nó có thể được chuyển đổi thành PDF bằng pandoc -o output.pdf input.mkd. Cái sau đòi hỏi một động cơ latex được cài đặt, có thể liên quan đến việc trả lời câu hỏi.

Với EPUB, mỗi tiêu đề cấp 1 sẽ tự động được đặt ở đầu trang mới (không có tiêu đề nhỏ hơn). Với PDF, đây không phải là trường hợp - và tôi không mong muốn nó được mặc định, vì điều đó sẽ trái với các mục tiêu chính của đánh dấu. Tuy nhiên, tôi gặp khó khăn khi tìm một tùy chọn pandoc để kích hoạt hành vi này.

Có ai biết một cách để kích hoạt hành vi này với pandoc không? Chỉnh sửa tệp cấu hình sẽ là một giải pháp chấp nhận được, nhưng nếu cú ​​pháp dựa trên latex tôi sẽ đánh giá cao lời giải thích về nó (về ý nghĩa của những gì trong tệp cấu hình, không phải là giải thích toàn diện về latex!).

--chaptersTùy chọn của pandoc có vẻ như nó sẽ làm những gì tôi muốn ... nhưng nó

  • Làm cho các chương chỉ xuất hiện trên các trang có số lẻ, chèn các trang trống khi cần thiết (thú vị, nhưng không phải là điều tôi muốn - Tôi đang tìm cách in nó ra trên giấy A4, và nó sẽ không được đặt theo kiểu sách, vì vậy bất kỳ tích cực thẩm mỹ ở đây được bù đắp bởi một sự lãng phí giấy)
  • Chèn Chapter xtrước tiêu đề thực tế, dẫn đến một số nội dung vô lý như:

Chương 1

Mở đầu

Nếu có thể chế ngự --chapterstùy chọn, đó sẽ là một câu trả lời phù hợp.

Câu trả lời:


28

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

Để thực hiện công việc này với pandoc, bạn sẽ cần chèn đoạn sau vào phần mở đầu của tài liệu LaTeX pandoc tạo trên đường tới PDF:

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

Có một số cách để làm điều đó. Một là tạo mẫu LaTeX tùy chỉnh với các dòng này trong phần mở đầu. Sau đó, bạn có thể sử dụng tùy chọn --template mytemplate.latexđể báo cho pandoc sử dụng mẫu này. Để có được mẫu LaTeX mặc định, bạn có thể sửa đổi pandoc -D latex > mytemplate.latex.

Một tùy chọn khác là tạo một tệp nhỏ titlesec.texchỉ với hai dòng đó. Sau đó gọi pandoc với tùy chọn --include-in-header titlesec.texđưa nó vào tiêu đề, như vậy:

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

Cảm ơn bạn, điều này là tuyệt vời. Điều này có nhược điểm là phá vỡ các liên kết trong PDF và đặt tất cả các dấu trang (không chắc đây có phải là từ đúng không) sang trang 1, nhưng vì tôi sử dụng chủ yếu để in thực tế không phải là vấn đề lớn. Điều duy nhất nó không làm là đặt mục lục trên cùng một trang với tiêu đề, nhưng điều đó không thực sự quan trọng.
evilsoup

2
BTW, nếu bạn là John MacFarlane, người đã tạo ra pandoc, tôi muốn nhân cơ hội này để cảm ơn bạn - kể từ khi tôi phát hiện ra nó, chương trình của bạn đã trở thành một phần quan trọng trong quy trình viết của tôi. Ngoài ra, có tài nguyên nào bạn muốn giới thiệu để tìm hiểu về LaTeX không?
evilsoup

4
Không có gì. Tôi bắt đầu với cuốn sách LaTeX: A Chuẩn bị tài liệu của Lamport, rất hay.
John MacFarlane

1
titleec dường như không tương thích với mẫu latex pandoc hiện tại, câu trả lời được đề xuất tạo ra lỗi latex. Bạn có thể sử dụng hệ phái : \usepackage{sectsty} \sectionfont{\clearpage}.
Merlijn Sebrechts

Có lỗi khi tôi sử dụng phương pháp trên. Giải pháp được đưa ra ở đây .
jdhao

11

Những gì tôi đã làm là:

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

Điều này khiến lớp tài liệu 'báo cáo' của LaTeX được sử dụng (theo mặc định, với --chapterspandoc dường như sử dụng lớp 'cuốn sách' hoặc 'hồi ký', được thiết kế cho sách - mỗi lề có kích thước khác nhau để tạo điều kiện cho việc đóng sách , các chương chỉ bắt đầu trên các trang lẻ, v.v.), đặt các tiêu đề cấp 1 ở đầu trang, nhưng không chỉ đặt chúng ở đầu các trang có số lẻ.

Điều này vẫn chèn 'Chương X' trước mỗi chương, điều này vẫn gây khó chịu. Tôi cũng rất muốn để Mục lục bắt đầu trên cùng một trang với tiêu đề (điều này xảy ra với lớp tài liệu của 'bài báo', nhưng sau đó các chương không được chuyển sang đầu trang mới - chúng chỉ bắt đầu ở bất cứ đâu). Tuy nhiên, tôi nghĩ rằng việc có được những điều đó đòi hỏi nhiều kiến ​​thức về LaTeX hơn tôi có: Tôi sẽ không đánh dấu đây là câu trả lời được chấp nhận, vì câu trả lời lý tưởng cho điều này sẽ giải thích cách giải quyết hai vấn đề này.


1

Cũng hơn hai năm sau, tôi cũng tiếp tục gặp phải vấn đề này; Vì vậy, đối với bất kỳ ai khác gặp phải vấn đề này, những người tìm thấy ...

Nhờ các câu trả lời của John và liên kết khác có trong, tôi sử dụng thông tin sau trong một tệp với pandoc -Htùy chọn và nó có vẻ hoạt động tốt:

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

Với điều này, tôi đã sử dụng --chapterstùy chọn này pandocvà nó tạo ra các chương PDF trên các trang mới mà không có Chapter XX:tiêu đề trang. Việc sử dụng -V documentclass=reportcũng tạo ra kết quả mong muốn, mà không có hiện tượng bỏ qua trang và chương mới trên số lẻ trang được tạo bởi booklớp tài liệu.


0

Có cùng một vấn đề và tìm ra tôi đã đăng giải pháp của mình chỉ bằng các trường siêu dữ liệu YAML.

documentclass: report
header-includes:
- \renewcommand{\chaptername}{}
- \renewcommand{\thechapter}{}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.