Solution markdown2pdf prête à l'emploi avec code source pour Linux

Avant-propos

Markdown est un excellent moyen d'écrire un article court, et parfois beaucoup de texte, avec une mise en forme simple en italique et en gras. Markdown est également bon pour écrire des articles avec le code source inclus. Mais parfois, vous voulez sans perdre, danser avec un tambourin pour le dépasser dans un fichier PDF régulier et bien formé, et pour qu'il n'y ait pas de problèmes lors de la conversion, ce que j'ai eu, par exemple - vous ne pouvez pas écrire en russe dans les commentaires du code source, les lignes trop longues ne sont pas transférées, mais coupées et autres problèmes mineurs. L'instruction vous permettra de configurer rapidement le convertisseur md2pdf sans vraiment comprendre comment ça marche. Le script pour une installation plus ou moins automatique est ci-dessous dans la section appropriée.

Mon exemple de modèle TeX pour la conversion utilise le package de polices PSCyr, qui inclut la prise en charge des polices Microsoft, à savoir Times New Roman. Il y avait de telles exigences pour un diplôme selon GOST. Si vous savez comment faire, vous pouvez modifier le modèle en fonction de vos besoins. Dans mes propres instructions, vous devrez d'abord vous amuser avec le paramètre PSCyr dans TexLive. La configuration est effectuée dans la distribution Linux Mint Mate, pour les autres distributions, vous devrez peut-être rechercher sur Google les dossiers de packages TexLive standard pour votre système.

Installer TexLive

Bien sûr, vous ne pouvez installer que les parties nécessaires de ce package. Mais personnellement, j'étais franchement trop paresseux pour chercher l'installation de travail minimale nécessaire. Pour vous assurer que tout fonctionne, installez l'intégralité du package TexLive. On l'appelle texlive-complet et pèse un peu plus de 2 gigaoctets, gardez ce fait à l'esprit. Nous exécutons la commande :

user@hostname:~$ sudo apt install texlive-full -y

Après une installation suffisamment longue, vous pouvez passer au point suivant.

Installation du convertisseur Pandoc

Pandoc est un package Linux qui vous permet de convertir certains formats de texte en d'autres. Il a beaucoup de fonctionnalités intéressantes que vous pouvez trouver vous-même sur Internet. Nous ne sommes intéressés que par la possibilité de convertir un fichier Markdown en PDF. Vérifiez si Pandoc est installé et si ce n'est pas le cas, installez-le. Par exemple comme ceci :

user@hostname:~$ dpkg -s pandoc

Si la sortie indique qu'il n'est pas installé, installez :

user@hostname:~$ sudo apt install pandoc -y

Installation du package PSCyr pour TexLive

Vous devez d'abord télécharger PSCyr. Pour l'instant, il est toujours disponible à ce lien, si au moment de lire l'article, il n'est pas disponible pour une raison quelconque, ne désespérez pas, il est facile de le trouver avec les instructions d'installation en tapant quelque chose comme "Installation de PsCyr texlive" dans Google. S'il est disponible, alors c'est plus facile pour vous, téléchargez et nous supposerons que vous avez décompressé l'archive dans votre dossier personnel et donc le chemin vers le dossier contenu dans l'archive ressemble à ~/PSCyr. Allez ensuite dans le Terminal et exécutez les commandes suivantes dans l'ordre :

