Handa nang markdown2pdf na solusyon na may source code para sa Linux

paunang salita

Ang Markdown ay isang mahusay na paraan upang magsulat ng isang maikling artikulo, at kung minsan ay napakaraming teksto, na may simpleng italic at bold na pag-format. Mahusay din ang Markdown para sa pagsusulat ng mga artikulo na may kasamang source code. Ngunit kung minsan ay nais mong walang humpay, sumayaw gamit ang isang tamburin upang maabutan ito sa isang regular, mahusay na nabuong PDF file, at upang walang mga problema sa panahon ng conversion, na, halimbawa, nagkaroon ako - hindi ka maaaring sumulat sa Russian sa ang mga komento ng source code, masyadong mahahabang linya ay hindi inilipat, ngunit pinutol at iba pang maliliit na problema. Ang pagtuturo ay magbibigay-daan sa iyo upang mabilis na i-set up ang converter md2pdf nang hindi talaga nauunawaan kung paano ito gumagana. Ang script para sa mas marami o mas kaunting awtomatikong pag-install ay nasa ibaba sa naaangkop na seksyon.

Ang aking sample na template ng TeX para sa conversion ay gumagamit ng PSCyr font package, na kinabibilangan ng suporta para sa mga Microsoft font, ibig sabihin Times New Roman. Mayroong mga naturang kinakailangan para sa isang diploma ayon sa GOST. Kung alam mo kung paano, maaari mong baguhin ang template upang umangkop sa iyong mga pangangailangan. Sa sarili kong mga tagubilin, kailangan mo munang magpakatanga sa setting ng PSCyr sa TexLive. Ginagawa ang pag-setup sa pamamahagi ng Linux Mint Mate, para sa iba pang mga distribusyon na maaaring kailanganin mong i-google ang karaniwang mga folder ng pakete ng TexLive para sa iyong system.

Pag-install ng TexLive

Siyempre, maaari mong i-install lamang ang mga kinakailangang bahagi ng package na ito. Ngunit sa personal, ako ay lantaran na tamad na maghanap para sa pinakamababang kinakailangang pag-install sa trabaho. Para matiyak na gumagana ang lahat, i-install ang buong TexLive package. Ito ay tinatawag na textlive-full at may timbang na higit sa 2 gigabytes, tandaan ang katotohanang ito. Isinasagawa namin ang utos:

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

Pagkatapos ng sapat na mahabang pag-install, maaari kang magpatuloy sa susunod na item.

Pag-install ng Pandoc Converter

Ang Pandoc ay isang Linux package na nagbibigay-daan sa iyong i-convert ang ilang mga format ng teksto sa iba. Ito ay may maraming mga kagiliw-giliw na mga tampok na maaari mong mahanap ang iyong sarili sa Internet. Interesado lang kami sa posibilidad ng pag-convert ng markdown file sa PDF. Suriin kung naka-install ang Pandoc at kung hindi, i-install ito. Halimbawa tulad nito:

user@hostname:~$ dpkg -s pandoc

Kung ang output ay nagsasabing hindi ito naka-install, i-install:

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

Pag-install ng PSCyr package para sa TexLive

Una kailangan mong i-download ang PSCyr. Sa ngayon ay magagamit pa rin ito link, kung sa oras ng pagbabasa ng artikulo ay hindi ito magagamit para sa ilang kadahilanan, huwag mawalan ng pag-asa, madaling mahanap ito kasama ang mga tagubilin sa pag-install sa pamamagitan ng pag-type ng isang bagay tulad ng "Pag-install ng PsCyr texlive" sa Google. Kung ito ay magagamit, pagkatapos ay mas madali para sa iyo, i-download at ipagpalagay namin na na-unpack mo ang archive sa iyong home folder at sa gayon ang path sa folder na nilalaman sa archive ay mukhang ~/PSCyr. Pagkatapos ay pumunta sa Terminal at isagawa ang sumusunod na mga utos sa pagkakasunud-sunod:

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

Susunod, alamin kung saan matatagpuan ang lokal na direktoryo texmf. Isinasagawa namin ang utos:

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

Malamang na mayroon kang direktoryo na ito - /usr/local/share/texmf/, at pagkatapos ay gagawin namin:

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

Well, o hindi ka maaaring mag-abala at magpatakbo ng isang command na kokopya sa isang folder texmf nasaan man siya:

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

Naka-install ang mga PSCyr font, kumonekta sa TexLive:

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

LaTeX template para sa md2pdf conversion

Hindi ko ilalarawan nang eksakto kung paano na-configure ang template na ito, at ibibigay lang ito sa ilalim ng spoiler nang walang gaanong paliwanag. Sapat na upang sabihin na ito ay mahusay na na-configure, hindi bababa sa kung paano ito pinangangasiwaan ang mga teksto na may maraming source code. Kung hindi ka nasisiyahan sa laki ng mga indent, line spacing, ang kakulangan ng pag-numero ng mga seksyon at mga subsection, kung gayon sa palagay ko ay medyo madaling i-google ang tanong sa Internet "kung paano ito gagawin sa Latex ..." at pagkatapos ang iyong pangangailangan. Kung hindi ito malinaw, sumulat sa mga komento, susubukan kong suriin ang sarili kong mga setting 4 na taon na ang nakakaraan at ilarawan kung aling linya ng template ang responsable para sa kung ano. Pansamantala, isusulat ko kung paano ko ito ginawa sa aking PC, at malaya kang ulitin o baguhin ito para sa iyong sarili.

Gumawa ng file template.tex sa catalog /usr/share/texlive/:

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

Bigyan ito ng mga pahintulot sa pagbasa:

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

buksan ito sa ilalim ng ugat at i-paste ang mga nilalamang nakatago sa ilalim ng spoiler sa ibaba dito:

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

Nilalaman ng template /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}

I-save ang file /usr/share/texlive/template.tex at magsulat ng script na magko-convert sa Makrdown file sa PDF, na lumilikha sa parehong folder ng isang file na tinatawag na Markdown file na may prefix na .pdf, iyon ay, pagkatapos ng conversion filename.md lalabas sa folder. filename.md.pdf. Tawagan natin ang script md2pdf at ilagay sa daan / usr / bin. Isagawa natin ang mga utos sa pagkakasunud-sunod:

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

Ang ika-4 na linya ay talagang naglalaman ng utos ng conversion. pansinin mo --from=markdown_github. Ang GitHub na bersyon ng Markdown ay pabalik na tugma sa orihinal na Markdown, kaya kung ang iyong teksto ay nakasulat dito, hindi mo kailangang mag-alala. Kung ang iyong MD file ay nakasulat sa isang partikular na Markdown dialect, pagkatapos ay basahin ang Pandoc manual (man pandoc), tiyaking sinusuportahan nito ang iyong pagpapatupad, at i-tweak /usr/bin/md2pdf kung kinakailangan.

Script para sa higit pa o mas kaunting awtomatikong pag-install

Kung hindi mo talaga nais na i-configure ang anumang bagay, at mayroon kang isang tulad ng Ubuntu na pamamahagi, maaari mong subukang lumikha ng isang script na may mga nilalaman na nakatago sa ilalim ng spoiler, at malamang na ang lahat ay mai-install mismo, ang tanging bagay ay, kopyahin ang template ng TeX na nai-post sa ilalim ng spoiler sa itaas kung saan kinakailangan mismo. Buksan ang Terminal at tumakbo:

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

Pagkatapos ay punan ito ng sumusunod na nilalaman:

Ang mga nilalaman ng $HOME/installmd2pdf.sh script

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

Patakbuhin ito gamit ang utos:

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

Huwag kalimutan iyan /usr/share/texlive/template.tex dapat punan tulad ng ipinahiwatig sa seksyon "LaTeX template para sa md2pdf conversionΒ» nilalaman.

Gamit ang md2pdf

Buksan lamang ang folder na may Markdown file (some_file.md) sa Terminal at patakbuhin ang utos:

user@hostname:~$ md2pdf some_file.md

Bilang resulta, lilitaw ang isang file sa folder some_file.md.pdf.

Konklusyon

Batay sa inilarawan na pamamaraan, maaari kang bumuo ng anumang istilo ng mga PDF file, maaari mo ring i-convert ang iba pang mga format sa halip na md, anumang suportado ng Pandoc. Naglakas-loob akong umasa na balang araw ang pagtuturo na ito ay magiging kapaki-pakinabang sa 3 at kalahating tao.

Pinagmulan: www.habr.com

Magdagdag ng komento