Ҳалли тайёри markdown2pdf бо рамзи сарчашма барои Linux

Пешгуфтор

Markdown як роҳи олиҷаноб барои навиштани мақолаи кӯтоҳ ва баъзан хеле зиёди матн бо форматкунии курсив ва ғафс аст. Markdown инчунин барои навиштани мақолаҳо бо рамзи сарчашма хуб аст. Аммо баъзан шумо мехоҳед, ки бефоида рақс кунед, бо танбур рақс кунед, то онро ба файли муқаррарии хуб ташаккулёфтаи PDF гузаред ва дар вақти табдилдиҳӣ ҳеҷ мушкиле ба миён наояд, ки масалан, ман доштам - шумо наметавонед бо забони русӣ нависед шарҳҳои рамзи сарчашма, сатрҳои аз ҳад дароз интиқол дода нашудаанд, балки бурида ва дигар мушкилоти хурд. Дастурамал ба шумо имкон медиҳад, ки конвертерро зуд танзим кунед md2pdf бе воқеан фаҳмидани он ки чӣ тавр кор мекунад. Скрипт барои насби автоматӣ дар зер дар фасли мувофиқ аст.

Намунаи қолаби TeX барои табдили ман бастаи шрифти PSCyr-ро истифода мебарад, ки дастгирии ҳуруфҳои Microsoft-ро дар бар мегирад, яъне Times New Roman. Мувофиқи ГОСТ барои диплом чунин талабот вуҷуд дошт. Агар шумо медонед, ки чӣ тавр, шумо метавонед қолабро мувофиқи эҳтиёҷоти худ тағир диҳед. Дар дастурҳои шахсии ман, шумо аввал бояд бо танзимоти PSCyr дар TexLive фиреб диҳед. Насбкунӣ дар тақсимоти Linux Mint Mate анҷом дода мешавад, барои дигар тақсимотҳо ба шумо лозим меояд, ки ҷузвдонҳои бастаи стандартии TexLive-ро барои системаи худ Google ҷустуҷӯ кунед.

Насб кардани TexLive

Албатта, шумо метавонед танҳо қисмҳои зарурии ин бастаро насб кунед. Аммо шахсан, ман ошкоро хеле танбал будам, ки ҳадди ақали насби кории заруриро ҷустуҷӯ кунам. Барои боварӣ ҳосил кардани ҳама чиз кор мекунад, тамоми бастаи TexLive -ро насб кунед. Он ном дорад texlive пур вазнаш каме бештар аз 2 гигабайт аст, ин фактро дар хотир доред. Мо фармонро иҷро мекунем:

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

Пас аз насби кофӣ тӯлонӣ, шумо метавонед ба банди оянда гузаред.

Насб кардани табдилдиҳандаи Pandoc

Pandoc як бастаи Linux аст, ки ба шумо имкон медиҳад, ки баъзе форматҳои матниро ба дигарон табдил диҳед. Он дорои бисёр хусусиятҳои ҷолиб аст, ки шумо метавонед худро дар Интернет пайдо кунед. Мо танҳо ба имкони табдил додани файли қайдкунӣ ба PDF манфиатдорем. Санҷед, ки оё Pandoc насб шудааст ва агар не, онро насб кунед. Масалан, чунин:

user@hostname:~$ dpkg -s pandoc

Агар баромад гӯяд, ки он насб нашудааст, насб кунед:

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

Насб кардани бастаи PSCyr барои TexLive

Аввалан шумо бояд PSCyr -ро зеркашӣ кунед. Дар айни замон он дар ин ҷо дастрас аст пайванд, агар ҳангоми хондани мақола он бо ягон сабаб дастрас набошад, ноумед нашавед, онро дар якҷоягӣ бо дастурҳои насбкунӣ бо навиштани чизе ба монанди "Насб кардани PsCyr texlive" дар Google пайдо кардан осон аст. Агар он дастрас бошад, пас барои шумо осонтар аст, зеркашӣ кунед ва мо фарз мекунем, ки шумо бойгониро ба ҷузвдони хонагии худ кушодаед ва аз ин рӯ роҳ ба ҷузвдони дар бойгонӣ мавҷудбуда чунин менамояд. ~/PSCyr. Сипас ба Терминал равед ва фармонҳои зеринро пайдарпай иҷро кунед:

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

Баъдан, бифаҳмед, ки директорияи маҳаллӣ дар куҷо ҷойгир аст textmf. Мо фармонро иҷро мекунем:

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

Эҳтимол, шумо ин феҳристро доред - /usr/local/share/texmf/, ва он гоҳ мо мекунем:

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

