Giải pháp markdown2pdf làm sẵn với mã nguồn cho Linux

lời tựa

Markdown là một cách tuyệt vời để viết một bài báo ngắn và đôi khi khá nhiều văn bản, với định dạng in nghiêng và in đậm đơn giản. Markdown cũng tốt cho việc viết bài có mã nguồn đi kèm. Nhưng đôi khi bạn muốn nhảy một cách dễ dàng với một tambourine để biến nó thành một tệp PDF thông thường, được định dạng tốt và để không gặp vấn đề gì trong quá trình chuyển đổi, chẳng hạn như tôi đã có - bạn không thể viết bằng tiếng Nga bằng tiếng Nga các chú thích của mã nguồn, các dòng quá dài không được chuyển, nhưng bị cắt và các vấn đề nhỏ khác. Hướng dẫn sẽ cho phép bạn nhanh chóng thiết lập bộ chuyển đổi md2pdf mà không thực sự hiểu nó hoạt động như thế nào. Kịch bản cài đặt ít nhiều tự động nằm bên dưới trong phần thích hợp.

Mẫu TeX mẫu của tôi để chuyển đổi sử dụng gói phông chữ PSCyr, bao gồm hỗ trợ cho các phông chữ của Microsoft, cụ thể là Times New Roman. Có những yêu cầu như vậy đối với bằng tốt nghiệp theo GOST. Nếu bạn biết cách, bạn có thể sửa đổi mẫu cho phù hợp với nhu cầu của mình. Theo hướng dẫn của riêng tôi, trước tiên bạn sẽ phải loay hoay với cài đặt PSCyr trong TexLive. Việc thiết lập được thực hiện trong bản phân phối Linux Mint Mate, đối với các bản phân phối khác, bạn có thể phải tìm trên google các thư mục gói TexLive tiêu chuẩn cho hệ thống của mình.

Cài đặt TexLive

Tất nhiên, bạn chỉ có thể cài đặt những phần cần thiết của gói này. Nhưng cá nhân tôi, thành thật mà nói, tôi quá lười biếng để tìm kiếm cài đặt hoạt động cần thiết tối thiểu. Để đảm bảo mọi thứ hoạt động, hãy cài đặt toàn bộ gói TexLive. Nó được gọi là texlive-đầy đủ và nặng hơn 2 gigabyte một chút, hãy ghi nhớ điều này. Chúng tôi thực hiện lệnh:

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

Sau khi cài đặt đủ lâu, bạn có thể chuyển sang mục tiếp theo.

Cài đặt Bộ chuyển đổi Pandoc

Pandoc là một gói Linux cho phép bạn chuyển đổi một số định dạng văn bản sang các định dạng khác. Nó có rất nhiều tính năng thú vị mà bạn có thể tự tìm kiếm trên Internet. Chúng tôi chỉ quan tâm đến khả năng chuyển đổi tệp đánh dấu thành PDF. Kiểm tra xem Pandoc đã được cài đặt chưa và nếu chưa, hãy cài đặt nó. Ví dụ như thế này:

user@hostname:~$ dpkg -s pandoc

Nếu đầu ra nói rằng nó chưa được cài đặt, hãy cài đặt:

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

Cài đặt gói PSCyr cho TexLive

Trước tiên, bạn cần tải xuống PSCyr. Hiện tại nó vẫn có sẵn tại đây liên kết, nếu tại thời điểm đọc bài viết mà nó không có sẵn vì một lý do nào đó, đừng tuyệt vọng, bạn có thể dễ dàng tìm thấy nó cùng với hướng dẫn cài đặt bằng cách gõ một cái gì đó như “Cài đặt PsCyr texlive” trên Google. Nếu nó có sẵn, thì bạn sẽ dễ dàng hơn, hãy tải xuống và chúng tôi sẽ cho rằng bạn đã giải nén kho lưu trữ vào thư mục chính của mình và do đó, đường dẫn đến thư mục chứa trong kho lưu trữ trông giống như ~/PSCyr. Sau đó vào Terminal và thực hiện tuần tự các lệnh sau:

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

Tiếp theo, tìm xem thư mục cục bộ nằm ở đâu texmf. Chúng tôi thực hiện lệnh:

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

Rất có thể bạn có thư mục này - /usr/local/share/texmf/, và sau đó chúng tôi làm:

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

