Pandoc ve Docker ile Yayın Zinciri Oluşturun
Yayınlanan: 2022-03-11Bugün, profesyonellerin sağlam ve uygulaması kolay bir yayın zinciri oluşturmak için Pandoc'un yardımından nasıl yararlanabileceklerine daha yakından bakacağız. Pandoc, kullanıcıların gereksinimlerine bağlı olarak belgeleri çeşitli biçimlere dönüştürmelerine olanak tanıyan son derece basit ama güçlü bir araçtır.
Belgelemeyi ve yayınlamayı büyük ölçüde basitleştirebilir ve hatta birkaç yeni otomasyon olanağının kapısını açabilir. Hepsinden iyisi, Pandoc Git dostu Markdown'a güveniyor, bu da belgeleriniz için herhangi bir ek güçlük çekmeden bir sürüm kontrol sistemi uygulayabileceğiniz anlamına geliyor.
Zahmetten bahsetmişken, Pandoc ve LaTeX'i basit bir çekme ile kurmak için bir Docker görüntüsüne güveneceğiz. Yazılım yüklemek zaman alıcı olabilir ve yeni bir projeye başlarken çalışan bir yazılım ortamını sıfırdan kurmak pek verimli değildir. Docker, kullanıcıların platformdan bağımsız olarak her şeyi dakikalar içinde kurmalarına izin vererek bu sorunları azaltmaya yardımcı olur.
Ek olarak, işverenlerin kendi bilgisayar donanımınızı sağlamanızı istemesi alışılmadık bir durum değildir. Bu genellikle Kendi Cihazını Getir (BYOD) olarak adlandırılır ve COVID-19 pandemisinin evden çalışmayı çok daha yaygın hale getirdiğini unutmayalım. Docker gibi çözümler olmadan Windows, macOS ve Linux gibi çeşitli donanım ve işletim sistemlerinde çalışan uygulamaları desteklemek zor olurdu.
Pandoc'a geçmeden önce Docker kapsayıcılarına ve görüntülerine daha yakından bakarak başlayalım.
Kurtarmaya giden liman işçisi
Docker kapsayıcılarının kullanılması, yeni bir makineye birden çok yazılım uygulaması yükleme ihtiyacını ortadan kaldırabilir. Çok sayıda uygulama için önceden oluşturulmuş Docker görüntüleri Docker Hub'da mevcuttur. AWS, Azure ve Google gibi önde gelen bulut sağlayıcılarının tümü, kapsayıcı kayıtları sağlar. GitLab ve Red Hat OpenShift dahil olmak üzere birçok başka üçüncü taraf kayıtları vardır.
Bir görüntünün çoğu (tümü olmasa da) uygulamalar için mevcut olması muhtemeldir. Bu, çoğu uygulamayı ve bağımlılıklarını yüklemenin gerekli olmadığı anlamına gelir. Uygulama basitçe bir Docker kapsayıcısında çalıştırılabilir. Bu, farklı donanım ve farklı işletim sistemlerinde uygulamaları çalıştıran ekip üyeleriyle ilgili sorunları kolayca ortadan kaldırır. Aynı görüntü, onları çalıştırabilen herhangi bir sistemde kapsayıcıları çalıştırmak için kullanılabilir ve Docker uzmanları bu süreci son derece hızlı ve verimli hale getirebilir.
Pandoc Kullanım Örneği: Belgeler
Belgeler birkaç farklı formatta gerekli olabilir. Aynı belgenin sunumlar için HTML ve dinleyici notları için PDF gibi farklı biçimlerde mevcut olması gerekebilir. Dosya biçimleri arasında dönüştürme yapmak sıkıcı olabilir ve çok zaman alabilir. Tek bir doğru kaynağı olan bir yayın zincirine sahip olmak iyi bir çözümdür. Tüm belgeler aynı dilde yazılmalıdır. Sürümü ve Git depolarında saklanması daha kolay olduğu için metin tabanlı bir dil olmalıdır.
Markdown, tek bir hakikat kaynağı yaratmak için iyi bir seçimdir. Markdown belgelerini çeşitli başka biçimlere dönüştürebilen yazılımlar hazırdır ve güvenilir olma eğilimindedir.

