Frage Generieren Sie ein Dokument mit Inhaltsverzeichnis, das Seitenzahlen enthält, mit Markdown oder ähnlichem?


Ich muss ein großes Dokument erstellen, das beim Drucken ein paar hundert Seiten umfasst. Ich würde das gerne mit etwas wie Markdown machen. Eine meiner Anforderungen ist, dass das Dokument Seitenzahlen und ein Inhaltsverzeichnis haben muss. Gibt es eine Möglichkeit, Markdown oder eine ähnliche Markup-Sprache zu verwenden, um automatisch ein Inhaltsverzeichnis mit zugehörigen Seitennummern zu erstellen? All die Dinge, die ich bisher mit Markdown gesehen habe, können automatisch ein Inhaltsverzeichnis für die HTML-Ausgabe erzeugen, aber es gibt keine zugehörigen Seitennummern.


4
2018-05-30 13:54


Ursprung


Wahrscheinlich, weil HTML kein Konzept für Seitenzahlen hat. Was ist eine Seite? - Bob
Markdown muss nicht in HTML konvertiert werden. - Jared
Es klingt wie das, was Sie suchen, ist etwas wie PDF, im Gegensatz zu etwas, das am Ende in HTML / XHTML gerendert wird. - killermist
Hinweis: Um tatsächlich ein Inhaltsverzeichnis für HTML (ohne Seitenzahlen, natürlich) zu zeigen, benötigen Sie sowohl die --toc Möglichkeit UND das -s (eigenständige) Option. Ich habe das nirgends dokumentiert gefunden .... - nealmcb


Antworten:


Klingt wie ein Job für Pandora.

HTML hat kein Konzept von 'Seiten'; es wäre wahrscheinlich möglich zusammen etwas mitmachen <div></div> Tags, aber ich würde nur PDF verwenden:

pandoc --toc --chapters -o output.pdf input1.mkd input2.mkd

Pandoc kann eine beliebige Anzahl von Eingaben annehmen; Es fügt dem Ende jeder Eingabe eine neue Zeile hinzu und verkettet sie. Der obige Befehl erstellt eine PDF-Datei, die als Buch gebunden ist - jedes Kapitel (durch einen Titel der Stufe 1 gekennzeichnet) beginnt auf einer ungeraden Seite. Wenn Sie dieses Verhalten nicht möchten, verwenden Sie Folgendes:

pandoc --toc -V documentclass=report -o output.pdf input1.mkd input2.mkd

Wenn Sie Papier sparen wollen und nichts dagegen haben, dass Kapitel nur dort beginnen, wo das vorhergehende endet (sie werden sogar in der Mitte einer Seite beginnen), rufen Sie pandoc ohne das --chapters Möglichkeit:

pandoc --toc -o output.pdf input1.mkd input2.mkd

Sie kann Generieren Sie einen HTML-Code mit einem Inhaltsverzeichnis, aber mit allen Einschränkungen, die Sie aufgelistet haben. Es ist auch möglich, ODT- und Microsoft DOC-Dokumente mit Pandoc zu generieren, aber ich denke, dass sie nicht besonders gut aussehen, besonders im Vergleich zur schönen PDF-Generierung.

Um PDFs mit Pandoc zu erstellen, muss eine LaTeX-Engine installiert sein. Das ist unter Linux ziemlich trivial, wo Sie mindestens einen in den Repositories haben, aber unter Windows könnte es ein bisschen schwieriger sein (ich würde es nicht wissen, ich habe es nie wirklich versucht). So ist es möglich, Dinge mit einer eigenen LaTeX-Vorlage nach Ihren Wünschen anzupassen - aber ich habe mich noch nicht damit beschäftigt, also bleibe ich bei den (ziemlich netten) Standardeinstellungen.


10
2018-06-03 14:16



Sieht gut aus und das ist wahrscheinlich die Lösung, mit der ich gehen werde. - Jared


Nach einigen Google-Minuten habe ich gemerkt, dass Sie eine eigene LaTeX-Vorlage benötigen, die als Option an pandoc übergeben werden kann:

pandoc --toc --chapter --template=yourtemplate.tex -o output.pdf input1.mkd

Ihre Vorlage benötigt jedoch einige Änderungen auf der LaTeX-Site. Als Vorschlag können Sie verwenden:

Als Ausgangspunkt können Sie die folgende Vorlage verwenden. Ich habe die Standardvorlage kopiert https://github.com/jgm/pandoc-templates/blob/master/default.latex und fügte ein paar zusätzliche Sachen hinzu.

Ich bin mir sicher, dass Sie die meisten if-end-Kombinationen entfernen können. Die Vorlage benötigt mehr Optionen für Benutzer.

\documentclass[chapterprefix=false,titlepage=false]{scrreprt}
\usepackage[T1]{fontenc}

\usepackage{amssymb,amsmath}
\usepackage{fixltx2e} % provides \textsubscript
% use upquote if available, for straight quotes in verbatim environments
\IfFileExists{upquote.sty}{\usepackage{upquote}}{}
\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
  \usepackage[utf8]{inputenc}
$if(euro)$
  \usepackage{eurosym}
$endif$
\else % if luatex or xelatex
  \ifxetex
    \usepackage{mathspec}
    \usepackage{xltxtra,xunicode}
  \else
    \usepackage{fontspec}
  \fi
  \defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase}
  \newcommand{\euro}{€}
$if(mainfont)$
    \setmainfont{$mainfont$}
$endif$
$if(sansfont)$
    \setsansfont{$sansfont$}
$endif$
$if(monofont)$
    \setmonofont{$monofont$}
$endif$
$if(mathfont)$
    \setmathfont(Digits,Latin,Greek){$mathfont$}
$endif$
\fi
% use microtype if available
\IfFileExists{microtype.sty}{\usepackage{microtype}}{}
$if(geometry)$
\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry}
$endif$
$if(natbib)$
\usepackage{natbib}
\bibliographystyle{plainnat}
$endif$
$if(biblatex)$
\usepackage{biblatex}
$if(biblio-files)$
\bibliography{$biblio-files$}
$endif$
$endif$
$if(listings)$
\usepackage{listings}
$endif$
$if(lhs)$
\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{}
$endif$
$if(highlighting-macros)$
$highlighting-macros$
$endif$
$if(verbatim-in-note)$
\usepackage{fancyvrb}
$endif$
$if(tables)$
\usepackage{longtable}
$endif$
$if(graphics)$
\usepackage{graphicx}
% Redefine \includegraphics so that, unless explicit options are
% given, the image width will not exceed the width of the page.
% Images get their normal width if they fit onto the page, but
% are scaled down if they would overflow the margins.
\makeatletter
\def\ScaleIfNeeded{%
  \ifdim\Gin@nat@width>\linewidth
    \linewidth
  \else
    \Gin@nat@width
  \fi
}
\makeatother
\let\Oldincludegraphics\includegraphics
{%
 \catcode`\@=11\relax%
 \gdef\includegraphics{\@ifnextchar[{\Oldincludegraphics}{\Oldincludegraphics[width=\ScaleIfNeeded]}}%
}%
$endif$
\ifxetex
  \usepackage[setpagesize=false, % page size defined by xetex
              unicode=false, % unicode breaks when used with xetex
              xetex]{hyperref}
\else
  \usepackage[unicode=true]{hyperref}
\fi
\hypersetup{breaklinks=true,
            bookmarks=true,
            pdfauthor={$author-meta$},
            pdftitle={$title-meta$},
            colorlinks=true,
            urlcolor=$if(urlcolor)$$urlcolor$$else$blue$endif$,
            linkcolor=$if(linkcolor)$$linkcolor$$else$magenta$endif$,
            pdfborder={0 0 0}}
\urlstyle{same}  % don't use monospace font for urls
$if(links-as-notes)$
% Make links footnotes instead of hotlinks:
\renewcommand{\href}[2]{#2\footnote{\url{#1}}}
$endif$
$if(strikeout)$
\usepackage[normalem]{ulem}
% avoid problems with \sout in headers with hyperref:
\pdfstringdefDisableCommands{\renewcommand{\sout}{}}
$endif$
\setlength{\parindent}{0pt}
\setlength{\parskip}{6pt plus 2pt minus 1pt}
\setlength{\emergencystretch}{3em}  % prevent overfull lines
$if(numbersections)$
\setcounter{secnumdepth}{5}
$else$
\setcounter{secnumdepth}{0}
$endif$
$if(verbatim-in-note)$
\VerbatimFootnotes % allows verbatim text in footnotes
$endif$
$if(lang)$
\ifxetex
  \usepackage{polyglossia}
  \setmainlanguage{$mainlang$}
\else
  \usepackage[$lang$]{babel}
\fi
$endif$
$for(header-includes)$
$header-includes$
$endfor$

$if(title)$
\title{$title$}
$endif$
\author{$for(author)$$author$$sep$ \and $endfor$}
\date{$date$}

\begin{document}
$if(title)$
\maketitle
$endif$

$for(include-before)$
$include-before$

$endfor$
$if(toc)$
{
\hypersetup{linkcolor=black}
\setcounter{tocdepth}{$toc-depth$}
\begingroup
\let\clearpage\relax
\tableofcontents
\endgroup
}
$endif$
$body$

$if(natbib)$
$if(biblio-files)$
$if(biblio-title)$
$if(book-class)$
\renewcommand\bibname{$biblio-title$}
$else$
\renewcommand\refname{$biblio-title$}
$endif$
$endif$
\bibliography{$biblio-files$}

$endif$
$endif$
$if(biblatex)$
\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$

$endif$
$for(include-after)$
$include-after$

$endfor$
\end{document}

1
2018-06-03 16:48





Haben Sie über LaTeX nachgedacht?

Die anderen Antworten empfehlen die Verwendung von Pandoc, das aussieht, als könnte es Markdown in LaTeX konvertieren, aber es könnte einfacher sein, direkt in LaTeX zu starten.

LaTeX wurde für die Erstellung von Druckdokumenten entwickelt und enthält unter anderem Seitenzahlen und TOC-Generierung. Schau dir dieses grundlegende Tutorial an: http://www.andy-roberts.net/writing/latex


1
2018-06-05 13:53