Розпочаття розділів для початку на новій сторінці в PDF-файлі, створеному з пандока


20
%Title
%Author

#Header 1

Lots of words.

#Header 2

More words.

##Level 2 header

Вищенаведений текст можна перетворити у файл EPUB для електронних читачів pandoc -o output.epub input.mkd, а його можна перетворити у PDF із pandoc -o output.pdf input.mkd. Останнє вимагає встановлення латексного двигуна, що може мати значення для відповіді на питання.

За допомогою EPUB кожен заголовок першого рівня автоматично встановлюється у верхній частині нової сторінки (менших заголовків немає). Що стосується PDF-файлу, це не так - і я б не очікував, що це буде за замовчуванням, оскільки це буде суперечити основним цілям розмітки. Однак у мене виникають проблеми з пошуком параметра pandoc, щоб увімкнути цю поведінку.

Хтось знає про спосіб включити таку поведінку за допомогою pandoc? Редагування конфігураційного файлу було б прийнятним рішенням, але якщо синтаксис базується на латексі, я би вдячний його поясненню (про значення того, що є у конфігураційному файлі, а не на всебічне пояснення латексу!).

--chaptersВаріант pandoc здається, він повинен робити те, що я хочу ... але це

  • Робить глави відображатись лише на сторінках з непарними номерами, вставляючи порожні сторінки за необхідності (цікаво, але не те, що я хочу - я хочу роздрукувати це на папері формату А4, і це не буде викладено у книжковому стилі, тому будь-який естетичний позитив тут компенсується марною тратою паперу)
  • Вставляє Chapter xперед власне заголовком, що призводить до таких смішних речей, як:

Розділ 1

Пролог

Якщо є можливість приручити --chaptersваріант, це була б відповідна відповідь.

Відповіді:


28

Дивіться /tex/9497/start-new-page-with-each-section .

Щоб зробити цю роботу з pandoc, вам потрібно буде вставити наступне в преамбулу документа LaTeX, який pandoc створює на шляху до PDF:

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

Існує кілька способів зробити це. Перший - створити користувацький шаблон LaTeX з цими рядками в преамбулі. Потім ви можете скористатися опцією, --template mytemplate.latexщоб сказати pandoc використовувати цей шаблон. Щоб отримати шаблон LaTeX за замовчуванням, який ви можете змінити pandoc -D latex > mytemplate.latex.

Ще один варіант - створити невеликий файл titlesec.texіз лише цими двома рядками. Потім зателефонуйте pandoc з можливістю --include-in-header titlesec.texвключити його до заголовка, наприклад:

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

Дякую, це приголомшливо. Це має і недолік розірвання посилань у форматі PDF та встановлення всіх закладок (не впевнений, чи це правильне слово) на сторінку 1, але оскільки я використовую це в першу чергу для фактичного друку, це не велика справа. Єдине, що він не робить - це помістити вміст на ту ж сторінку, що й заголовок, але це зовсім не важливо.
злий

2
До речі, якщо ви той же Джон Макфарлейн, який створив пандок, я хотів би скористатись цим шансом, щоб подякувати вам - оскільки я виявив це, ваша програма стала життєво важливою частиною мого процесу написання. Також, чи є ресурси, які ви б рекомендували вивчити про LaTeX?
злий

4
Ласкаво просимо. Я почав з книги Лампорта LaTeX: Система підготовки документів, що добре.
Джон Макфарлейн

1
titlesec, здається, несумісний із поточним шаблоном латексу pandoc, запропонована відповідь генерує помилку латексу. Ви можете використовувати sectsty: \usepackage{sectsty} \sectionfont{\clearpage}.
Merlijn Sebrechts

Є помилки, коли я використовую вищевказаний метод. Рішення подано тут .
jdhao

11

Що я в кінцевому підсумку робив:

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

Це спричиняє використання класу документів LaTeX "звіт" (за замовчуванням, --chapterspandoc, здається, використовує клас "книга" або "спогад", який призначений для книг - різного розміру поля з кожною стороною для полегшення палітурних книг , глави тільки починаючи з непарних сторінок і т.д.), який поміщає заголовки 1 -го рівня у верхній частині сторінки, а не тільки помістити їх у верхній частині непарних сторінок.

Це все ще вставляє "Розділ X" перед кожною главою, що все ще дратує. Я також хотів би, щоб Зміст розпочався на тій самій сторінці, що і заголовок (це відбувається з класом документа «Article», але тоді розділи не перекидаються на початок нових сторінок - вони просто починаються куди завгодно). Однак я думаю, що для отримання цих запитань знадобиться більше знань про LaTeX, ніж у мене: я не збираюсь відзначати це як прийняту відповідь, оскільки ідеальна відповідь на це пояснить, як обійти ці два питання.


1

Крім того, більш ніж два роки пізніше, і я продовжував стикатися з цим питанням; тому для всіх, хто стикається з цим питанням, хто знайде це ...

Завдяки відповідям Джона та іншому включеному посиланню, я використовую наступне у файлі з pandoc -Hопцією, і він, здається, працює добре:

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

З цим я використав цю --chaptersопцію, pandocі вона генерує розділи PDF на нових сторінках без Chapter XX:заголовків сторінок. Використання -V documentclass=reportтакож дало бажаний результат, без явища пропуску сторінки та нової глави на номер непарної сторінки, що створюється bookкласом документа.


0

Як у тій же проблемі, і я зрозумів, що я опублікував своє рішення, використовуючи лише поля метаданих YAML.

documentclass: report
header-includes:
- \renewcommand{\chaptername}{}
- \renewcommand{\thechapter}{}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.