Fertige markdown2pdf-Lösung mit Quellcode für Linux

Vorwort

Markdown ist eine großartige Möglichkeit, einen kurzen Artikel und manchmal auch ziemlich viel Text mit einfacher Kursiv- und Fettformatierung zu schreiben. Markdown eignet sich auch gut zum Schreiben von Artikeln mit enthaltenem Quellcode. Aber manchmal möchte man verlustfrei mit dem Tamburin tanzen, um es in eine normale, wohlgeformte PDF-Datei umzuwandeln, und damit es bei der Konvertierung keine Probleme gibt, die ich zum Beispiel hatte – man kann nicht auf Russisch schreiben die Kommentare des Quellcodes, zu lange Zeilen werden nicht übertragen, sondern abgeschnitten und andere kleinere Probleme. Mit der Anleitung können Sie den Konverter schnell einrichten md2pdf ohne wirklich zu verstehen, wie es funktioniert. Das Skript für eine mehr oder weniger automatische Installation finden Sie weiter unten im entsprechenden Abschnitt.

Meine Beispiel-TeX-Vorlage für die Konvertierung verwendet das PSCyr-Schriftartenpaket, das Unterstützung für Microsoft-Schriftarten enthält, nämlich Times New Roman. Für ein Diplom gab es laut GOST solche Voraussetzungen. Wenn Sie wissen, wie, können Sie die Vorlage an Ihre Bedürfnisse anpassen. In meiner eigenen Anleitung müssen Sie zunächst mit der PSCyr-Einstellung in TexLive herumspielen. Die Einrichtung erfolgt in der Linux Mint Mate-Distribution, für andere Distributionen müssen Sie ggf. die Standard-TexLive-Paketordner für Ihr System googeln.

TexLive installieren

Natürlich können Sie nur die notwendigen Teile dieses Pakets installieren. Aber ich persönlich war ehrlich gesagt zu faul, nach der minimal notwendigen funktionierenden Installation zu suchen. Um sicherzustellen, dass alles funktioniert, installieren Sie das gesamte TexLive-Paket. Es wird genannt texlive-full und etwas mehr als 2 Gigabyte wiegt, bedenken Sie diese Tatsache. Wir führen den Befehl aus:

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

Nach einer ausreichend langen Installation können Sie mit dem nächsten Punkt fortfahren.

Installieren des Pandoc-Konverters

Pandoc ist ein Linux-Paket, mit dem Sie einige Textformate in andere konvertieren können. Es verfügt über viele interessante Funktionen, die Sie im Internet finden können. Uns interessiert lediglich die Möglichkeit, eine Markdown-Datei in PDF zu konvertieren. Überprüfen Sie, ob Pandoc installiert ist. Falls nicht, installieren Sie es. Zum Beispiel so:

user@hostname:~$ dpkg -s pandoc

Wenn die Ausgabe besagt, dass es nicht installiert ist, installieren Sie:

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

Installation des PSCyr-Pakets für TexLive

Zuerst müssen Sie PSCyr herunterladen. Im Moment ist es hier noch verfügbar Link, wenn es zum Zeitpunkt des Lesens des Artikels aus irgendeinem Grund nicht verfügbar ist, verzweifeln Sie nicht, es ist leicht, es zusammen mit den Installationsanweisungen zu finden, indem Sie in Google etwas wie „Installing PsCyr texlive“ eingeben. Wenn es verfügbar ist, dann ist es für Sie einfacher, es herunterzuladen und wir gehen davon aus, dass Sie das Archiv in Ihren Home-Ordner entpackt haben und somit der Pfad zu dem im Archiv enthaltenen Ordner aussieht ~/PSCyr. Gehen Sie dann zum Terminal und führen Sie nacheinander die folgenden Befehle aus:

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

Finden Sie als Nächstes heraus, wo sich das lokale Verzeichnis befindet texmf. Wir führen den Befehl aus:

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

Höchstwahrscheinlich haben Sie dieses Verzeichnis - /usr/local/share/texmf/, und dann machen wir:

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

Nun, oder Sie können sich nicht die Mühe machen und einen Befehl ausführen, der in einen Ordner kopiert texmf wo immer sie ist:

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

