Färdig 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 ganska mycket text, med enkel kursiv och fet formatering. Markdown är också bra för att skriva artiklar med källkod inkluderad. Men ibland vill man förlustfritt, dansa med en tamburin för att ta över den till en vanlig, välformad PDF-fil, och så att det inte blir några problem under konverteringen, som jag till exempel hade - man kan inte skriva på ryska på kommentarerna i källkoden, för långa rader överförs inte, men klipp och andra mindre problem. Instruktionen låter dig snabbt ställa in omvandlaren md2pdf utan att riktigt förstå hur det fungerar. Skriptet för en mer eller mindre automatisk installation finns nedan i lämpligt avsnitt.

Min exempel TeX-mall för konvertering använder teckensnittspaketet PSCyr, som inkluderar stöd för Microsoft-teckensnitt, nämligen Times New Roman. Det fanns sådana krav för ett diplom enligt GOST. Om du vet hur, kan du modifiera mallen så att den passar dina behov. I mina egna instruktioner måste du först busa med PSCyr-inställningen i TexLive. Installationen görs i Linux Mint Mate-distributionen, för andra distributioner kan du behöva googla på standard TexLive-paketmapparna för ditt system.

Installerar TexLive

Naturligtvis kan du bara installera de nödvändiga delarna av detta paket. Men personligen var jag uppriktigt sagt för lat för att leta efter den minsta nödvändiga fungerande installationen. För att säkerställa att allt fungerar, installera hela TexLive-paketet. Det kallas textlivsfylld och väger lite mer än 2 gigabyte, tänk på detta. Vi kör kommandot:

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

Efter en tillräckligt lång installation kan du fortsätta till nästa punkt.

Installera Pandoc Converter

Pandoc är ett Linux-paket som låter dig konvertera vissa textformat till andra. Den har många intressanta funktioner som du kan hitta själv på Internet. Vi är bara intresserade av möjligheten att konvertera en markdown-fil till PDF. Kontrollera om Pandoc är installerat och om inte, installera det. Till exempel så här:

user@hostname:~$ dpkg -s pandoc

Om utgången säger att den inte är installerad, installera:

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

Installerar PSCyr-paketet för TexLive

Först måste du ladda ner PSCyr. Än så länge är det fortfarande tillgängligt här länk, om den inte är tillgänglig av någon anledning när du läser artikeln, misströsta inte, det är lätt att hitta det tillsammans med installationsinstruktionerna genom att skriva något i stil med "Installera PsCyr texlive" i Google. Om det är tillgängligt är det lättare för dig, ladda ner och vi antar att du har packat upp arkivet i din hemmapp och att sökvägen till mappen som finns i arkivet ser ut som ~/PSCyr. Gå sedan till terminalen och kör följande kommandon 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/
user@hostname:~$ cp ./PSCyr/dvips/pscyr/*.enc ./PSCyr/fonts/enc/
user@hostname:~$ echo "fadr6t AdvertisementPSCyr "T2AEncoding ReEncodeFont"" > ./PSCyr/fonts/map/pscyr.map

Ta sedan reda på var den lokala katalogen finns texmf. Vi kör kommandot:

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

Troligtvis har du den här katalogen - /usr/local/share/texmf/, och sedan gör vi:

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

Tja, eller så kan du inte bry dig och köra ett kommando som kopierar till en mapp texmf var hon än är:

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

PSCyr-teckensnitt installerade, anslut till TexLive:

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

LaTeX-mall för md2pdf-konvertering

Jag kommer inte att beskriva exakt hur denna mall är konfigurerad, och kommer helt enkelt att ge den under spoilern utan mycket förklaring. Det räcker med att säga att den är välkonfigurerad, åtminstone vad gäller hur den hanterar texter med mycket källkod. Om du inte är nöjd med storleken på indrag, radavstånd, bristen på numrering av sektioner och underavdelningar, så är det enligt min mening ganska enkelt att googla frågan på Internet "hur man gör det i latex ..." och sedan ditt behov. Om det inte alls är tydligt, skriv i kommentarerna, jag ska försöka fördjupa mig i mina egna inställningar för 4 år sedan och beskriva vilken rad i mallen som ansvarar för vad. Under tiden kommer jag att skriva ner hur jag gjorde det på min PC, och du är fri att upprepa eller modifiera det själv.

Skapa en fil mall.tex i katalogen /usr/share/texlive/:

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

Ge den läsbehörighet:

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

öppna den under roten och klistra in innehållet gömt under spoilern nedan i det:

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

Mallinnehåll /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}

Spara filen /usr/share/texlive/template.tex och skriv ett skript som konverterar Makrdown-filen till PDF, och skapar i samma mapp en fil som kallas Markdown-filen med prefixet .pdf, det vill säga efter konverteringen filnamn.md visas i mappen. filnamn.md.pdf. Låt oss kalla manuset md2pdf och sätta på vägen / Usr / bin. Låt oss köra kommandona i sekvens:

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

Den fjärde raden innehåller faktiskt konverteringskommandot. uppmärksamma --from=markdown_github. GitHub-versionen av Markdown är bakåtkompatibel med den ursprungliga Markdown, så om din text är skriven i den behöver du inte oroa dig. Om din MD-fil är skriven på en specifik Markdown-dialekt, läs Pandoc-manualen (man pandoc), se till att din implementering stöds av den, och justera /usr/bin/md2pdf om nödvändigt.

Skript för mer eller mindre automatisk installation

Om du egentligen inte vill konfigurera någonting alls, och du har en Ubuntu-liknande distribution, kan du prova att skapa ett skript med innehållet gömt under spoilern, och med största sannolikhet kommer allt att installera sig själv, det enda är, kopiera TeX-mallen publicerad under spoilern ovan till där du behöver sig själva. Öppna Terminal och kör:

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

Fyll den sedan 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 måste fyllas i enligt vad som anges i avsnittet "LaTeX-mall för md2pdf-konvertering" innehåll.

Använder md2pdf

Öppna bara mappen med Markdown-filen (någon_fil.md) i terminalen och kör kommandot:

user@hostname:~$ md2pdf some_file.md

Som ett resultat kommer en fil att visas i mappen någon_fil.md.pdf.

Slutsats

Baserat på den beskrivna metoden kan du bygga vilken typ av PDF-filer som helst, du kan också konvertera andra format istället för md, alla som stöds av Pandoc. Jag vågar hoppas att denna instruktion en dag kommer att vara användbar för 3 och en halv personer.

Källa: will.com

Lägg en kommentar