FÀrdigt markdown2pdf-lösning med kÀllkod för Linux

Förord

Markdown Àr ett utmÀrkt sÀtt att skriva en kort artikel, och ibland ett ganska omfattande text, med enkel formatering som kursiv och fet stil. Markdown Àr ocksÄ bra för att skriva artiklar med inkluderad kÀllkod. Men ibland vill man utan förluster och krÄngel konvertera det till en vanlig, vÀlformaterad PDF-fil, utan problem vid konverteringen, som t.ex. jag hade - man kan inte skriva pÄ ryska i kÀllkodens kommentarer, för lÄnga rader bryts av och andra smÄproblem. Instruktionen gör att man snabbt kan konfigurera konverteraren. md2pdf utan att riktigt förstÄ hur det fungerar. Skriptet för en mer eller mindre automatisk installation finns nedan i den relevanta sektionen.

Mitt exempel pÄ TeX-mall för konvertering anvÀnder typpaketet PSCyr, som inkluderar stöd för Microsoft-tecken, nÀmligen Times New Roman. Det var kraven för examensbeviset enligt GOST. Om du kan, kan du modifiera mallen efter dina behov. I min instruktion mÄste man först pyssla med att stÀlla in PSCyr i TexLive. Installation görs i Linux Mint Mate; för andra distributioner kan det vara bra att goggla pÄ standardmapparna för TexLive-paketet för ditt system.

Installation av TexLive

SjÀlvklart kan man installera bara de nödvÀndiga delarna av detta paket. Men personligen var jag helt enkelt för lat för att leta efter minimum nödvÀndig fungerande installation. För att allt ska fungera korrekt, installerar vi hela TexLive-paketet. Det heter texlive-full och vÀger lite mer Àn 2 gigabyte, ha detta i Ätanke. Utför kommandot:

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

Efter en ganska lÄng installation kan man gÄ vidare till nÀsta punkt.

Installation av konverteraren Pandoc

Pandoc - ett Linux-paket som gör det möjligt att konvertera vissa textformat till andra. Det har mÄnga intressanta möjligheter, som du kan bekanta dig med pÄ egen hand pÄ Internet. Vi Àr dock intresserade av möjligheten att konvertera markdown-filer till PDF. LÄt oss kontrollera om Pandoc Àr installerat, och om inte, installera det. Till exempel sÄ hÀr:

user@hostname:~$ dpkg -s pandoc

Om det stÄr i utskriften att det inte Àr installerat - installerar vi det:

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

Installation av PSCyr-paketet för TexLive

För att börja mÄste du ladda ner PSCyr. Det Àr fortfarande tillgÀngligt hÀr. lÀnken, om artikeln av nÄgon anledning inte Àr tillgÀnglig vid lÀsningstillfÀllet, ge inte upp, den Àr lÀtt att hitta tillsammans med installationsinstruktionen genom att söka pÄ Google med nÄgot som "Installation av PsCyr texlive". Om den Àr tillgÀnglig Àr det enklare för dig, ladda ner den och vi utgÄr ifrÄn att du har packat upp arkivet i din hemkatalog, vilket gör att sökvÀgen till mappen som finns i arkivet ser ut som ~\/PSCyr. DÄ öppnar vi Terminalen och utför kommandona i följd:

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

DÀrefter tar vi reda pÄ var den lokala katalogen finns texmf. Vi kör kommandot:

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

Sannolikt Ă€r den katalogen för dig — /usr/local/share/texmf/, och dĂ„ utför vi:

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

Eller sÄ kan man hoppa över det och köra kommandot som kopierar till mappen texmf oavsett var den Àr:

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

Typsnitten PSCyr Àr installerade, koppla dem i TexLive:

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

LaTeX-mall för konvertering av md2pdf

Jag kommer inte att beskriva hur denna mall Àr instÀlld, utan jag ger bara dess innehÄll i en spoiler utan större förklaringar. Det Àr tillrÀckligt att sÀga att den Àr ganska bra instÀlld, Ätminstone hur den hanterar texter med mÀngder av kÀllkod. Om du inte Àr nöjd med marginalerna, radavstÄnden, avsaknaden av numrering av kapitel och underrubriker, tycker jag att det Àr ganska lÀtt att googla frÄgan "hur gör man i LaTeX..." och sedan din nödvÀndighet. Om du fortfarande har frÄgor, skriv i kommentarerna, sÄ ska jag försöka gÄ igenom mina instÀllningar frÄn för fyra Är sedan och förklara vilken rad i mallen som ansvarar för vad. Tills vidare ska jag skriva hur jag gjorde pÄ min PC, och du Àr fri att upprepa eller modifiera det efter dina behov.

Skapa filen template.tex i katalogen /usr/share/texlive/:

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

Ge den rÀttigheter för lÀsning:

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

öppna som root och klistra in innehÄllet som döljer sig i spoilern nedan:

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

InnehÄllet i mallen \/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}

Sparar filen /usr/share/texlive/template.tex och skriva ett skript som kommer att konvertera Markdown-filen till PDF, vilket skapar en fil med namnet pÄ Markdown-filen med tillÀgget .pdf i samma mapp, det vill sÀga efter konverteringen filename.md en mapp kommer att dyka upp filename.md.pdf. Skriptet ska vi kalla md2pdf och placera pÄ denna vÀg /usr/bin. Vi utför kommandona i följd:

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

I den fjĂ€rde raden anges faktiskt kommandot för konvertering. Observera pĂ„ —from=markdown_github. GitHub-versionen av Markdown Ă€r bakĂ„tkompatibel med original Markdown, sĂ„ om din text Ă€r skriven i det, behöver du inte oroa dig. Om din MD-fil Ă€r skriven i en specifik dialekt av Markdown, lĂ€s Pandoc-manualen (man pandoc), se till att din implementation stöds och justera /usr/bin/md2pdf vid behov.

Ett skript för en relativt automatisk installation

Om du inte vill konfigurera nĂ„got överhuvudtaget, och har en Ubuntu-liknande distribution, kan du försöka skapa ett skript med innehĂ„llet dolt under spoiler, och förmodligen kommer allt att installeras automatiskt, det enda Ă€r att du sjĂ€lv kopierar TeX-mallen som ligger under spoilern ovan. Öppna Terminalen och kör:

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

Fyll sedan i det med följande innehÄll:

InnehÄllet i skriptet $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

Kör det med kommandot:

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

Glöm inte att /usr/share/texlive/template.tex fylla i det specificerade innehÄllet i avsnittet «LaTeX-mall för konvertering av md2pdf».

AnvÀndning av md2pdf

Öppna helt enkelt mappen med Markdown-filen (some_file.md) i Terminalen och kör kommandot:

user@hostname:~$ md2pdf some_file.md

Som ett resultat kommer en fil att dyka upp i mappen some_file.md.pdf.

Slutsats

Baserat pÄ den beskrivna metoden kan du skapa vilken stil av PDF-filer som helst, och du kan ocksÄ konvertera andra format istÀllet för md, vilket som helst som stöds av Pandoc. Jag hoppas att denna instruktion en dag kommer att vara till nytta för tre och ett halvt personer.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster