Hacer que los capítulos comiencen en una nueva página en un PDF generado por Pandoc

20
%Title
%Author

#Header 1

Lots of words.

#Header 2

More words.

##Level 2 header

El texto anterior se puede convertir en un archivo EPUB para lectores electrónicos pandoc -o output.epub input.mkd, y se puede convertir a PDF con pandoc -o output.pdf input.mkd. Este último requiere la instalación de un motor de látex, que puede ser relevante para responder la pregunta.

Con el EPUB, cada encabezado de nivel 1 se configura automáticamente en la parte superior de una página nueva (los encabezados menores no). Con el PDF, este no es el caso, y no esperaría que fuera por defecto, ya que eso sería contrario a los objetivos principales del descuento. Sin embargo, tengo problemas para encontrar una opción de pandoc para habilitar este comportamiento.

¿Alguien sabe de una manera de habilitar este comportamiento con pandoc? Editar un archivo de configuración sería una solución aceptable, pero si la sintaxis está basada en látex, agradecería una explicación (¡del significado de lo que está en el archivo de configuración, no una explicación completa del látex!).

La --chaptersopción de Pandoc parece que debería hacer lo que quiero ... pero

  • Hace que los capítulos solo aparezcan en páginas impares, insertando páginas en blanco según sea necesario (interesante, pero no es lo que quiero; estoy buscando imprimir esto en papel A4, y no se presentará en forma de libro, así que cualquier estética positiva aquí se compensa con un desperdicio de papel)
  • Se inserta Chapter xantes del encabezado real, lo que lleva a algunas cosas ridículas como:

Capítulo 1

Prólogo

Si es posible domesticar la --chaptersopción, esa sería una respuesta adecuada.

maldad
fuente

Respuestas:

28

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

Para que esto funcione con pandoc, deberá insertar lo siguiente en el preámbulo del documento LaTeX que genera pandoc en el camino a PDF:

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

Hay varias maneras de hacer eso. Una es crear una plantilla personalizada de LaTeX con estas líneas en el preámbulo. Luego puede usar la opción --template mytemplate.latexpara indicarle a Pandoc que use esta plantilla. Para obtener la plantilla predeterminada de LaTeX, que puede modificar, haga pandoc -D latex > mytemplate.latex.

Otra opción es crear un archivo pequeño titlesec.texcon solo esas dos líneas. Luego llame a pandoc con la opción --include-in-header titlesec.texde incluirlo en el encabezado, así:

pandoc --toc --include-in-header titlesec.tex -o output.pdf input1.mkd input2.mkd
John MacFarlane
fuente
Gracias, esto es asombroso. Esto tiene el inconveniente de romper los enlaces dentro del PDF y configurar todos los marcadores (no estoy seguro si esta es la palabra correcta) en la página 1, pero dado que estoy usando esto principalmente para la impresión real, no es un gran problema. Lo único que no hace es poner la tabla de contenido en la misma página que el título, pero eso no es realmente importante.
evilsoup
2
Por cierto, si eres el mismo John MacFarlane que hizo pandoc, me gustaría aprovechar esta oportunidad para agradecerte, desde que lo descubrí, tu programa se ha convertido en una parte vital de mi flujo de trabajo de escritura. Además, ¿hay algún recurso que recomiende para aprender sobre LaTeX?
evilsoup
44
De nada. Comencé con el libro de Lamport LaTeX: un sistema de preparación de documentos, que es bueno.
John MacFarlane
1
titleec parece ser incompatible con la plantilla actual de látex de pandoc, la respuesta propuesta genera un error de látex. Puede utilizar sectsty: \usepackage{sectsty} \sectionfont{\clearpage}.
Merlijn Sebrechts
Hay errores cuando uso el método anterior. La solución se da aquí .
jdhao
11

Lo que terminé haciendo fue esto:

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

Esto hace que se use la clase de documento 'informe' de LaTeX (de manera predeterminada, con --chapterspandoc parece usar la clase 'libro' o 'memoria', que están diseñados para libros: márgenes de diferentes tamaños uno a cada lado para facilitar la encuadernación de libros , capítulos que solo comienzan en páginas impares, etc.), que coloca los encabezados de nivel 1 en la parte superior de las páginas, pero no solo los coloca en la parte superior de las páginas impares.

Esto todavía inserta 'Capítulo X' antes de cada capítulo, lo que sigue siendo molesto. También me gustaría que la Tabla de contenido comience en la misma página que el título (esto sucede con la clase de documento 'artículo', pero luego los capítulos no se desvían al comienzo de las páginas nuevas, solo comienzan donde sea). Sin embargo, creo que obtenerlos requeriría más conocimiento de LaTeX que el que tengo: no voy a marcar esto como la respuesta aceptada, ya que la respuesta ideal para esto explicaría cómo solucionar estos dos problemas.

maldad
fuente
1

También más de dos años después, y seguí encontrándome con este problema también; así que para cualquier otra persona que se encuentre con este problema y encuentre esto ...

Gracias a las respuestas de John y al otro enlace incluido, utilizo lo siguiente en un archivo con la pandoc -Hopción y parece funcionar bien:

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

Con esto, utilicé la --chaptersopción pandocy genera capítulos en PDF en páginas nuevas sin Chapter XX:encabezados de página. El uso -V documentclass=reporttambién produjo el resultado deseado, sin el fenómeno de salto de página y nuevo capítulo en número de página impar producido por la bookclase de documento.

Eugenio
fuente
0

Tuve el mismo problema y descubrí que publicaría mi solución usando solo campos de metadatos YAML.

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