Hotové řešení markdown2pdf se zdrojovým kódem pro Linux

předmluva

Markdown je skvělý způsob, jak napsat krátký článek a někdy i hodně textu, s jednoduchou kurzívou a tučným formátováním. Markdown je také dobrý pro psaní článků se zdrojovým kódem. Ale někdy chcete bezztrátově tančit s tamburínou, abyste ji předběhli do běžného, ​​dobře tvarovaného PDF souboru, a aby při převodu nebyly problémy, které jsem měl například já - v ruštině se nedá psát komentáře zdrojového kódu, příliš dlouhé řádky se nepřenášejí, ale stříhají se a další drobné problémy. Instrukce vám umožní rychle nastavit převodník md2pdf aniž by skutečně pochopil, jak to funguje. Skript pro víceméně automatickou instalaci je níže v příslušné sekci.

Moje vzorová šablona TeX pro převod používá balíček písem PSCyr, který obsahuje podporu pro písma Microsoft, jmenovitě Times New Roman. Takové požadavky na diplom byly podle GOST. Pokud víte jak, můžete šablonu upravit tak, aby vyhovovala vašim potřebám. V mém vlastním návodu si budete muset nejprve pohrát s nastavením PSCyr v TexLive. Nastavení se provádí v distribuci Linux Mint Mate, pro ostatní distribuce si možná budete muset vygooglovat standardní složky balíčků TexLive pro váš systém.

Instalace TexLive

Samozřejmě si můžete nainstalovat pouze nezbytné části tohoto balíčku. Ale osobně jsem byl upřímně příliš líný hledat minimální nutnou funkční instalaci. Abyste se ujistili, že vše funguje, nainstalujte celý balíček TexLive. To se nazývá texlive-plný a váží o něco více než 2 gigabajty, mějte na paměti tuto skutečnost. Provedeme příkaz:

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

Po dostatečně dlouhé instalaci můžete přejít k další položce.

Instalace Pandoc Converter

Pandoc je linuxový balíček, který vám umožňuje převádět některé textové formáty na jiné. Má spoustu zajímavých funkcí, které můžete najít sami na internetu. Zajímá nás pouze možnost převodu markdown souboru do PDF. Zkontrolujte, zda je nainstalován Pandoc, a pokud ne, nainstalujte jej. Například takto:

user@hostname:~$ dpkg -s pandoc

Pokud výstup říká, že není nainstalován, nainstalujte:

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

Instalace balíčku PSCyr pro TexLive

Nejprve si musíte stáhnout PSCyr. Zatím je stále k dispozici na tomto odkaz, pokud v době čtení článku není z nějakého důvodu k dispozici, nezoufejte, je snadné jej najít spolu s návodem k instalaci zadáním něčeho jako „Instalace PsCyr texlive“ do Googlu. Pokud je k dispozici, je to pro vás jednodušší, stáhněte si a budeme předpokládat, že jste archiv rozbalili do své domovské složky a cesta ke složce obsažené v archivu tedy vypadá takto ~/PSCyr. Poté přejděte do Terminálu a proveďte následující příkazy v pořadí:

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

Dále zjistěte, kde se nachází místní adresář texmf. Provedeme příkaz:

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

S největší pravděpodobností máte tento adresář - /usr/local/share/texmf/a pak uděláme:

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

No, nebo se nemůžete obtěžovat a spustit příkaz, který se zkopíruje do složky texmf kdekoli je:

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

Písma PSCyr nainstalována, připojte se k TexLive:

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

LaTeXová šablona pro převod md2pdf

Nebudu popisovat, jak přesně je tato šablona nakonfigurována, a jednoduše ji dám pod spoiler bez velkého vysvětlení. Stačí říct, že je dobře nakonfigurovaný, alespoň co se týče toho, jak si poradí s texty se spoustou zdrojového kódu. Pokud nejste spokojeni s velikostí odsazení, řádkováním, chybějícím očíslováním sekcí a podsekcí, pak je podle mého názoru celkem snadné si na internetu vygooglit otázku „jak na to v Latexu...“ a pak vaše potřeba. Pokud to není vůbec jasné, napište do komentářů, pokusím se zabrousit do vlastního nastavení před 4 lety a popsat, který řádek šablony je za co zodpovědný. Mezitím si napíšu, jak jsem to udělal na svém PC, a vy si to můžete zopakovat nebo upravit.

Vytvořte soubor šablona.tex v katalogu /usr/share/texlive/:

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

Dejte mu oprávnění ke čtení:

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

otevřete jej pod kořenem a vložte do něj obsah skrytý pod spoilerem níže:

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

Obsah šablony /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}

Uložení souboru /usr/share/texlive/template.tex a napište skript, který převede soubor Makrdown do PDF, přičemž ve stejné složce vytvoří soubor nazvaný soubor Markdown s předponou .pdf, tedy po převodu název_souboru.md se objeví ve složce. název_souboru.md.pdf. Zavolejme scénář md2pdf a dát na cestu / usr / bin. Proveďme příkazy v pořadí:

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. řádek ve skutečnosti obsahuje příkaz převodu. Dávejte pozor na --from=markdown_github. GitHub verze Markdown je zpětně kompatibilní s původní Markdown, takže pokud je v ní napsán váš text, nemusíte se bát. Pokud je váš soubor MD napsán v určitém dialektu Markdown, přečtěte si příručku Pandoc (man pandoc), ujistěte se, že vaše implementace je podporována, a dolaďte /usr/bin/md2pdf v případě potřeby.

Skript pro víceméně automatickou instalaci

Pokud ve skutečnosti nechcete konfigurovat vůbec nic a máte distribuci podobnou Ubuntu, můžete zkusit vytvořit skript s obsahem skrytým pod spoilerem a s největší pravděpodobností se vše nainstaluje samo, jediné je, zkopírovat šablonu TeXu umístěnou pod spoilerem výše tam, kde je potřebujete. Otevřete Terminál a spusťte:

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

Poté jej naplňte následujícím obsahem:

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

Spusťte jej příkazem:

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

Nezapomeň na to /usr/share/texlive/template.tex musí být vyplněno tak, jak je uvedeno v části "LaTeXová šablona pro převod md2pdf" obsah.

Pomocí md2pdf

Stačí otevřít složku se souborem Markdown (nějaký_soubor.md) v Terminálu a spusťte příkaz:

user@hostname:~$ md2pdf some_file.md

V důsledku toho se ve složce objeví soubor nějaký_soubor.md.pdf.

Závěr

Na základě popsané metody můžete sestavit jakýkoli styl souborů PDF, můžete také převést jiné formáty místo md, jakýkoli podporovaný Pandocem. Troufám si doufat, že jednou se tento návod bude hodit 3 a půl lidem.

Zdroj: www.habr.com

Přidat komentář