Предговор
Markdown е прекрасен начин за написване на кратка статия, а понякога и достатъчно обемист текст, с несложен формат като курсив и удебелен шрифт. Също така Markdown е полезен за писане на статии, включващи изходен код. Но понякога искаме без загуби, и без усложнения да го конвертираме в обикновен, добре оформен PDF файл, и за да няма проблеми при конвертирането, каквито, например, имах аз — не може да се пише на руски в коментарите на изходния код, твърде дългите редове не се пренасят, а се отрязват и други дребни проблеми. Инструкцията ще позволи бързо да настроите конвертора md2pdf не особено разбирам как работи. Скрипт за по-автоматизирана инсталация по-долу в съответния раздел.
Моят пример TeX шаблон за конвертиране използва пакета шрифтове PSCyr, който включва поддръжка на Microsoft шрифтове, а именно Times New Roman. Такива бяха изискванията за дипломата по ГОСТ. Ако можете, можете да модифицирате шаблона според вашите нужди. В моята инструкция ще се наложи предварително да се поморочите с настройката на PSCyr в TexLive. Настройката се извършва в дистрибуцията Linux Mint Mate, за другите дистрибуции, може би, ще трябва да потърсите стандартните папки на пакета TexLive за вашата система.
Инсталация на TexLive
Разбира се, можете да инсталирате само необходимите части от този пакет. Но личната ми причина е, че ме мързеше да търся минимално необходимата работеща инсталация. За да работи всичко безпроблемно, инсталираме целия пакет TexLive. Неговото име е texlive-full и тежи малко над 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Инсталация на пакета PSCyr за TexLive
Първо трябва да изтеглим 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 mktexlsrLaTeX шаблон за конвертиране md2pdf
Няма да описвам как точно е настроен този шаблон и просто ще го предоставя под спойлера без особени обяснения. Достатъчно е да се каже, че е настроен доста добре, поне що се отнася до начина, по който обработва текстове с множество изходен код. Ако не сте доволни от размерите на отстъпите, междустрочните интервали, отсъствието на номерация на разделите и подразделите, на мое мнение, е достатъчно лесно да се намери в интернет, като зададете въпрос „как в LaTeX да направя…“ и след това вашата необходимост. Ако нещо не е ясно, пишете в коментарите, ще се опитам да се задълбоча в собствените си настройки отпреди 4 години и да опиша коя редица от шаблона за какво отговаря. Досега ще опиша как направих аз на своя PC, а вие можете да го повторите или модифицирате по свой вкус.
Създайте файл 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,bulgarian,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 и пишем скрипт, който ще конвертира Markdown файл в 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. 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 и половина души.
Източник: habr.com