Chà, hoặc bạn không thể bận tâm và chạy một lệnh sẽ sao chép vào một thư mục texmf dù cô ấy ở đâu:

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

Đã cài đặt phông chữ PSCyr, kết nối với TexLive:

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

Mẫu LaTeX để chuyển đổi md2pdf

Tôi sẽ không mô tả chính xác cách cấu hình mẫu này và sẽ chỉ đưa nó vào phần giới thiệu mà không cần giải thích nhiều. Chỉ cần nói rằng nó được cấu hình tốt, ít nhất là về cách nó xử lý các văn bản có nhiều mã nguồn. Nếu bạn không hài lòng với kích thước thụt lề, khoảng cách dòng, thiếu đánh số các phần và tiểu mục, thì theo tôi, bạn có thể dễ dàng tra google câu hỏi trên Internet “cách thực hiện trong Latex…” và sau đó nhu cầu của bạn. Nếu nó không rõ ràng, hãy viết bình luận, tôi sẽ cố gắng đi sâu vào cài đặt của chính mình 4 năm trước và mô tả dòng nào của mẫu chịu trách nhiệm cho việc gì. Trong thời gian chờ đợi, tôi sẽ viết ra cách tôi đã làm trên PC của mình và bạn có thể tự mình lặp lại hoặc sửa đổi nó.

Tạo một tập tin mẫu.tex trong danh mục /usr/share/texlive/:

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

Cấp cho nó quyền đọc:

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

mở nó dưới thư mục gốc và dán nội dung ẩn dưới spoiler bên dưới vào đó:

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

Nội dung mẫu /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}

Lưu tệp /usr/share/texlive/template.tex và viết một tập lệnh sẽ chuyển đổi tệp Makrdown thành PDF, tạo trong cùng một thư mục một tệp có tên là tệp Markdown có tiền tố .pdf, nghĩa là sau khi chuyển đổi tên tệp.md sẽ xuất hiện trong thư mục. tên tệp.md.pdf. Hãy gọi kịch bản md2pdf và lên đường / usr / bin. Hãy thực hiện các lệnh theo thứ tự:

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

Dòng thứ 4 thực sự chứa lệnh chuyển đổi. chú ý đến --from=markdown_github. Phiên bản GitHub của Markdown tương thích ngược với Markdown gốc, vì vậy nếu văn bản của bạn được viết trong đó, bạn không phải lo lắng. Nếu tệp MD của bạn được viết bằng một phương ngữ Markdown cụ thể, hãy đọc hướng dẫn sử dụng Pandoc (man pandoc), đảm bảo rằng việc triển khai của bạn được nó hỗ trợ và điều chỉnh /usr/bin/md2pdf Nếu cần.

Tập lệnh để cài đặt ít nhiều tự động

Nếu bạn thực sự không muốn định cấu hình bất cứ thứ gì và bạn có một bản phân phối giống Ubuntu, bạn có thể thử tạo một tập lệnh có nội dung ẩn dưới spoiler và rất có thể mọi thứ sẽ tự cài đặt, điều duy nhất là sao chép các mẫu TeX đăng dưới spoiler trên để các bạn cần mình. Mở Terminal và chạy:

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

Sau đó điền vào nó với nội dung sau:

Nội dung của tập lệnh $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

Chạy nó bằng lệnh:

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

Không được quên điều đó đấy /usr/share/texlive/template.tex phải được điền như được chỉ ra trong phần "Mẫu LaTeX để chuyển đổi md2pdf" nội dung.

Sử dụng md2pdf

Chỉ cần mở thư mục có tệp Markdown (some_file.md) trong Terminal và chạy lệnh:

user@hostname:~$ md2pdf some_file.md

Kết quả là một tệp sẽ xuất hiện trong thư mục some_file.md.pdf.

Kết luận

Dựa trên phương pháp được mô tả, bạn có thể tạo bất kỳ kiểu tệp PDF nào, bạn cũng có thể chuyển đổi các định dạng khác thay vì md, bất kỳ định dạng nào được Pandoc hỗ trợ. Tôi dám hy vọng rằng một ngày nào đó hướng dẫn này sẽ hữu ích cho 3 người rưỡi.

Nguồn: www.habr.com

Thêm một lời nhận xét