Hotové riešenie markdown2pdf so zdrojovým kódom pre Linux

Predslov

Markdown je skvelý spôsob, ako napísať krátky článok a niekedy aj dosť veľa textu s jednoduchou kurzívou a tučným formátovaním. Markdown je tiež dobrý na písanie článkov so zdrojovým kódom. Ale niekedy chcete bez straty, tancovať s tamburínou, aby ste ju predbehli do bežného, ​​dobre tvarovaného súboru PDF, a aby pri konverzii nenastali problémy, ktoré som mal napríklad ja - v ruštine sa nedá písať komentáre zdrojového kódu, príliš dlhé riadky sa neprenášajú, ale strihajú a iné menšie problémy. Inštrukcia vám umožní rýchlo nastaviť prevodník md2pdf bez toho, aby skutočne pochopil, ako to funguje. Skript pre viac-menej automatickú inštaláciu je uvedený nižšie v príslušnej sekcii.

Moja vzorová šablóna TeX na konverziu používa balík fontov PSCyr, ktorý obsahuje podporu pre fonty Microsoft Times New Roman. Takéto požiadavky na diplom boli podľa GOST. Ak viete ako, môžete šablónu upraviť tak, aby vyhovovala vašim potrebám. V mojom vlastnom návode sa budete musieť najskôr poblázniť s nastavením PSCyr v TexLive. Nastavenie sa vykonáva v distribúcii Linux Mint Mate, pre iné distribúcie si možno budete musieť vygoogliť štandardné priečinky balíkov TexLive pre váš systém.

Inštalácia TexLive

Samozrejme si môžete nainštalovať len potrebné časti tohto balíka. Ale osobne som bol úprimne príliš lenivý hľadať minimálnu potrebnú pracovnú inštaláciu. Aby ste sa uistili, že všetko funguje, nainštalujte celý balík TexLive. To sa nazýva texlive-full a váži o niečo viac ako 2 gigabajty, pamätajte na túto skutočnosť. Vykonáme príkaz:

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

Po dostatočne dlhej inštalácii môžete prejsť na ďalšiu položku.

Inštalácia konvertora Pandoc

Pandoc je balík pre Linux, ktorý vám umožňuje konvertovať niektoré textové formáty na iné. Má veľa zaujímavých funkcií, ktoré si môžete nájsť na internete. Zaujíma nás len možnosť prevodu súboru markdown do PDF. Skontrolujte, či je nainštalovaný Pandoc a ak nie, nainštalujte ho. Napríklad takto:

user@hostname:~$ dpkg -s pandoc

Ak výstup hovorí, že nie je nainštalovaný, nainštalujte:

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

Inštalácia balíka PSCyr pre TexLive

Najprv si musíte stiahnuť PSCyr. Zatiaľ je stále k dispozícii na tomto mieste odkaz, ak v čase čítania článku nie je z nejakého dôvodu dostupný, nezúfajte, je ľahké ho nájsť spolu s návodom na inštaláciu zadaním niečoho ako „Inštalácia PsCyr texlive“ do Google. Ak je k dispozícii, je to pre vás jednoduchšie, stiahnite si a budeme predpokladať, že ste archív rozbalili do svojho domovského priečinka a teda cesta k priečinku v archíve vyzerá takto ~/PSCyr. Potom prejdite do terminálu a vykonajte nasledujúce príkazy v poradí:

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

Ďalej zistite, kde sa nachádza lokálny adresár texmf. Vykonáme príkaz:

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

S najväčšou pravdepodobnosťou máte tento adresár - /usr/local/share/texmf/a potom urobíme:

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

No, alebo sa nemôžete obťažovať a spustiť príkaz, ktorý sa skopíruje do priečinka texmf kdekoľvek je:

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

Písma PSCyr nainštalované, pripojte sa k TexLive:

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

Šablóna LaTeX na konverziu md2pdf

Nebudem popisovať, ako presne je táto šablóna nakonfigurovaná, a jednoducho ju dám pod spojler bez veľkého vysvetlenia. Stačí povedať, že je dobre nakonfigurovaný, aspoň čo sa týka toho, ako narába s textami s množstvom zdrojového kódu. Ak nie ste spokojní s veľkosťou zarážok, riadkovaním, nečíslovaním sekcií a podsekcií, potom je podľa mňa celkom jednoduché vygoogliť si na internete otázku „ako na to v latexe...“ a potom vaša potreba. Ak to nie je úplne jasné, napíšte do komentárov, skúsim sa ponoriť do vlastných nastavení spred 4 rokov a popísať, ktorý riadok šablóny je zodpovedný za čo. Zatiaľ si napíšem, ako som to urobil na svojom PC, a môžete si to zopakovať alebo upraviť.

Vytvorte súbor template.tex v katalógu /usr/share/texlive/:

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

Dajte mu povolenia na čítanie:

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

otvorte ho pod koreňom a vložte doň obsah skrytý pod spojlerom nižšie:

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

Obsah šablóny /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}

Ukladá sa súbor /usr/share/texlive/template.tex a napíšte skript, ktorý prevedie súbor Makrdown do formátu PDF, pričom v rovnakom priečinku vytvorí súbor s názvom súbor Markdown s predponou .pdf, teda po konverzii názov súboru.md sa zobrazí v priečinku. názov súboru.md.pdf. Zavolajme scenár md2pdf a dať na cestu / Usr / bin. Vykonajme príkazy v poradí:

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

4. riadok v skutočnosti obsahuje príkaz na konverziu. dávaj pozor na --from=markdown_github. GitHub verzia Markdown je spätne kompatibilná s originálnou Markdown, takže ak je v nej napísaný váš text, nemusíte sa báť. Ak je váš súbor MD napísaný v špecifickom dialekte Markdown, prečítajte si príručku Pandoc (man pandoc), uistite sa, že vaša implementácia je podporovaná, a dolaďte /usr/bin/md2pdf Ak je to nevyhnutné.

Skript pre viac-menej automatickú inštaláciu

Ak v skutočnosti nechcete konfigurovať vôbec nič a máte distribúciu podobnú Ubuntu, môžete skúsiť vytvoriť skript s obsahom skrytým pod spojlerom a s najväčšou pravdepodobnosťou sa všetko nainštaluje samo, jediné je skopírovať šablónu TeX uverejnenú pod spojlerom vyššie, ak je to potrebné. Otvorte terminál a spustite:

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

Potom ho naplňte nasledujúcim obsahom:

Obsah skriptu $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

Spustite ho príkazom:

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

Nezabudni na to /usr/share/texlive/template.tex je potrebné vyplniť tak, ako je uvedené v časti "Šablóna LaTeX na konverziu md2pdf» obsah.

Pomocou md2pdf

Stačí otvoriť priečinok so súborom Markdown (nejaký_súbor.md) v termináli a spustite príkaz:

user@hostname:~$ md2pdf some_file.md

V dôsledku toho sa v priečinku zobrazí súbor nejaký_súbor.md.pdf.

Záver

Na základe opísanej metódy môžete zostaviť akýkoľvek štýl súborov PDF, môžete tiež previesť iné formáty namiesto md, akékoľvek podporované Pandocom. Trúfam si dúfať, že raz bude tento návod užitočný pre 3 a pol človeka.

Zdroj: hab.com

Pridať komentár