Хуб, ё шумо наметавонед парвое кунед ва фармонеро иҷро кунед, ки ба ҷузвдон нусхабардорӣ мекунад textmf ҳар ҷое ки вай бошад:

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

Шрифтҳои PSCyr насб карда шудаанд, ба TexLive пайваст шавед:

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

Шаблон LaTeX барои табдили md2pdf

Ман аниқ шарҳ намедиҳам, ки ин қолаб чӣ гуна танзим карда шудааст ва онро танҳо дар зери спойлер бидуни шарҳи зиёд медиҳам. Гуфтан кифоя аст, ки он хуб танзим карда шудааст, ҳадди аққал дар робита ба он ки чӣ тавр он матнҳоро бо коди зиёди сарчашма идора мекунад. Агар шумо аз андозаи абзорҳо, фосилаи сатрҳо, набудани рақамгузории бахшҳо ва зерфаслҳо қаноатманд набошед, пас ба андешаи ман, дар google саволро дар Интернет "чӣ гуна бояд дар Latex анҷом дод ..." хеле осон аст ва пас ниёзи шумо. Агар он тамоман равшан набошад, дар шарҳҳо нависед, ман кӯшиш мекунам, ки 4 сол пеш танзимоти шахсии худро омӯзам ва тавсиф кунам, ки кадом сатри қолаб барои чӣ масъул аст. Дар ҳамин ҳол, ман менависам, ки чӣ тавр ман инро дар компютери худ иҷро кардам ва шумо метавонед онро барои худ такрор кунед ё тағир диҳед.

Файл эҷод кунед template.tex дар каталог /usr/share/texlive/:

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

Ба он иҷозати хондан диҳед:

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

онро дар зери реша кушоед ва мундариҷаи дар зери спойлер пинҳоншударо ба он часпонед:

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

Мундариҷаи шаблон /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}

Захираи файл /usr/share/texlive/template.tex ва скрипте нависед, ки файли Makrdown-ро ба PDF табдил диҳад ва дар ҳамон ҷузвдон файлеро бо номи файли Markdown бо префикси .pdf эҷод кунед, яъне пас аз табдилдиҳӣ номи файл.md дар папка пайдо мешавад. номи файл.md.pdf. Биёед скриптро даъват кунем md2pdf ва ба роҳ гузоред / usr / bin. Биёед фармонҳоро пайдарпай иҷро кунем:

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

Сатри 4-ум воқеан фармони табдилро дар бар мегирад. диққат диҳед --from=markdown_github. Версияи GitHub-и Markdown бо Markdown-и аслӣ ба ақиб мувофиқ аст, бинобар ин, агар матни шумо дар он навишта шуда бошад, ба шумо лозим нест, ки хавотир шавед. Агар файли MD-и шумо бо лаҳҷаи мушаххаси Markdown навишта шуда бошад, пас дастури Pandoc (man pandoc), боварӣ ҳосил кунед, ки татбиқи шумо аз ҷониби он дастгирӣ карда мешавад ва тағир диҳед /usr/bin/md2pdf агар лозим бошад.

Скрипт барои насби худкор бештар ё камтар

Агар шумо аслан намехоҳед чизеро конфигуратсия кунед ва шумо тақсимоти ба Ubuntu монанд дошта бошед, шумо метавонед скриптро бо мундариҷаи дар зери спойлер пинҳоншуда эҷод кунед ва эҳтимолан ҳама чиз худаш насб мешавад, ягона чизест, ки нусхабардорӣ кунед. Шаблони TeX, ки дар зери спойлер дар боло ҷойгир шудаанд, дар ҳолати зарурӣ худашон. Терминалро кушоед ва иҷро кунед:

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

Сипас онро бо мундариҷаи зерин пур кунед:

Мундариҷаи скрипти $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

Онро бо фармон иҷро кунед:

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

Инро фаромӯш накунед /usr/share/texlive/template.tex бояд тавре пур карда шавад, ки дар фасли «Шаблон LaTeX барои табдили md2pdf» мундариҷа.

Истифодаи md2pdf

Танҳо папкаро бо файли Markdown кушоед (some_file.md) дар Терминал ва фармонро иҷро кунед:

user@hostname:~$ md2pdf some_file.md

Дар натиҷа, файл дар ҷузвдон пайдо мешавад some_file.md.pdf.

хулоса

Дар асоси усули тавсифшуда, шумо метавонед ҳама гуна услуби файлҳои PDF-ро созед, шумо инчунин метавонед форматҳои дигарро ба ҷои md табдил диҳед, ҳама гуна форматҳои аз ҷониби Pandoc дастгирӣшаванда. Умедворам, ки рӯзе ин дастур барои 3 ва ним нафар муфид хоҳад буд.

Манбаъ: will.com

Илова Эзоҳ