Penyelesaian markdown2pdf sedia dibuat dengan kod sumber untuk Linux

Perutusan

Penurunan harga ialah cara yang bagus untuk menulis artikel pendek, dan kadangkala teks yang agak panjang, dengan pemformatan mudah dalam bentuk condong dan fon tebal. Markdown juga bagus untuk menulis artikel yang mengandungi kod sumber. Tetapi kadang-kadang anda ingin memindahkannya ke dalam fail PDF biasa yang diformat dengan baik tanpa kehilangan, menari dengan tamborin, dan supaya tidak ada masalah semasa penukaran, yang, sebagai contoh, saya ada - anda tidak boleh menulis dalam bahasa Rusia dalam komen daripada kod sumber, baris terlalu panjang tidak dipindahkan, dan masalah kecil lain terputus. Arahan akan membolehkan anda menyediakan penukar dengan cepat md2pdf tanpa benar-benar mendalami cara ia berfungsi. Skrip untuk lebih kurang pemasangan automatik adalah di bawah dalam bahagian yang sepadan.

Contoh templat TeX saya untuk penukaran menggunakan pakej fon PSCyr, yang termasuk sokongan untuk fon Microsoft, iaitu Times New Roman. Ini adalah keperluan untuk diploma mengikut GOST. Jika anda tahu caranya, anda boleh mengubah suai templat untuk memenuhi keperluan anda. Dalam arahan saya, anda perlu bermain-main dengan menyediakan PSCyr dalam TexLive. Persediaan dilakukan dalam pengedaran Linux Mint Mate; untuk pengedaran lain, anda mungkin perlu google folder pakej TexLive standard untuk sistem anda.

Memasang TexLive

Sudah tentu, anda boleh memasang hanya bahagian pakej tertentu yang anda perlukan. Tetapi secara peribadi, saya terus terang terlalu malas untuk mencari pemasangan kerja minimum yang diperlukan. Untuk memastikan semuanya berfungsi dengan betul, kami memasang keseluruhan pakej TexLive. Ia dikenali sebagai texlive-penuh dan beratnya lebih sedikit daripada 2 gigabait, ingat fakta ini. Kami melaksanakan arahan:

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

Selepas pemasangan yang cukup lama, anda boleh meneruskan ke langkah seterusnya.

Memasang penukar Pandoc

Pandoc ialah pakej Linux yang membolehkan anda menukar beberapa format teks kepada yang lain. Ia mempunyai banyak ciri menarik yang boleh anda kenali di Internet. Kami hanya berminat dengan kemungkinan menukar fail penurunan nilai kepada PDF. Mari semak sama ada Pandoc dipasang dan jika tidak, pasangkannya. Contohnya seperti ini:

user@hostname:~$ dpkg -s pandoc

Jika output mengatakan bahawa ia tidak dipasang, pasangkannya:

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

Memasang pakej PSCyr untuk TexLive

Mula-mula anda perlu memuat turun PSCyr. Buat masa ini ia masih boleh didapati di ini pautan, jika pada masa membaca artikel itu tidak tersedia atas sebab tertentu, jangan putus asa, ia mudah dicari bersama-sama dengan arahan pemasangan dengan menaip sesuatu seperti "Memasang PsCyr texlive" ke dalam Google. Jika ia tersedia, maka lebih mudah untuk anda, muat turun dan kami akan menganggap bahawa anda telah membongkar arkib ke dalam folder rumah anda dan dengan itu laluan ke folder yang terkandung dalam arkib kelihatan seperti ~/PSCyr. Kemudian pergi ke Terminal dan laksanakan arahan secara berurutan:

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

Seterusnya kita akan mengetahui di mana direktori tempatan terletak texmf. Kami melaksanakan arahan:

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

Kemungkinan besar anda mempunyai direktori ini - /usr/local/share/texmf/, dan kemudian kami laksanakan:

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