PSCyr-Schriftarten installiert, mit TexLive verbinden:

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

LaTeX-Vorlage für die MD2PDF-Konvertierung

Ich werde nicht genau beschreiben, wie diese Vorlage konfiguriert ist, und sie einfach ohne große Erklärung unter den Spoiler stellen. Es genügt zu sagen, dass es gut konfiguriert ist, zumindest was den Umgang mit Texten mit viel Quellcode angeht. Wenn Sie mit der Größe der Einzüge, dem Zeilenabstand, der fehlenden Nummerierung von Abschnitten und Unterabschnitten nicht zufrieden sind, dann ist es meiner Meinung nach ganz einfach, im Internet nach der Frage „Wie macht man das in Latex ...“ zu googeln dann dein Bedarf. Wenn es überhaupt nicht klar ist, schreiben Sie in die Kommentare, ich werde versuchen, in meine eigenen Einstellungen vor 4 Jahren einzutauchen und zu beschreiben, welche Zeile der Vorlage wofür verantwortlich ist. In der Zwischenzeit werde ich aufschreiben, wie ich es auf meinem PC gemacht habe, und es steht Ihnen frei, es selbst zu wiederholen oder zu ändern.

Erstellen Sie eine Datei template.tex im Katalog /usr/share/texlive/:

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

Erteilen Sie ihm Leseberechtigungen:

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

Öffnen Sie es unter der Wurzel und fügen Sie den unter dem Spoiler unten versteckten Inhalt hinein:

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

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

Speichern der Datei /usr/share/texlive/template.tex und schreiben Sie ein Skript, das die Makrdown-Datei in PDF konvertiert und im selben Ordner eine Datei namens Markdown-Datei mit dem Präfix .pdf erstellt, also nach der Konvertierung Dateiname.md wird im Ordner angezeigt. Dateiname.md.pdf. Nennen wir das Skript md2pdf und auf den Weg machen / usr / bin. Lassen Sie uns die Befehle der Reihe nach ausführen:

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

Die 4. Zeile enthält tatsächlich den Konvertierungsbefehl. beachten --from=markdown_github. Die GitHub-Version von Markdown ist abwärtskompatibel mit dem ursprünglichen Markdown. Wenn Ihr Text also darin geschrieben ist, müssen Sie sich keine Sorgen machen. Wenn Ihre MD-Datei in einem bestimmten Markdown-Dialekt geschrieben ist, lesen Sie das Pandoc-Handbuch (man pandoc), stellen Sie sicher, dass Ihre Implementierung davon unterstützt wird, und optimieren Sie /usr/bin/md2pdf Bei Bedarf.

Skript zur mehr oder weniger automatischen Installation

Wenn Sie eigentlich gar nichts konfigurieren möchten und eine Ubuntu-ähnliche Distribution haben, können Sie versuchen, ein Skript zu erstellen, dessen Inhalt unter dem Spoiler verborgen ist, und höchstwahrscheinlich wird sich alles von selbst installieren, das Einzige, was Sie tun müssen, ist, zu kopieren Die unter dem Spoiler oben gepostete TeX-Vorlage kann bei Bedarf selbst verwendet werden. Öffnen Sie das Terminal und führen Sie Folgendes aus:

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

Füllen Sie es dann mit folgendem Inhalt:

Der Inhalt des Skripts $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

Führen Sie es mit dem Befehl aus:

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

Vergiss das nicht /usr/share/texlive/template.tex muss wie im Abschnitt „LaTeX-Vorlage für die MD2PDF-Konvertierung" Inhalt.

Verwenden von md2pdf

Öffnen Sie einfach den Ordner mit der Markdown-Datei (some_file.md) im Terminal und führen Sie den Befehl aus:

user@hostname:~$ md2pdf some_file.md

Als Ergebnis wird eine Datei im Ordner angezeigt some_file.md.pdf.

Abschluss

Basierend auf der beschriebenen Methode können Sie jeden Stil von PDF-Dateien erstellen und anstelle von MD auch andere Formate konvertieren, die von Pandoc unterstützt werden. Ich wage zu hoffen, dass diese Anleitung eines Tages dreieinhalb Menschen nützlich sein wird.

Source: habr.com

Kommentar hinzufügen