user@hostname:~$ cd
user@hostname:~$ mkdir ./PSCyr/fonts/map ./PSCyr/fonts/enc
user@hostname:~$ cp ./PSCyr/dvips/pscyr/*.map ./PSCyr/fonts/map/
user@hostname:~$ cp ./PSCyr/dvips/pscyr/*.enc ./PSCyr/fonts/enc/
user@hostname:~$ echo "fadr6t AdvertisementPSCyr "T2AEncoding ReEncodeFont"" > ./PSCyr/fonts/map/pscyr.map

Ensuite, découvrez où se trouve le répertoire local textemf. Nous exécutons la commande :

user@hostname:~$ kpsewhich -expand-var='$TEXMFLOCAL'

Vous avez très probablement ce répertoire - /usr/local/share/texmf/, puis on fait :

user@hostname:~$ sudo cp -R ./PSCyr/* /usr/local/share/texmf/

Eh bien, ou vous ne pouvez pas vous embêter et exécuter une commande qui copiera dans un dossier textemf où qu'elle soit :

user@hostname:~$ sudo cp -R ./PSCyr/* $(kpsewhich -expand-var='$TEXMFLOCAL')

Polices PSCyr installées, connectez-vous à TexLive :

user@hostname:~$ sudo texhash
user@hostname:~$ updmap --enable Map=pscyr.map
user@hostname:~$ sudo mktexlsr

Modèle LaTeX pour la conversion md2pdf

Je ne décrirai pas exactement comment ce modèle est configuré, et le donnerai simplement sous le spoiler sans trop d'explications. Qu'il suffise de dire qu'il est bien configuré, du moins en ce qui concerne la façon dont il gère les textes avec beaucoup de code source. Si vous n'êtes pas satisfait de la taille des retraits, de l'espacement des lignes, du manque de numérotation des sections et des sous-sections, alors à mon avis, il est assez facile de googler la question sur Internet "comment le faire en Latex ..." et alors votre besoin. Si ce n'est pas du tout clair, écrivez dans les commentaires, je vais essayer de me plonger dans mes propres paramètres il y a 4 ans et de décrire quelle ligne du modèle est responsable de quoi. En attendant, je vais écrire comment je l'ai fait sur mon PC, et vous êtes libre de le répéter ou de le modifier vous-même.

Créer un fichier modèle.tex dans le catalogue /usr/share/texlive/:

user@hostname:~$ sudo touch /usr/share/texlive/template.tex

Donnez-lui les autorisations de lecture :

user@hostname:~$ sudo chmod 444 /usr/share/texlive/template.tex

ouvrez-le sous la racine et collez-y le contenu caché sous le spoiler ci-dessous :

user@hostname:~$ sudo nano /usr/share/texlive/template.tex

Contenu 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[english,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}

Enregistrer le fichier /usr/share/texlive/template.tex et écrivez un script qui convertira le fichier Makrdown en PDF, en créant dans le même dossier un fichier appelé le fichier Markdown avec le préfixe .pdf, c'est-à-dire après la conversion nomfichier.md apparaîtra dans le dossier. nomfichier.md.pdf. Appelons le script md2pdf et mettre en route / usr / bin. Exécutons les commandes dans l'ordre :

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/md2pdf

La 4ème ligne contient en fait la commande de conversion. faire attention à --from=markdown_github. La version GitHub de Markdown est rétrocompatible avec le Markdown original, donc si votre texte y est écrit, vous n'avez pas à vous inquiéter. Si votre fichier MD est écrit dans un dialecte Markdown spécifique, lisez le manuel Pandoc (man pandoc), assurez-vous que votre implémentation est prise en charge par celui-ci et ajustez /usr/bin/md2pdf si nécessaire.

Script pour une installation plus ou moins automatique

Si vous ne voulez vraiment rien configurer du tout et que vous avez une distribution de type Ubuntu, vous pouvez essayer de créer un script avec le contenu caché sous le spoiler, et très probablement tout s'installera, la seule chose est, copiez le modèle TeX affiché sous le spoiler ci-dessus à l'endroit où vous avez besoin d'eux-mêmes. Ouvrez le terminal et exécutez :

user@hostname:~$ cd
user@hostname:~$ touch installmd2pdf.sh

Remplissez-le ensuite avec le contenu suivant :

Le 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/md2pdf

Exécutez-le avec la commande :

user@hostname:~$ sudo bash $HOME/installmd2pdf.sh

N'oublie pas ça /usr/share/texlive/template.tex doit être rempli comme indiqué dans la section "Modèle LaTeX pour la conversion md2pdf" contenu.

Utilisation de md2pdf

Ouvrez simplement le dossier avec le fichier Markdown (un_fichier.md) dans le Terminal et exécutez la commande :

user@hostname:~$ md2pdf some_file.md

En conséquence, un fichier apparaîtra dans le dossier un_fichier.md.pdf.

Conclusion

Sur la base de la méthode décrite, vous pouvez créer n'importe quel style de fichiers PDF, vous pouvez également convertir d'autres formats au lieu de md, tous pris en charge par Pandoc. J'ose espérer qu'un jour cette instruction sera utile à 3 personnes et demi.

Source: habr.com

Ajouter un commentaire