Linux үчүн баштапкы код менен даяр markdown2pdf чечими

сөздөр

Markdown - курсив жана жоон шрифт түрүндөгү жөнөкөй форматтоо менен кыска макаланы, кээде өтө узун текстти жазуунун эң сонун жолу. Markdown булак кодун камтыган макалаларды жазуу үчүн да жакшы. Бирок кээде сиз аны кадимки, жакшы форматталган PDF файлына жоготуусуз, дап менен бийлеп, конвертациялоодо эч кандай көйгөйлөр болбошу үчүн өткөргүңүз келет, мисалы, менде болгон - комментарийлерде орусча жаза албайсыз. баштапкы коддон өтө узун саптар өткөрүлбөйт жана башка майда көйгөйлөр өчүрүлөт. Көрсөтмөлөр конверторду тез орнотууга мүмкүндүк берет md2pdf анын кантип иштээрин такыр изилдебестен. Аздыр-көптүр автоматтык орнотуу үчүн скрипт төмөндө тиешелүү бөлүмдө.

Конвертациялоо үчүн менин мисалдагы TeX шаблонум Microsoft шрифттерин колдоону камтыган PSCyr шрифт пакетин колдонот, атап айтканда Times New Roman. Бул ГОСТ боюнча дипломго коюлган талаптар эле. Кантип экенин билсеңиз, шаблонду муктаждыктарыңызга ылайыкташтыра аласыз. Менин көрсөтмөмдө, сиз алгач TexLive ичинде PSCyr орнотуу менен алектенишиңиз керек. Орнотуу Linux Mint Mate дистрибьюторунда жасалат; башка бөлүштүрүүлөр үчүн сиз системаңыз үчүн стандарттуу TexLive пакет папкаларын Google'дан издешиңиз керек болушу мүмкүн.

TexLive орнотулууда

Албетте, сиз берилген пакеттин сизге керектүү бөлүктөрүн гана орното аласыз. Бирок жекече, мен минималдуу талап кылынган жумушчу орнотууну издөөгө жалкоо болдум. Баары туура иштеши үчүн, биз TexLive пакетин толугу менен орнотобуз. деп аталат texlive-толук жана салмагы 2 гигабайттан бир аз көбүрөөк, бул чындыкты эстен чыгарбаңыз. Биз буйрукту аткарабыз:

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

Жетиштүү узак орнотуудан кийин, кийинки кадамга өтсөңүз болот.

Pandoc конвертер орнотуу

Pandoc - бул кээ бир текст форматтарын башкаларга которууга мүмкүндүк берген Linux пакети. Анын көптөгөн кызыктуу өзгөчөлүктөрү бар, алар менен Интернеттен тааныша аласыз. Бизди Markdown файлын PDFке айландыруу мүмкүнчүлүгү гана кызыкдар. Келгиле, Pandoc орнотулганын текшерип көрөлү, эгерде орнотулбаса, аны орнотуңуз. Мисалы, бул сыяктуу:

user@hostname:~$ dpkg -s pandoc

Чыгуу ал орнотулган эмес деп айтса, аны орнотуңуз:

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

TexLive үчүн PSCyr пакетин орнотуу

Алгач сиз PSCyr жүктөп алышыңыз керек. Азырынча бул жерде дагы эле жеткиликтүү байланыш, макаланы окуп жаткан учурда кандайдыр бир себептерден улам ал жеткиликтүү болбосо, үмүт үзбөңүз, Google'га "PsCyr texlive орнотуу" сыяктуу нерсени терүү менен орнотуу нускамалары менен бирге оңой табууга болот. Эгер ал жеткиликтүү болсо, анда сизге жеңилирээк, аны жүктөп алыңыз жана сиз архивди үй папкаңызга ачканыңыз деп ойлойбуз, андыктан архивде камтылган папкага баруучу жол төмөнкүдөй көрүнөт: ~/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

Андан кийин биз жергиликтүү каталог кайда жайгашканын билебиз texmf. Биз буйрукту аткарабыз:

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

Кыязы, сизде бул каталог бар - /usr/local/share/texmf/, анан биз аткарабыз:

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

Ооба, же сиз убара болуп, аны папкага көчүрө турган буйрукту иштете албайсыз texmf ал кайда болбосун:

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

md2pdf конверсиясы үчүн LaTeX үлгүсү

Мен бул шаблондун кантип конфигурацияланганын сүрөттөп бербейм жана аны көп түшүндүрбөстөн спойлердин астында сунуштайм. Анын жакшы конфигурацияланганын, жок эле дегенде, көптөгөн баштапкы коддору бар тексттерди иштетүүдө деп айтуу жетиштүү. Эгерде сизди чегинүүлөрдүн өлчөмү, сап аралыктары, бөлүмдөрдүн жана бөлүмдөрдүн номерлеринин жоктугу канааттандырбаса, анда менин оюмча, 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

root катары ачып, ага төмөндөгү спойлердин астында катылган мазмунду чаптаңыз:

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 жана Макрdown файлын PDFке айландыра турган скрипт жазыңыз, ошол эле папкада Markdown файлы деп аталган .pdf префикси бар файлды түзүңүз, башкача айтканда конвертациядан кийин filename.md папкада пайда болот filename.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. Markdown'дун GitHub версиясы түпнуска 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 бөлүмүндө көрсөтүлгөндөй толтурулушу керек.md2pdf конверсиясы үчүн LaTeX үлгүсү» мазмуну.

md2pdf колдонуу

Жөн гана Markdown файлы бар папканы ачыңыз (some_file.md) Терминалда жана буйрукту иштетиңиз:

user@hostname:~$ md2pdf some_file.md

Натыйжада, папкада файл пайда болот some_file.md.pdf.

жыйынтыктоо

Сүрөттөлгөн ыкманын негизинде сиз PDF файлдарынын каалаган стилин кура аласыз; md ордуна Pandoc тарабынан колдоого алынган башка форматтарды да которсоңуз болот. Бир күнү бул нускама 3 жарым адамга пайдалуу болот деп үмүттөнөм.

Source: www.habr.com

Комментарий кошуу