pandok
Pandoc, belgeleri farklı biçimlere dönüştürebilen bir yazılım paketidir. Özellikle, Markdown'ı HTML, PDF ve diğer yaygın olarak kullanılan biçimlere dönüştürebilir. Dönüştürme işlemi, Markdown kaynağındaki şablonlar ve meta veriler kullanılarak özelleştirilebilir.
Pandoc, PDF dosyaları oluşturmak için bir LaTeX kurulumu gerektirir. Pandoc ve LaTeX'i kurmak oldukça zaman alıcıdır. Neyse ki, Docker dışında herhangi bir şey yükleme ihtiyacını ortadan kaldıran pandoc/lateks adlı bir Docker görüntüsü var.
Docker Komutları
Gerekli yazılımı içeren uygun bir Docker görüntüsünün bulunması veya oluşturulması gerekir. İndirme biraz zaman alabileceğinden, resmi yerel kayıt defterine çekmeniz önerilir.
docker pull pandoc/latex
Bir Docker kapsayıcısında bir komut çalıştırmak için, Docker kapsayıcısını çalıştırmak ve kapta bir komut yürütmek için bir sarmalayıcı gerekir. Buna iyi bir çözüm, bir macOS veya UNIX/Linux sistemine bir kabuk işlevi yazmaktır. İşlev, herhangi bir oturum açma komut dosyasına veya $HOME/.functions
gibi ayrı bir dosyaya yerleştirilebilir. Aynı işlevselliğe sahip bir komut dosyası veya takma ad yazmak da mümkündür.
function pandoc { echo pandoc $@ docker run -it --rm -v $PWD:/work -w /work pandoc/latex pandoc "$@" }
Bu işlev aşağıdakileri yapar:
- Komutu ekrana yazdırır.
-
pandoc/latex
görüntüsünden bir Docker kapsayıcı çalıştırır. -
-it
seçeneği, etkileşimli bir terminal oturumu oluşturur ve komutun çıktısını görünür kılar. -
--rm
seçeneği, komut sonlandırıldığında kapsayıcıyı siler. -
-v $PWD:/work
seçeneği, ana bilgisayardaki geçerli dizini kapsayıcıdaki/work
dizinine bağlar. -
-w /work
, kaptaki/work
dizinini çalışma dizini yapar. - Son
pandoc "$@"
, işleve iletilen tüm komut satırı seçeneklerini ileten kapsayıcıdapandoc
komutunu çalıştırır.
Bir kabuk veya komut dosyasının işlevi belleğe yüklemesi gerekir.
. $HOME/.functions
İşlev artık kendi başına bir komuttur ve pandoc
ikili dosyası yerel olarak kurulmuş gibi davranır. Bu yaklaşım, bir Docker görüntüsünde bulunan herhangi bir komut için kullanılabilir.

HTML'ye İşaretleme
Markdown'ı HTML'ye dönüştürmek için Markdown'da bir şablon ve meta veri kullanmak daha iyidir.

