Ferdig markdown2pdf-løsning med kildekode for Linux

Forord

Markdown er en fin måte å skrive en kort artikkel på, og noen ganger ganske mye tekst, med enkel kursiv og fet formatering. Markdown er også bra for å skrive artikler med kildekode inkludert. Men noen ganger vil du tapsløst, danse med en tamburin for å overta den til en vanlig, velformet PDF-fil, og slik at det ikke er noen problemer under konverteringen, som jeg for eksempel hadde - du kan ikke skrive på russisk på kommentarene til kildekoden, for lange linjer er ikke overført, men kuttet og andre mindre problemer. Instruksjonen lar deg raskt sette opp omformeren md2pdf uten å helt forstå hvordan det fungerer. Skriptet for en mer eller mindre automatisk installasjon er under i den aktuelle delen.

Min eksempel TeX-mal for konvertering bruker PSCyr-fontpakken, som inkluderer støtte for Microsoft-fonter, nemlig Times New Roman. Det var slike krav til et vitnemål i henhold til GOST. Hvis du vet hvordan, kan du endre malen for å passe dine behov. I mine egne instruksjoner må du først tulle med PSCyr-innstillingen i TexLive. Oppsettet gjøres i Linux Mint Mate-distribusjonen, for andre distribusjoner må du kanskje google standard TexLive-pakkemappene for systemet ditt.

Installerer TexLive

Selvfølgelig kan du bare installere de nødvendige delene av denne pakken. Men personlig var jeg ærlig talt for lat til å se etter den minste nødvendige arbeidsinstallasjonen. For å være sikker på at alt fungerer, installer hele TexLive-pakken. Det kalles texlive-full og veier litt mer enn 2 gigabyte, husk dette faktum. Vi utfører kommandoen:

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

Etter en tilstrekkelig lang installasjon kan du fortsette til neste element.

Installere Pandoc Converter

Pandoc er en Linux-pakke som lar deg konvertere noen tekstformater til andre. Den har mange interessante funksjoner som du kan finne selv på Internett. Vi er kun interessert i muligheten for å konvertere en markdown-fil til PDF. Sjekk om Pandoc er installert, og hvis ikke, installer det. For eksempel slik:

user@hostname:~$ dpkg -s pandoc

Hvis utgangen sier at den ikke er installert, installer:

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

Installerer PSCyr-pakken for TexLive

Først må du laste ned PSCyr. Foreløpig er den fortsatt tilgjengelig på denne link, hvis på tidspunktet for å lese artikkelen den ikke er tilgjengelig av en eller annen grunn, ikke fortvil, det er lett å finne den sammen med installasjonsinstruksjonene ved å skrive noe sånt som "Installere PsCyr texlive" i Google. Hvis det er tilgjengelig, er det lettere for deg, last ned og vi antar at du har pakket ut arkivet i hjemmemappen din og dermed ser banen til mappen i arkivet ut som ~/PSCyr. Gå deretter til terminalen og utfør følgende kommandoer i rekkefø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

Finn deretter ut hvor den lokale katalogen ligger texmf. Vi utfører kommandoen:

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

Mest sannsynlig har du denne katalogen - /usr/local/share/texmf/, og så gjør vi:

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

Vel, eller du kan ikke bry deg og kjøre en kommando som vil kopiere til en mappe texmf hvor enn hun er:

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

PSCyr-fonter installert, koble til TexLive:

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

LaTeX-mal for md2pdf-konvertering

Jeg vil ikke beskrive nøyaktig hvordan denne malen er konfigurert, og vil ganske enkelt gi den under spoileren uten mye forklaring. Det er nok å si at den er godt konfigurert, i hvert fall med tanke på hvordan den håndterer tekster med mye kildekode. Hvis du ikke er fornøyd med størrelsen på innrykk, linjeavstand, mangelen på nummerering av seksjoner og underseksjoner, så er det etter min mening ganske enkelt å google spørsmålet på Internett "hvordan gjøre det i Latex ..." og så ditt behov. Hvis det ikke er helt klart, skriv i kommentarfeltet, jeg skal prøve å fordype meg i mine egne innstillinger for 4 år siden og beskrive hvilken linje i malen som er ansvarlig for hva. I mellomtiden vil jeg skrive ned hvordan jeg gjorde det på min PC, og du står fritt til å gjenta eller endre det selv.

Opprett en fil template.tex i katalogen /usr/share/texlive/:

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

Gi den lesetillatelser:

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

åpne den under roten og lim inn innholdet skjult under spoileren nedenfor:

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

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

Lagrer filen /usr/share/texlive/template.tex og skriv et skript som vil konvertere Makrdown-filen til PDF, og lage i samme mappe en fil kalt Markdown-filen med prefikset .pdf, det vil si etter konverteringen filnavn.md vil vises i mappen. filnavn.md.pdf. La oss kalle manuset md2pdf og sette på vei / Usr / bin. La oss utføre kommandoene i rekkefø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 fjerde linjen inneholder faktisk konverteringskommandoen. Følg med på --from=markdown_github. GitHub-versjonen av Markdown er bakoverkompatibel med den originale Markdown, så hvis teksten din er skrevet i den, trenger du ikke å bekymre deg. Hvis MD-filen din er skrevet på en bestemt Markdown-dialekt, les Pandoc-manualen (man pandoc), sørg for at implementeringen din støttes av den, og juster /usr/bin/md2pdf hvis nødvendig.

Skript for mer eller mindre automatisk installasjon

Hvis du egentlig ikke vil konfigurere noe i det hele tatt, og du har en Ubuntu-lignende distribusjon, kan du prøve å lage et script med innholdet skjult under spoileren, og mest sannsynlig vil alt installere seg selv, det eneste er å kopiere TeX-malen lagt ut under spoileren ovenfor der det er nødvendig selv. Åpne Terminal og kjør:

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

Fyll den deretter med følgende innhold:

Innholdet i $HOME/installmd2pdf.sh-skriptet

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

Kjør den med kommandoen:

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

Ikke glem det /usr/share/texlive/template.tex må fylles ut som angitt i avsnittet "LaTeX-mal for md2pdf-konvertering" innhold.

Bruker md2pdf

Bare åpne mappen med Markdown-filen (noen_fil.md) i terminalen og kjør kommandoen:

user@hostname:~$ md2pdf some_file.md

Som et resultat vil en fil vises i mappen noen_fil.md.pdf.

Konklusjon

Basert på den beskrevne metoden kan du bygge hvilken som helst stil med PDF-filer, du kan også konvertere andre formater i stedet for md, alle som støttes av Pandoc. Jeg tør å håpe at denne instruksjonen en dag vil være nyttig for 3 og en halv person.

Kilde: www.habr.com

Legg til en kommentar