Nah, atau anda tidak boleh mengganggu dan menjalankan arahan yang akan menyalinnya ke folder texmf di mana sahaja dia berada:

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

Fon PSCyr dipasang, sambung ke TexLive:

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

Templat LaTeX untuk penukaran md2pdf

Saya tidak akan menerangkan bagaimana tepatnya templat ini dikonfigurasikan, dan hanya akan membentangkannya di bawah spoiler tanpa banyak penjelasan. Cukuplah untuk mengatakan bahawa ia dikonfigurasikan dengan baik, sekurang-kurangnya dalam cara ia memproses teks dengan banyak kod sumber. Sekiranya anda tidak berpuas hati dengan saiz inden, jarak baris, kekurangan penomboran bahagian dan subseksyen, maka pada pendapat saya agak mudah untuk Google soalan "bagaimana melakukan dalam Lateks ..." dan kemudian keperluan anda. Jika ia benar-benar tidak jelas, tulis dalam ulasan, saya akan cuba menyelidiki tetapan saya sendiri dari 4 tahun yang lalu dan menerangkan baris mana templat bertanggungjawab untuk apa. Sementara itu, saya akan menerangkan cara saya melakukannya pada PC saya, dan anda bebas untuk mengulangi atau mengubah suainya untuk disesuaikan dengan diri anda.

Buat fail template.tex dalam katalog /usr/share/texlive/:

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

Kami memberinya kebenaran membaca:

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

buka sebagai akar dan tampal ke dalamnya kandungan yang tersembunyi di bawah spoiler di bawah:

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

Kandungan templat /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}

Simpan fail /usr/share/texlive/template.tex dan tulis skrip yang akan menukar fail Makrdown kepada PDF, mencipta dalam folder yang sama fail yang dipanggil fail Markdown dengan awalan .pdf, iaitu selepas penukaran nama fail.md akan muncul dalam folder nama fail.md.pdf. Mari kita panggil skrip md2pdf dan letakkan di sepanjang jalan / usr / bin. Mari kita laksanakan arahan secara berurutan:

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

Baris ke-4 sebenarnya mengandungi arahan penukaran. Beri perhatian kepada --from=markdown_github. Versi GitHub bagi Markdown adalah serasi ke belakang dengan Markdown asal, jadi jika teks anda ditulis di dalamnya, anda tidak perlu risau. Jika fail MD anda ditulis dalam dialek khusus Markdown, kemudian baca manual Pandoc (man pandoc), pastikan pelaksanaan anda disokong olehnya, dan tweak /usr/bin/md2pdf jika perlu.

Skrip untuk lebih kurang pemasangan automatik

Jika anda tidak benar-benar mahu mengkonfigurasi apa-apa sama sekali, dan anda mempunyai pengedaran seperti Ubuntu, anda boleh cuba mencipta skrip dengan kandungan tersembunyi di bawah spoiler, dan kemungkinan besar semuanya akan dipasang sendiri, hanya salin templat TeX disiarkan di bawah spoiler di atas di mana anda memerlukannya sendiri. Buka Terminal dan jalankan:

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

Kemudian isi dengan kandungan berikut:

Kandungan skrip $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

Jalankannya dengan arahan:

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

Jangan lupa itu /usr/share/texlive/template.tex mesti diisi seperti yang ditunjukkan dalam bahagian β€œTemplat LaTeX untuk penukaran md2pdf" kandungan.

Menggunakan md2pdf

Hanya buka folder dengan fail Markdown (some_file.md) di Terminal, dan jalankan arahan:

user@hostname:~$ md2pdf some_file.md

Akibatnya, fail akan muncul dalam folder some_file.md.pdf.

Kesimpulan

Berdasarkan kaedah yang diterangkan, anda boleh membina sebarang gaya fail PDF; anda juga boleh menukar format lain, mana-mana yang disokong oleh Pandoc, bukannya md. Saya berani berharap suatu hari nanti arahan ini berguna kepada 3 setengah orang.

Sumber: www.habr.com

Tambah komen