Færdiglavet markdown2pdf-løsning med kildekode til Linux

Forord

Markdown er en fantastisk måde at skrive en kort artikel på, og nogle gange ret meget tekst, med simpel kursiv og fed formatering. Markdown er også god til at skrive artikler med inkluderet kildekode. Men nogle gange vil man tabesløst, danse med en tamburin for at overhale den til en almindelig, velformet PDF-fil, og så der ikke er problemer under konverteringen, som jeg f.eks. havde - man kan ikke skrive på russisk i kommentarerne til kildekoden, for lange linjer er ikke overført, men afskåret og andre mindre problemer. Instruktionen giver dig mulighed for hurtigt at opsætte konverteren md2pdf uden rigtig at forstå hvordan det fungerer. Scriptet til en mere eller mindre automatisk installation er nedenfor i det relevante afsnit.

Min prøve TeX-skabelon til konvertering bruger PSCyr-skrifttypepakken, som inkluderer understøttelse af Microsoft-skrifttyper, nemlig Times New Roman. Der var sådanne krav til et eksamensbevis ifølge GOST. Hvis du ved hvordan, kan du ændre skabelonen, så den passer til dine behov. I mine egne instruktioner skal du først fjolle med PSCyr-indstillingen i TexLive. Opsætningen udføres i Linux Mint Mate-distributionen, for andre distributioner skal du muligvis google standard TexLive-pakkemapper til dit system.

Installation af TexLive

Selvfølgelig kan du kun installere de nødvendige dele af denne pakke. Men personligt var jeg ærligt talt for doven til at lede efter den mindst nødvendige arbejdsinstallation. For at sikre, at alt fungerer, skal du installere hele TexLive-pakken. Det kaldes texlive-fuld og vejer lidt mere end 2 gigabyte, husk dette faktum. Vi udfører kommandoen:

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

Efter en tilstrækkelig lang installation kan du fortsætte til næste punkt.

Installation af Pandoc Converter

Pandoc er en Linux-pakke, der giver dig mulighed for at konvertere nogle tekstformater til andre. Det har en masse interessante funktioner, som du selv kan finde på internettet. Vi er kun interesserede i muligheden for at konvertere en markdown-fil til PDF. Tjek om Pandoc er installeret, og hvis ikke, installer det. For eksempel sådan her:

user@hostname:~$ dpkg -s pandoc

Hvis outputtet siger, at det ikke er installeret, skal du installere:

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

Installation af PSCyr-pakken til TexLive

Først skal du downloade PSCyr. Indtil videre er den stadig tilgængelig her link, hvis det på tidspunktet for læsning af artiklen ikke er tilgængeligt af en eller anden grund, så fortvivl ikke, det er nemt at finde det sammen med installationsvejledningen ved at skrive noget som "Installerer PsCyr texlive" i Google. Hvis det er tilgængeligt, så er det nemmere for dig, download, og vi antager, at du har pakket arkivet ud i din hjemmemappe, og stien til mappen i arkivet ser således ud ~/PSCyr. Gå derefter til terminalen og udfør følgende kommandoer i rækkefølge:

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

Find derefter ud af, hvor den lokale mappe er placeret texmf. Vi udfører kommandoen:

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

Mest sandsynligt har du denne mappe - /usr/local/share/texmf/, og så gør vi:

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

Nå, eller du kan ikke genere og køre en kommando, der kopierer til en mappe texmf hvor hun end er:

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

PSCyr-skrifttyper installeret, opret forbindelse til TexLive:

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

LaTeX skabelon til md2pdf konvertering

Jeg vil ikke beskrive præcis, hvordan denne skabelon er konfigureret, og vil blot give den under spoileren uden megen forklaring. Det er tilstrækkeligt at sige, at det er godt konfigureret, i hvert fald i forhold til hvordan det håndterer tekster med en masse kildekode. Hvis du ikke er tilfreds med størrelsen af ​​indrykning, linjeafstand, manglen på nummerering af sektioner og underafsnit, så er det efter min mening ret nemt at google spørgsmålet på internettet "hvordan man gør det i Latex ..." og så dit behov. Hvis det slet ikke er tydeligt, så skriv i kommentarerne, jeg vil forsøge at dykke ned i mine egne indstillinger for 4 år siden og beskrive hvilken linje i skabelonen, der er ansvarlig for hvad. I mellemtiden vil jeg skrive ned, hvordan jeg gjorde det på min pc, og du er fri til at gentage eller ændre det for dig selv.

Opret en fil template.tex i kataloget /usr/share/texlive/:

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

Giv den læsetilladelser:

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

åbn den under roden og indsæt indholdet gemt under spoileren nedenfor ind i den:

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

Skabelonindhold /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}

Gemmer filen /usr/share/texlive/template.tex og skriv et script, der konverterer Makrdown-filen til PDF, og laver i samme mappe en fil kaldet Markdown-filen med præfikset .pdf, det vil sige efter konverteringen filnavn.md vises i mappen. filnavn.md.pdf. Lad os kalde manuskriptet md2pdf og sætte på vej / Usr / bin. Lad os udføre kommandoerne i rækkefølge:

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 4. linje indeholder faktisk konverteringskommandoen. Vær opmærksom på --from=markdown_github. GitHub-versionen af ​​Markdown er bagudkompatibel med den originale Markdown, så hvis din tekst er skrevet i den, behøver du ikke bekymre dig. Hvis din MD-fil er skrevet på en specifik Markdown-dialekt, så læs Pandoc-manualen (man pandoc), sørg for, at din implementering understøttes af det, og juster /usr/bin/md2pdf Hvis det er nødvendigt.

Script til mere eller mindre automatisk installation

Hvis du egentlig ikke vil konfigurere noget overhovedet, og du har en Ubuntu-lignende distribution, kan du prøve at lave et script med indholdet gemt under spoileren, og højst sandsynligt vil alt installere sig selv, det eneste er, kopiere TeX skabelonen opslået under spoileren ovenfor, hvor det er nødvendigt selv. Åbn Terminal og kør:

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

Fyld den derefter med følgende indhold:

Indholdet af $HOME/installmd2pdf.sh scriptet

#!/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

Glem ikke at /usr/share/texlive/template.tex skal udfyldes som angivet i afsnittet "LaTeX skabelon til md2pdf konvertering" indhold.

Bruger md2pdf

Bare åbn mappen med Markdown-filen (some_file.md) i terminalen og kør kommandoen:

user@hostname:~$ md2pdf some_file.md

Som følge heraf vises en fil i mappen some_file.md.pdf.

Konklusion

Baseret på den beskrevne metode kan du bygge enhver stil af PDF-filer, du kan også konvertere andre formater i stedet for md, alle understøttet af Pandoc. Jeg tør håbe, at denne instruktion en dag vil være nyttig for 3 og en halv person.

Kilde: www.habr.com

Tilføj en kommentar