Question Générer un document avec une table des matières contenant des numéros de page en utilisant Markdown ou quelque chose de similaire?


Je dois créer un grand document qui, une fois imprimé, comptera quelques centaines de pages. Je voudrais faire cela avec quelque chose comme Markdown. Une de mes exigences est que le document doit avoir des numéros de page et une table des matières. Existe-t-il un moyen d'utiliser Markdown ou un langage de balisage similaire pour générer automatiquement une table des matières avec des numéros de page associés? Tout ce que j'ai déjà appris avec Markdown peut générer automatiquement une table des matières pour la sortie HTML, mais aucun numéro de page n'est associé.


4
2018-05-30 13:54


origine


Probablement parce que HTML n'a pas de concept de numéros de page. Qu'est-ce qu'une page? - Bob
le démarquage n'a pas à être converti en HTML. - Jared
On dirait que ce que vous cherchez est quelque chose comme PDF, par opposition à quelque chose qui se retrouve en HTML / XHTML. - killermist
Note: pour afficher réellement une table des matières pour le HTML (sans les numéros de page, naturellement), vous avez besoin à la fois du --toc option ET la -s (autonome) option. Je n'ai pas trouvé cela documenté nulle part ... - nealmcb


Réponses:


Sonne comme un travail pour pandoc.

HTML n'a pas de concept de 'pages'; ce serait probablement possible kludge quelque chose avec <div></div> tags, mais je voudrais juste utiliser PDF:

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

Pandoc peut prendre un nombre arbitraire d'entrées; il ajoute une nouvelle ligne à la fin de chaque entrée et les concatène. La commande ci-dessus créera un fichier PDF conçu pour être lié en tant que livre - chaque chapitre (indiqué par un titre de niveau 1) commencera sur une page impaire. Si vous ne souhaitez pas ce comportement, utilisez les éléments suivants:

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

Si vous voulez économiser du papier et ne vous souciez pas des chapitres commençant juste là où le précédent se termine (ils commenceront même au milieu d'une page), appelez pandoc sans --chapters option:

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

Toi pouvez générer un code HTML avec une table des matières, mais avec toutes les limitations que vous avez répertoriées. Il est également possible de générer des documents ODT et Microsoft DOC avec pandoc, mais je pense qu'ils ne semblent pas très bons, en particulier par rapport à la belle génération de PDF.

La création de fichiers PDF avec pandoc nécessite l'installation d'un moteur LaTeX. C'est assez trivial sous Linux, où vous en aurez au moins un dans les dépôts, mais sous Windows, ce sera peut-être un peu plus difficile (je ne le saurais pas, je n'ai jamais vraiment essayé). En tant que tel, il est possible de personnaliser les choses à votre convenance avec un modèle LaTeX personnalisé - mais je ne suis pas encore au courant, alors je reste fidèle aux valeurs par défaut.


10
2018-06-03 14:16



Ça a l'air bien et c'est probablement la solution que je vais utiliser. - Jared


Après quelques minutes de Google, j'ai remarqué que vous aviez besoin de votre propre modèle LaTeX qui peut être utilisé comme option pour pandoc:

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

Cependant, votre modèle nécessite des modifications sur le site LaTeX. Comme suggestion, vous pouvez utiliser:

Pour commencer, vous pouvez utiliser le modèle suivant. J'ai copié le modèle par défaut https://github.com/jgm/pandoc-templates/blob/master/default.latex et ajouté des trucs supplémentaires.

Je suis sûr que vous pouvez supprimer la plupart des combinaisons if-end. Le modèle en a besoin pour avoir plus d'options pour les utilisateurs.

\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





Avez-vous envisagé d'utiliser LaTeX?

Les autres réponses suggèrent d'utiliser Pandoc, qui semble pouvoir convertir Markdown en LaTeX, mais il pourrait être plus facile de démarrer directement dans LaTeX.

LaTeX est conçu pour la création de documents imprimés et intègre des fonctions telles que les numéros de page et la génération de COT. Découvrez ce tutoriel de base: http://www.andy-roberts.net/writing/latex


1
2018-06-05 13:53