Markdown Meta Verileri
Markdown kaynağı, isteğe bağlı meta verilere sahip olabilen bir başlık bölümüne sahip olabilir. Meta veriler, anahtar/değer çiftleri şeklini alır. Değerler HTML şablonunda değiştirilebilir.
--- title: Document title links: prev: index next: page002 ...
Başlık, yalnızca üç tire içeren bir satırla başlar ---
. Sadece üç nokta içeren bir çizgi ile sonlandırılır ...
. Anahtarlar, ardından iki nokta üst üste ve değeri gelen tek sözcüklerdir. Anahtarlar yuvalanabilir. Örnek, title, links.prev
ve links.next
adlı anahtarların tanımını gösterir.
Bu yaklaşım, her sayfa için ayrı bir dosya kullanır. Örnekte, önceki sayfa index.md
, mevcut sayfa page001.md
ve sonraki sayfa page002.md
. Uygulamada, sayfaları yeniden sıralamayı ve eklemeyi kolaylaştırmak için daha anlamlı dosya adları kullanılacaktır.
HTML Şablonu
Bir HTML şablonu basitçe bir HTML dosyasıdır. Dolar sembolleri arasına meta veri ikamesi ve basit kontrol yapıları eklenebilir. Pandoc için basit bir HTML şablonu örneği:
<html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>$title$</title> <link href="../css/style.css" type="text/css" rel="stylesheet" /> </head> <header> <h1>$title$</h1> </header> <body> $body$ </body> <footer> $if(links.prev)$ <a href="$links.prev$.html" class="previous">« Previous</a> $endif$ $if(links.next)$ <a href="$links.next$.html" class="next">Next »</a> $endif$ </footer> </html>
Örnek bir şablon gösterir. $body$
, HTML'ye dönüştürülen Markdown metniyle değiştirilir. Koşullu ifadeler, yalnızca meta veriler Markdown başlığında tanımlanmışsa HTML bağlantısını oluşturur.
Markdown'dan HTML Oluşturma
Pandoc'a sadece girdi ve çıktı dosyalarının ne olarak adlandırıldığını ve ayrıca herhangi bir şablon dosyasının söylenmesi gerekiyor. Varsayılan girdi dosyası biçimi Markdown'dur . Belirtilen çıktı dosyası uzantısından çıktı dosyası biçimini çıkarabilir.
Çıktı oluşturma komutları bir komut dosyası veya bir makefile olabilir.
dir=Project for input_file in ${dir}/*.md do output_file=HTML/${input_file%.md}.html if [[ ${input_file} -nt ${output_file} ]] then pandoc --data-dir . --template presentations.html -t html \ -o ${output_file} ${input_file} fi done
Project
dizinindeki her .md
dosyası için, çıktı dosyası giriş dosyasından daha eskiyse veya mevcut değilse, HTML/Project
dizininde karşılık gelen bir .html
dosyası oluşturur.
Markdown'dan Beamer PDF Oluşturma
Beamer, sunumlar üretmek için bir LaTeX paketidir. Çıktı bir PDF slayt gösterisidir.

Aynı Markdown kaynak dosyaları, beamer PDF'sini oluşturmak için kullanılabilir.
pandoc -t beamer -o PDF/Project.pdf -V theme:Boadilla -V colortheme:whale Project/index.md Project/page000.md
Komut ayrıntıları şunlardır:
-
-t beamer
seçeneği, PDF'yi oluşturmak için LaTeX ve beamer'ı kullanın diyor. -
-o
seçeneği çıktı dosyasını belirtir. -
-V
seçenekleri, projektör temasını ve renk temasını seçer. - Komut, verilen sırayla birleştirilecek olan Markdown dosyalarının bir listesi ile sona erer.
Tüm işlemler bir Docker kapsayıcısında gerçekleştirilir.
PDF'ye İşaretleme
Bir Markdown belgesini bir PDF belgesine dönüştürmek de oldukça basittir. PDF her zaman önce Markdown'ı LaTeX'e dönüştürerek oluşturulur. Kağıt boyutunu ve kenar boşluğu boyutunu ayarlamak gibi çıktıyı özelleştirmek için Markdown başlığına meta veriler eklenebilir.
--- title: Title of document papersize: a4 geometry: - margin=20mm ...
Markdown'dan PDF Oluşturma
Markdown'ı PDF'ye dönüştürme komutu basittir:
pandoc -s Project/outline.md -o PDF/ProjectOutline.pdf
-s seçeneği, bağımsız bir belge oluşturur.
Çözüm
Artık yazılım yüklemek için günler harcamanıza gerek yok. Basitçe bir Docker kapsayıcısında bir komut çalıştırmak, kurulum ihtiyacını ortadan kaldırır. Birçok uygulamanın Docker Hub'da uygun Docker görüntüleri vardır. Yazılımın güncellenmesi gerekiyorsa, en son Docker görüntüsünü çekmeniz yeterlidir.
Yeni bir bilgisayar kurmak sadece Docker'ı kurmak, gerekli görüntüleri çekmek ve birkaç komut dosyası oluşturmak meselesidir.
Artık farklı formatlarda belgeler oluşturmaya gerek yok. Tüm belgeler için Markdown gibi tek bir format kullanılabilir. Pandoc gibi araçlar daha sonra Markdown'dan çok sayıda farklı formatta belgeler oluşturabilir.
Markdown bir metin dosyası olduğundan, Git deposuna teslim edildiğinde tam sürüm geçmişi mevcuttur. Git depoları ayrıca Markdown'ı otomatik olarak işler ve insanların belge dosyasının kendisinde dağınık değişiklik geçmişlerini kullanmak zorunda kalmadan değişiklikler hakkında yorum yapmasına izin verir.