Préface
Markdown est un excellent moyen de rédiger un petit article, et parfois un texte assez volumineux, avec une mise en forme simple en italique et en gras. De plus, Markdown est également bon pour écrire des articles incluant du code source. Mais parfois, on souhaite sans perte, sans tracas, le convertir en un fichier PDF ordinaire et bien formaté, et pour éviter les problèmes lors de la conversion, comme ceux que j'ai rencontrés — il est impossible d'écrire en russe dans les commentaires du code source, les lignes trop longues ne se déplacent pas, mais sont coupées, et d'autres petits problèmes. Ce guide permettra de configurer rapidement le convertisseur. md2pdf sans vraiment se soucier de son fonctionnement. Le script pour une installation plus ou moins automatique est ci-dessous dans la section correspondante.
Mon exemple de modèle TeX pour la conversion utilise le package de polices PSCyr, qui inclut le support des polices Microsoft, notamment Times New Roman. Telles étaient les exigences pour le diplôme selon les normes. Si vous le pouvez, vous pouvez modifier le modèle selon vos besoins. Dans mes instructions, il faudra au préalable s'embêter un peu avec la configuration de PSCyr dans TexLive. La configuration se fait sur la distribution Linux Mint Mate, pour d'autres distributions, il faudra peut-être chercher les répertoires standards du package TexLive pour votre système.
Installation de TexLive
Évidemment, il est possible d'installer uniquement les parties nécessaires de ce package. Mais personnellement, j'avais franchement la flemme de chercher l'installation minimale fonctionnelle. Pour que tout fonctionne correctement, installons le package TexLive complet. Il s'appelle texlive-full et pèse un peu plus de 2 Go, gardez ce fait à l'esprit. Exécutons la commande :
user@hostname:~$ sudo apt install texlive-full -yAprès une installation suffisamment longue, on peut passer au point suivant.
Installation du convertisseur Pandoc
Pandoc est un package Linux permettant de convertir certains formats de texte en d'autres. Il a beaucoup de fonctionnalités intéressantes que vous pouvez explorer par vous-même sur Internet. Nous nous intéressons uniquement à la possibilité de convertir un fichier markdown en PDF. Vérifions si Pandoc est installé et, si ce n'est pas le cas, nous allons l'installer. Par exemple :
user@hostname:~$ dpkg -s pandocSi la sortie indique qu'il n'est pas installé — on l'installe :
user@hostname:~$ sudo apt install pandoc -yInstallation du package PSCyr pour TexLive
Pour commencer, il faut télécharger PSCyr. Pour l'instant, il est encore disponible ici. , si au moment de la lecture de l'article il n'est pas accessible pour une raison quelconque, ne désespérez pas, il est facile à trouver avec un guide d'installation en tapant dans Google quelque chose comme « Installation PsCyr texlive ». S'il est disponible, tant mieux, téléchargez-le et considérons que vous avez décompressé l'archive dans votre dossier personnel, ainsi le chemin vers le dossier contenu dans l'archive ressemble à ~\/PSCyr. Ensuite, ouvrez le Terminal et exécutez les commandes suivantes :
user@hostname:~$ cd
user@hostname:~$ mkdir .\/PSCyr\/fonts\/map .\/PSCyr\/fonts\/enc
user@hostname:~$ cp .\/PSCyr\/dvips\/pscyr\/*.map .\/PSCyr\/fonts\/map\/\nuser@hostname:~$ cp .\/PSCyr\/dvips\/pscyr\/*.enc .\/PSCyr\/fonts\/enc\/\nuser@hostname:~$ echo "fadr6t AdvertisementPSCyr "T2AEncoding ReEncodeFont"" > .\/PSCyr\/fonts\/map\/pscyr.mapEnsuite, découvrons où se trouve le répertoire local texmf. Exécutez la commande :
user@hostname:~$ kpsewhich -expand-var='$TEXMFLOCAL'Ce répertoire est probablement chez vous — /usr/local/share/texmf/, et alors nous exécutons :
user@hostname:~$ sudo cp -R .\/PSCyr\/* \/usr\/local\/share\/texmf\/Ou vous pouvez ne pas vous en soucier et exécuter la commande qui le copiera dans le dossier texmf où qu'il soit :
user@hostname:~$ sudo cp -R .\/PSCyr\/* $(kpsewhich -expand-var='$TEXMFLOCAL')Les polices PSCyr sont installées, connectons-les dans TexLive :
user@hostname:~$ sudo texhash
user@hostname:~$ updmap --enable Map=pscyr.map
user@hostname:~$ sudo mktexlsrModèle LaTeX pour convertir md2pdf
Je ne vais pas décrire comment ce modèle est configuré, je vais simplement le présenter sous un spoiler sans trop d'explications. Il suffit de dire qu'il est bien configuré, en tout cas il gère correctement les textes contenant beaucoup de code source. Si vous n'êtes pas satisfait des marges, des interlignes, de l'absence de numérotation des sections et sous-sections, à mon avis, il suffit de taper sur Internet un questionnement comme « comment faire en Latex… » et ensuite cela dépend de vos besoins. Si vous avez encore des doutes, écrivez dans les commentaires, je vais essayer de me remémorer mes paramètres d'il y a 4 ans et vous expliquer à quoi chaque ligne du modèle correspond. Pour l'instant, je vais décrire comment je l'ai fait sur mon PC, et vous êtes libre de le reproduire ou de le modifier selon vos besoins.
Créons le fichier template.tex dans le répertoire /usr/share/texlive/:
user@hostname:~$ sudo touch \/usr\/share\/texlive\/template.texAssignons-lui des droits de lecture :
user@hostname:~$ sudo chmod 444 \/usr\/share\/texlive\/template.texouvrez-le en tant que root et insérez-y le contenu caché sous le spoiler ci-dessous :
user@hostname:~$ sudo nano \/usr\/share\/texlive\/template.texContenu du modèle \/usr\/share\/texlive\/template.tex
documentclass[oneside,final,14pt]{extreport}
usepackage{extsizes}
usepackage{pscyr}
renewcommand{rmdefault}{ftm}
usepackage[T2A]{fontenc}
usepackage[utf8]{inputenc}
usepackage{amsmath}
usepackage{mathtext}
usepackage{multirow}
usepackage{listings}
usepackage{ucs}
usepackage{hhline}
usepackage{tabularx}
usepackage{booktabs}
usepackage{longtable}
usepackage{titlesec}
usepackage{hyperref}
usepackage{graphicx}
usepackage{setspace}
usepackage[center,it,labelsep=period]{caption}
usepackage[french,russian,ukrainian]{babel}
usepackage{vmargin}
newcommand{specialcell}[2][c]{%
begin{tabular}[#1]{@{}c@{}}#2end{tabular}}
setpapersize{A4}
setmarginsrb {1cm}{1cm}{1cm}{1cm}{0pt}{0mm}{0pt}{13mm}
usepackage{indentfirst}
setlengthparindent{1cm}
renewcommand{baselinestretch}{1}
renewcommandthechapter{}
renewcommandthesection{}
renewcommandthesubsection{}
renewcommandthesubsubsection{}
titleformat
{chapter} % command
{bfseriesnormalsizecentering} % format
{thechapter} % label
{0.5ex} % sep
{
centering
}
[
vspace{-1.5ex}
] % after-code
titleformat
{section}
[block]
{normalfontbfseries}
{thesection}{0.5em}{}
sloppy
letoldenumerateenumerate
renewcommand{enumerate}{
oldenumerate
setlength{itemsep}{1pt}
setlength{parskip}{0pt}
setlength{parsep}{0pt}
}
letolditemizeitemize
renewcommand{itemize}{
olditemize
setlength{itemsep}{1pt}
setlength{parskip}{0pt}
setlength{parsep}{0pt}
}
providecommand{tightlist}{%
setlength{itemsep}{0pt}setlength{parskip}{0pt}}
titlespacing{subsubsection}{parindent}{3mm}{3mm}
titlespacing{subsection}{parindent}{3mm}{3mm}
usepackage{color}
lstset{
basicstyle=footnotesizettfamily,
inputencoding=utf8,
extendedchars=true,
showspaces=false,
keepspaces=true
showstringspaces=false,
showtabs=false,
tabsize=4,
captionpos=b,
breaklines=true,
breakatwhitespace=true,
breakautoindent=true,
linewidth=textwidth
}
begin{document}
$if(title)$
maketitle
$endif$
$if(abstract)$
begin{abstract}
$abstract$
end{abstract}
$endif$
$for(include-before)$
$include-before$
$endfor$
$if(toc)$
{
$if(colorlinks)$
hypersetup{linkcolor=$if(toccolor)$$toccolor$$else$black$endif$}
$endif$
setcounter{tocdepth}{$toc-depth$}
tableofcontents
}
$endif$
$if(lot)$
listoftables
$endif$
$if(lof)$
listoffigures
$endif$
$body$
$if(natbib)$
$if(bibliography)$
$if(biblio-title)$
$if(book-class)$
renewcommandbibname{$biblio-title$}
$else$
renewcommandrefname{$biblio-title$}
$endif$
$endif$
bibliography{$for(bibliography)$$bibliography$$sep$,$endfor$}
$endif$
$endif$
$if(biblatex)$
printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$
$endif$
$for(include-after)$
$include-after$
$endfor$
end{document}Enregistrement du fichier /usr/share/texlive/template.tex et écrivez un script qui va convertir le fichier Markdown en PDF, créant dans le même dossier un fichier nommé avec le même nom que le fichier Markdown mais avec l'extension .pdf, c'est-à-dire après la conversion filename.md le dossier apparaîtra filename.md.pdf. Nous nommerons le script md2pdf et le placerons au chemin /usr/bin. Exécutons les commandes séquentiellement :
user@hostname:~$ cd
user@hostname:~$ touch md2pdf
user@hostname:~$ echo "#!\/bin\/bash" > md2pdf
user@hostname:~$ echo "pandoc --output=$1.pdf --from=markdown_github --latex-engine=pdflatex --listings --template=\/usr\/share\/texlive\/template.tex $1" >> md2pdf
user@hostname:~$ sudo cp md2pdf \/usr\/bin\/
user@hostname:~$ sudo chmod 111 \/usr\/bin\/md2pdfLa 4ème ligne contient en fait la commande de conversion. Notez bien —from=markdown_github. La version Markdown de GitHub est rétrocompatible avec l'original, donc si votre texte est écrit avec, vous n'avez pas à vous inquiéter. Si votre fichier MD est écrit dans un dialecte spécifique de Markdown, consultez le manuel de Pandoc (man pandoc), assurez-vous que votre implémentation les prend en charge, et ajustez /usr/bin/md2pdf si nécessaire.
Script pour une installation plus ou moins automatique
Si vous ne souhaitez pas trop configurer quoi que ce soit et que vous utilisez une distribution de type Ubuntu, vous pouvez essayer de créer un script avec le contenu caché sous spoiler, et il est très probable que tout s'installe automatiquement. Il vous suffit de copier le modèle TeX que vous trouverez dans le spoiler ci-dessus. Ouvrez le Terminal et exécutez :
user@hostname:~$ cd
user@hostname:~$ touch installmd2pdf.shEnsuite, remplissez-le avec ce contenu :
Contenu du script $HOME/installmd2pdf.sh
#!/bin/bash
cd /tmp
sudo apt install texlive-full pandoc -y
wget http://blog.harrix.org/wp-content/uploads/2013/02/PSCyr.zip
unzip -qq PSCyr.zip
cd
mkdir ./PSCyr/fonts/map ./PSCyr/fonts/enc
cp ./PSCyr/dvips/pscyr/*.map ./PSCyr/fonts/map/
cp ./PSCyr/dvips/pscyr/*.enc ./PSCyr/fonts/enc/
echo "fadr6t AdvertisementPSCyr "T2AEncoding ReEncodeFont"" > ./PSCyr/fonts/map/pscyr.map
sudo cp -R ./PSCyr/* $(kpsewhich -expand-var='$TEXMFLOCAL')
sudo texhash
updmap --enable Map=pscyr.map
sudo mktexlsr
sudo touch /usr/share/texlive/template.tex
touch md2pdf
echo "#!/bin/bash" > md2pdf
echo "pandoc --output=$1.pdf --from=markdown_github --latex-engine=pdflatex --listings --template=/usr/share/texlive/template.tex $1" >> md2pdf
sudo cp md2pdf /usr/bin/
sudo chmod 111 /usr/bin/md2pdfLancez-le avec la commande :
user@hostname:~$ sudo bash $HOME/installmd2pdf.shN'oubliez pas que /usr/share/texlive/template.tex il faut remplir avec le contenu indiqué dans la section «Modèle LaTeX pour convertir md2pdf»
Utilisation de md2pdf
Il suffit d'ouvrir le dossier contenant le fichier Markdown (some_file.md) dans le Terminal, et d'exécuter la commande :
user@hostname:~$ md2pdf some_file.mdEn conséquence, un fichier apparaîtra dans le dossier some_file.md.pdf.
Conclusion
Sur la base de la méthode décrite, on peut créer n'importe quel style de fichiers PDF, et il est également possible de convertir d'autres formats à la place de md, tous les formats supportés par Pandoc. J'ose espérer qu'un jour cette instruction sera utile à 3 personnes et demie.
Source : habr.com
