Kant-en-klaar markdown2pdf-oplossing met de broncode voor Linux

Voorwoord

Markdown is een uitstekende manier om een kort artikel te schrijven, of soms zelfs een behoorlijk omvangrijke tekst, met eenvoudige opmaak zoals cursief en vetgedrukt. Ook is Markdown goed voor het schrijven van artikelen met toevoegingen van broncode. Maar soms wil je het zonder verlies en met een minimale inspanning omzetten naar een gewoon, goed opgemaakt PDF-bestand, zonder problemen bij de conversie, zoals ik heb ervaren — je kunt geen commentaar in het Russisch schrijven in de broncode, te lange regels worden niet afgebroken maar afgesneden, en andere kleine problemen. Deze instructie zal helpen om de converter snel in te stellen. md2pdf zonder echt in te gaan op hoe het werkt. Het script voor een meer automatische installatie hieronder in het overeenkomstige gedeelte.

Mijn voorbeeld TeX-sjabloon voor conversie maakt gebruik van het PSCyr-lettertypepakket, dat ondersteuning biedt voor Microsoft-lettertypen, namelijk Times New Roman. Dit waren de eisen voor het diploma volgens GOST. Als je wilt, kun je het sjabloon aanpassen aan je eigen behoeften. In mijn instructie moet je echter eerst wat moeite doen met het instellen van PSCyr in TexLive. De instelling gebeurt in de Linux Mint Mate-distributie; voor andere distributies moet je mogelijk de standaardpaden van het TexLive-pakket voor jouw systeem opzoeken.

Installatie van TexLive

Natuurlijk kun je alleen de benodigde delen van dit pakket installeren. Maar persoonlijk had ik het te veel moeite gevonden om naar de minimaal benodigde werkinstallatie te zoeken. Om er zeker van te zijn dat alles goed werkt, installeren we het volledige TexLive-pakket. Het wordt genoemd texlive-full en weegt iets meer dan 2 gigabyte, hou rekening met dit feit. Voer de volgende opdracht uit:

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

Na een vrij lange installatie kunnen we doorgaan naar het volgende punt.

Installatie van de Pandoc-converter

Pandoc is een Linux-pakket waarmee je sommige bestandsformaten naar andere kunt converteren. Het biedt veel interessante mogelijkheden die je zelf op internet kunt onderzoeken. Wij zijn echter alleen geĆÆnteresseerd in de functie om een markdown-bestand naar PDF te converteren. Laten we controleren of Pandoc is geĆÆnstalleerd en, als dat niet het geval is, het installeren. Bijvoorbeeld zo:

user@hostname:~$ dpkg -s pandoc

Als in de output staat dat het niet is geĆÆnstalleerd, installeren we het:

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

Installatie van het PSCyr-pakket voor TexLive

Eerst moet je PSCyr downloaden. Het is voorlopig nog beschikbaar via deze de link, als het artikel op het moment van lezen om welke reden dan ook niet beschikbaar is, raak dan niet in paniek, het is niet moeilijk te vinden samen met de installatie-instructies door iets als "Installatie PsCyr texlive" in Google in te voeren. Als het wel beschikbaar is, download dan en we gaan ervan uit dat je het archief in je thuismap hebt uitgepakt, waardoor het pad naar de map die in het archief zit eruitziet als ~\/PSCyr. Ga dan naar de Terminal en voer de volgende commando's uit:

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

Vervolgens leren we waar de lokale catalogus zich bevindt texmf. Voer de opdracht uit:

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

Waarschijnlijk is deze catalogus voor jou — /usr/local/share/texmf/, en dan voeren we uit:

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

Of je kunt het ook eenvoudig maken door het commando uit te voeren dat in de map kopieert texmf waar het ook is:

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

PSCyr-lettertypen zijn geĆÆnstalleerd, verbind ze in TexLive:

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

LaTeX-sjabloon voor het converteren van md2pdf

Ik zal niet beschrijven hoe dit sjabloon precies is ingesteld, ik geef het gewoon onder een spoiler zonder al te veel uitleg. Het is genoeg om te zeggen dat het redelijk goed is ingesteld, voor zover het teksten met veel broncode verwerkt. Als je niet tevreden bent met de marges, regelafstand, het gebrek aan nummering van secties en subsections, dan denk ik dat je dat gemakkelijk kunt opzoeken met de vraag "hoe in LaTeX ... te doen" en dan jouw noodzaak. Als het nog steeds niet duidelijk is, schrijf dan in de opmerkingen, ik zal proberen mijn instellingen van vier jaar geleden te begrijpen en op te sommen welke regel van het sjabloon waarvoor staat. Voor nu zal ik beschrijven hoe ik het op mijn pc heb gedaan, en jullie kunnen het vrij herhalen of aanpassen.

Maak een bestand aan template.tex in de catalogus /usr/share/texlive/:

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

Geef het leesrechten:

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

open het als root en plak de inhoud die onder de spoiler hieronder verborgen is in het bestand:

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

Inhoud van het sjabloon \/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}

Bestand opslaan /usr/share/texlive/template.tex en schrijven een script dat een Markdown-bestand naar PDF converteert, waardoor in dezelfde map een bestand met de naam van het Markdown-bestand met de extensie .pdf wordt aangemaakt, dus na conversie filename.md zal in de map verschijnen filename.md.pdf. We noemen het script md2pdf en plaatsen het op het pad /usr/bin. We voeren de commando's op volgorde uit:

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

In regel 4 staat de conversieopdracht. Let op —from=markdown_githubDe GitHub versie van Markdown is terugcompatibel met de originele Markdown, dus als je tekst daarop is geschreven, hoef je je geen zorgen te maken. Als je MD-bestand echter is geschreven in een specifieke dialect van Markdown, lees dan de handleiding over Pandoc (man pandoc), zorg ervoor dat jouw implementatie wordt ondersteund, en pas het aan indien nodig. /usr/bin/md2pdf .

Een script voor een meer automatische installatie.

Als je helemaal niets wilt configureren en je hebt een op Ubuntu gebaseerde distributie, kun je proberen een script te maken met de inhoud die onder de spoiler is verborgen, en hoogstwaarschijnlijk wordt alles automatisch geïnstalleerd, het enige wat je zelf moet doen is de TeX-sjabloon die hierboven onder de spoiler is uitgelicht, op de juiste plek kopiëren. Open een terminal en voer uit:

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

Vul het daarna met de volgende inhoud:

Inhoud van het script $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

Start het met het commando:

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

Vergeet niet dat /usr/share/texlive/template.tex je de inhoud die in de sectie "LaTeX-sjabloon voor het converteren van md2pdf" is aangegeven, moet invullen.

Gebruik van md2pdf

Open gewoon de map met het Markdown-bestand (some_file.md) in de terminal en voer het commando uit:

user@hostname:~$ md2pdf some_file.md

Als resultaat verschijnt er een bestand in de map. some_file.md.pdf.

Conclusie

Op basis van de beschreven methode kun je elke stijl van PDF-bestanden maken, je kunt ook andere formaten converteren dan md, elk formaat dat door Pandoc wordt ondersteund. Ik hoop dat deze handleiding ooit nuttig zal zijn voor 3,5 mensen.

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster