Færdig løsning markdown2pdf med kildekode til Linux

Forord

Markdown er en fantastisk måde at skrive en lille artikel, og nogle gange også en ret omfattende tekst, med enkle formateringer som kursiv og fed skrift. Markdown er også godt til at skrive artikler med indhold af kildekode. Men nogle gange vil man uden tab og med lidt besvær gerne konvertere det til en almindelig, godt formateret PDF-fil, så der ikke opstår problemer under konverteringen, som for eksempel dem, jeg havde – man kan ikke skrive på russisk i kommentarerne i kildekoden, for lange linjer bliver ikke brudt, men skåret af, og andre små problemer. Denne vejledning vil gøre det muligt hurtigt at sætte konverteren op. md2pdf uden at vide præcist hvordan det fungerer. Skriptet til en mere eller mindre automatisk installation findes nedenfor i den relevante sektion.

Mit eksempel på en TeX-skabelon til konvertering bruger PSCyr fontpakken, som inkluderer understøttelse af Microsoft skrifttyper, nemlig Times New Roman. Sådan var kravene til eksamensbeviset ifølge GOST. Hvis du kan, kan du modificere skabelonen til dine egne behov. I min vejledning skal man dog først bøvle lidt med opsætningen af PSCyr i TexLive. Opsætningen udføres i Linux Mint Mate-distributionen; for andre distributioner må man måske lige google de standard mapper for TexLive-pakken til dit system.

Installation af TexLive

Selvfølgelig kan man kun installere de nødvendige dele af denne pakke. Men personligt havde jeg ærligt talt ikke lyst til at finde den mindst mulige arbejdsmæssige installation. For at sikre at alt virker korrekt, installerer vi hele TexLive-pakken. Den hedder texlive-full og vejer lidt over 2 gigabyte, så husk dette faktum. Udfør kommandoen:

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

Efter en ret lang installation kan vi gå videre til næste punkt.

Installation af konverteren Pandoc

Pandoc er en Linux-pakke, der gør det muligt at konvertere nogle tekstformater til andre. Den har mange interessante funktioner, som du kan undersøge selv på internettet. Vi er dog kun interesserede i muligheden for at konvertere en markdown-fil til PDF. Lad os tjekke om Pandoc er installeret og, hvis ikke, installere det. For eksempel sådan:

user@hostname:~$ dpkg -s pandoc

Hvis output siger, at det ikke er installeret – installer det:

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

Installation af PSCyr-pakken til TexLive

Først skal du downloade PSCyr. Den er stadig tilgængelig der. linket, hvis artiklen på tidspunktet for læsningen ikke er tilgængelig af en eller anden grund, skal du ikke fortvivle, den er let at finde sammen med installationsvejledningen ved at søge på Google efter noget som "Installation af PsCyr texlive". Hvis den er tilgængelig, er det lettere for dig, download og lad os antage, at du har udpakket arkivet i din hjemme-mappe, og således ser stien til mappen, der findes i arkivet, således ud som ~/PSCyr. Så åbner vi Terminalen og udfører kommandoerne en efter en:

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

Dernæst finder vi ud af, hvor den lokale mappe er texmf. Udfør kommandoen:

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

Dette katalog vil sandsynligvis være hos dig — /usr/local/share/texmf/, og så udfører vi:

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

Eller man kan nøjes med at udføre kommandoen, der kopierer til mappen texmf uanset hvor den er:

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

PSCyr-skrifttyperne er installeret, tilslut dem i TexLive:

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

LaTeX skabelon til konvertering af md2pdf

Jeg vil ikke beskrive, hvordan denne skabelon er konfigureret, og giver bare dens indhold under spoiler uden særlig forklaring. Det er tilstrækkeligt at sige, at den er rimeligt konfigureret, i det mindste hvad angår behandlingen af tekster med mange koder. Hvis du ikke er tilfreds med indrykningsstørrelserne, linjeafstandene, fraværet af sektions- og undersektionsnumre, så er det efter min mening ret nemt at google spørgsmålet "hvordan man gør i Latex..." og så dine behov. Hvis det stadig er uklart, skriv i kommentarerne, så vil jeg forsøge at dykke ned i mine egne indstillinger fra for fire år siden og beskrive, hvilken linje i skabelonen der gør hvad. Indtil da vil jeg beskrive, hvordan jeg gjorde på min PC, og du er fri til at gentage eller modificere det til dine behov.

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

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

Giv den læserettigheder:

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

åbner som root og indsætter indholdet skjult under spoileren nedenfor:

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

Indholdet af skabelonen /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[danish,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}

Gemmer filen /usr/share/texlive/template.tex og skriv et script, der konverterer Markdown-filer til PDF og opretter en fil i den samme mappe med navnet på Markdown-filen med suffikset .pdf, dvs. efter konverteringen. filename.md vil der være en mappe filename.md.pdf. Vi kalder scriptet md2pdf og placerer det i stien /usr/bin. Udfør følgende kommandoer:

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 fjerde linje er kommandoen til konvertering faktisk angivet. Bemærk venligst —from=markdown_github. GitHub-versionen af Markdown er bagudkompatibel med den oprindelige Markdown, så hvis din tekst er skrevet i den, behøver du ikke at bekymre dig. Hvis din MD-fil derimod er skrevet i en specifik dialekt af Markdown, kan du læse manualen til Pandoc (man pandoc), sørge for, at din implementering understøtter den, og rette til /usr/bin/md2pdf om nødvendigt.

Script til en mere eller mindre automatisk installation

Hvis du ikke har lyst til at konfigurere noget som helst, og du har en Ubuntu-lignende distribution, kan du prøve at oprette et script med indholdet gemt under spoileren, og så vil det sandsynligvis installeres af sig selv. Det eneste, du selv skal gøre, er at kopiere TeX-skabelonen, der er blevet lagt under spoileren ovenfor, til det rette sted. Åbn Terminal og udfør:

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

Fyld derefter dette indhold i den:

Indholdet af 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 kommandoen:

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

Husk, at /usr/share/texlive/template.tex du skal udfylde det angivne indhold under "LaTeX skabelon til konvertering af md2pdf".

Brug af md2pdf

Åbn blot mappen med Markdown-filen (some_file.md) i Terminalen, og udfør kommandoen:

user@hostname:~$ md2pdf some_file.md

Som resultat vil der dukke en fil op i mappen some_file.md.pdf.

Konklusion

Baseret på den beskrevne metode kan der opbygges enhver stil af PDF-filer, og det er også muligt at konvertere andre formater end md, så længe de understøttes af Pandoc. Jeg tør håbe, at denne vejledning en dag vil være nyttig for tre og en halv person.

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster