Vorwort
Markdown ist eine großartige Möglichkeit, kurze Artikel oder auch umfangreichere Texte mit einfacher Formatierung in Kursiv- und Fettschrift zu schreiben. Es eignet sich auch gut zum Erstellen von Artikeln mit eingebettetem Quellcode. Doch manchmal möchte man diesen ohne Verlust und ohne großen Aufwand in eine gut formatierte PDF-Datei umwandeln. Dabei können Probleme wie z.B. dass man keine Kommentare in Russisch im Quellcode schreiben kann, oder dass zu lange Zeilen abgeschnitten werden und andere kleine Schwierigkeiten auftreten. Diese Anleitung hilft, den Konverter schnell einzurichten. md2pdf ohne tiefgehendes Verständnis, wie es funktioniert. Das Skript für eine mehr oder weniger automatisierte Installation finden Sie im entsprechenden Abschnitt.
Mein Beispiel für eine TeX-Vorlage zur Konvertierung verwendet das Schriftpaket PSCyr, das die Unterstützung von Microsoft-Schriften beinhaltet, insbesondere Times New Roman. Diese Anforderungen an das Diplom gemäß GOST waren vorgegeben. Wenn Sie möchten, können Sie die Vorlage an Ihre Bedürfnisse anpassen. In meiner Anleitung müssen jedoch zunächst einige Anpassungen an der PSCyr-Konfiguration in TexLive vorgenommen werden. Die Konfiguration erfolgt im Linux Mint Mate-Distribution, für andere Distributionen müssen möglicherweise die Standardordner des TexLive-Pakets für Ihr System recherchiert werden.
Installation von TexLive
Selbstverständlich kann man auch nur die benötigten Teile dieses Pakets installieren. Mir war es jedoch ehrlich gesagt zu mühsam, nach einer minimal erforderlichen Arbeitsinstallation zu suchen. Damit alles einwandfrei funktioniert, installieren wir das gesamte TexLive-Paket. Es heißt texlive-full und hat ein Volumen von etwas mehr als 2 Gigabyte, bitte berücksichtigen Sie dies. Führen Sie den Befehl aus:
user@hostname:~$ sudo apt install texlive-full -yNach einer ausreichend langen Installation können wir zum nächsten Punkt übergehen.
Installation des Konverters Pandoc
Pandoc — ein Linux-Paket, mit dem Sie verschiedene Textformate in andere umwandeln können. Es bietet viele interessante Möglichkeiten, die Sie selbstständig im Internet erkunden können. Uns interessiert hier jedoch nur die Möglichkeit, eine Markdown-Datei in PDF umzuwandeln. Lassen Sie uns überprüfen, ob Pandoc installiert ist, und falls nicht, installieren wir es. Zum Beispiel so:
user@hostname:~$ dpkg -s pandocWenn in der Ausgabe steht, dass es nicht installiert ist, führen wir die Installation wie folgt durch:
user@hostname:~$ sudo apt install pandoc -yInstallation des PSCyr-Pakets für TexLive
Zunächst müssen wir PSCyr herunterladen. Es ist derzeit unter diesem verfügbar. Sollte es zum Zeitpunkt des Lesens aus irgendwelchen Gründen nicht verfügbar sein, verzweifeln Sie nicht, es ist leicht zu finden mit einer Installationsanleitung, indem Sie bei Google etwas wie „Installation von PsCyr texlive“ eingeben. Sollte es verfügbar sein, ist es einfacher für Sie, laden Sie es herunter und wir gehen davon aus, dass Sie das Archiv in Ihrem Heimatverzeichnis entpackt haben, sodass der Pfad zum Ordner, der im Archiv enthalten ist, wie folgt aussieht: ~/PSCyr. Dann öffnen wir das Terminal und führen der Reihe nach 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.mapAls nächstes finden wir heraus, wo sich das lokale Verzeichnis befindet texmf. Führen Sie den Befehl aus:
user@hostname:~$ kpsewhich -expand-var='$TEXMFLOCAL'Wahrscheinlich haben Sie dieses Verzeichnis hier — /usr/local/share/texmf/, und dann führen wir aus:
user@hostname:~$ sudo cp -R ./PSCyr/* /usr/local/share/texmf/Oder Sie können es einfach machen und den folgenden Befehl ausführen, um es in den Ordner zu kopieren texmf egal wo es ist:
user@hostname:~$ sudo cp -R ./PSCyr/* $(kpsewhich -expand-var='$TEXMFLOCAL')Die PSCyr-Schriftarten sind installiert, jetzt in TexLive aktivieren:
user@hostname:~$ sudo texhash
user@hostname:~$ updmap --enable Map=pscyr.map
user@hostname:~$ sudo mktexlsrLaTeX-Vorlage für die Umwandlung von md2pdf
Ich werde nicht beschreiben, wie genau diese Vorlage konfiguriert ist, sondern gebe sie einfach im Spoiler ohne besondere Erklärungen an. Es genügt zu sagen, dass sie ganz gut eingerichtet ist, zumindest was die Verarbeitung von Texten mit umfangreicher Quellcode betrifft. Wenn Sie mit den Abständen, Zeilenabständen und der fehlenden Nummerierung von Abschnitten und Unterabschnitten unzufrieden sind, handelt es sich meiner Meinung nach um Fragen, die sich leicht im Internet mit "wie macht man... in LaTeX" googeln lassen. Bei Unklarheiten können Sie gerne Kommentare hinterlassen, ich werde versuchen, mich in meine eigenen Einstellungen von vor 4 Jahren einzuarbeiten und zu erläutern, welche Zeile der Vorlage für was verantwortlich ist. Ich werde zunächst erläutern, wie ich es auf meinem PC gemacht habe, und Sie können es dann nach Belieben wiederholen oder modifizieren.
Eine Datei erstellen template.tex im Verzeichnis /usr/share/texlive/:
user@hostname:~$ sudo touch /usr/share/texlive/template.texWir setzen die Leserechte:
user@hostname:~$ sudo chmod 444 /usr/share/texlive/template.texÖffnen Sie die Datei als Root und fügen Sie den im Spoiler unten versteckten Inhalt ein:
user@hostname:~$ sudo nano /usr/share/texlive/template.texInhalt der Vorlage /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}Datei speichern /usr/share/texlive/template.tex und ein Skript schreiben, das die Markdown-Datei in PDF konvertiert und im selben Ordner eine Datei mit dem Namen der Markdown-Datei und der Endung .pdf erstellt, d.h. nach der Konvertierung dateiname.md erscheint im Ordner filename.md.pdf. Wir nennen das Skript md2pdf und legen es ab unter /usr/bin. Führen wir nacheinander die Befehle aus:
benutzer@hostname:~$ cd
benutzer@hostname:~$ touch md2pdf
benutzer@hostname:~$ echo "#!/bin/bash" > md2pdf
benutzer@hostname:~$ echo "pandoc --output=$1.pdf --from=markdown_github --latex-engine=pdflatex --listings --template=/usr/share/texlive/template.tex $1" >> md2pdf
benutzer@hostname:~$ sudo cp md2pdf /usr/bin/
benutzer@hostname:~$ sudo chmod 111 /usr/bin/md2pdfIn der vierten Zeile wird schließlich der Konvertierungsbefehl angegeben. Achten Sie auf —from=markdown_github. Die GitHub-Version von Markdown ist rückwärtskompatibel mit dem ursprünglichen Markdown, sodass Sie sich keine Sorgen machen müssen, wenn Ihr Text darin verfasst ist. Ist Ihre MD-Datei jedoch in einem spezifischen Dialekt von Markdown geschrieben, lesen Sie das Handbuch zu Pandoc (man pandoc), stellen Sie sicher, dass Ihre Implementierung unterstützt wird, und passen Sie /usr/bin/md2pdf es gegebenenfalls an.
Skript für eine mehr oder weniger automatische Installation
Wenn Sie keine Lust haben, irgendetwas zu konfigurieren und ein Ubuntu-ähnliches Betriebssystem verwenden, können Sie versuchen, ein Skript mit dem Inhalt zu erstellen, der im Spoiler verborgen ist. Wahrscheinlich wird alles automatisch installiert, außer dass Sie das TeX-Template, das oben im Spoiler bereitgestellt wurde, selbst an den richtigen Ort kopieren müssen. Öffnen Sie das Terminal und führen Sie Folgendes aus:
user@hostname:~$ cd
user@hostname:~$ touch installmd2pdf.shFüllen Sie es dann mit folgendem Inhalt aus:
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/md2pdfFühren Sie es mit dem folgenden Befehl aus:
user@hostname:~$ sudo bash $HOME/installmd2pdf.shVergessen Sie nicht, dass /usr/share/texlive/template.tex der angegebene Inhalt im Abschnitt „LaTeX-Vorlage für die Umwandlung von md2pdf“ eingefügt werden muss.
Verwendung 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.mdInfolgedessen erscheint eine Datei im Ordner. some_file.md.pdf.
Fazit
Auf Basis der beschriebenen Methode können beliebige PDF-Stile erstellt werden. Außerdem können anstelle von md auch andere Formate konvertiert werden, die von Pandoc unterstützt werden. Ich hoffe, dass diese Anleitung eines Tages für 3,5 Personen nützlich sein wird.
Quelle: habr.com
