Өөрийн дураар тохируулж чадах сервер, үнэгүй сайхан LaTeX програм байхад PDF баримт боловсруулдаг төлбөртэй API ашиглаад яах билээ. Ингээд шууд бичье гэхэд санаанд багтах ч монгол кирилл бичгийн хувьд асуудал байна бас шийдэл ч байна.

PHP дээрх код

title = 'Гарчиг';
$document->text = 'Монгол кирилл үсгээр бичсэн текст болон $$\frac{(x-1)^2}{2}+\frac{(y+2)^2}{3}=4$$ томьёо бүхий ийм нэг бичвэр оршвой.';

// LaTeX темплэйт

ob_start();
include 'latex-template.tex';
$latex = ob_get_contents();
ob_end_clean();

// Түр зуур ашиглах файл, түүний нэр болон агуулагч хавтас

$fname = tempnam(sys_get_temp_dir(), 'latex-document-');
$base = basename($fname);
$dir = dirname(realpath($fname));
rename($fname, $fname.'.tex');
$fname .= '.tex';

// LaTeX темплейтээр хэлбэржүүлсэн баримтынхаа агуулгыг файлд бичих

file_put_contents($fname, $latex);

// Файлд хандах эрх нээх, агуулагч хавтас уруу чиглүүлэх

shell_exec("chmod 777 $fname");
chdir($dir);

// Баримт боловсруулах тушаал дамжуулах

$console = shell_exec("sudo -u galaa /usr/bin/pdflatex -synctex=1 -interaction=nonstopmode {$base}");

\\ echo '
'; print_r($console); echo '
'; exit; $latexfile = $dir.DIRECTORY_SEPARATOR.$base.'.pdf'; if (file_exists($latexfile)) { header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="latex-document.pdf"'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($latexfile)); readfile($latexfile); } exit; ?>

LaTeX темплэйт

\documentclass[12pt]{article}

\usepackage[utf8x]{inputenc}
\usepackage[mongolian]{babel}

\usepackage[a4paper,margin=2cm]{geometry}

\begin{document}

\begin{center}
\textbf{\large title; ?>}
\end{center}

text; ?>

\end{document}

Бусад зүйл

  1. LaTeX програм суулгах
    sudo apt install texlive-full
  2. www-data хэрэглэгчийг TeX font metric уруу хандах боломжоор хангах
    Терминалаас sudo visudo командаар нээгдэх файлд дараах хоёр мөрийг нэмнэ.
    galaa ALL=(ALL) NOPASSWD: /usr/bin/pdflatex
    www-data ALL=(ALL) NOPASSWD: /usr/bin/pdflatex

АНХААР: Дээр хоёр ч удаа galaa (миний өөрийн үйлдлийн систем дэх хэрэглэгчийн нэр) гэснийг зохих хэрэглэгчийн нэрээр солино.

Төгсгөлд нь

Бэрхшээл юундаа байгаа вэ гэвэл монгол хэлний babel багц дуудах үед баримт дээр ямар ч текст гарахгүй болох, тодруулбал LaTeX програмын монгол хэл болон фонттой холбоотой хэсэг нь үйлдлийн системийн хэрэглэгчийн хувийн хавтас дотор сууснаас шалтгаалж www-data хэрэглэгч түүнд нь хандаж чадахгүй улмаар фонт олдоогүй тул LaTeX програм баримтыг бүрэн гүйцэд боловсруулахгүй байсан явдал юм. Үүнийг шийдэж болох хоёр янзын арга зам байснаас илүү хялбар бөгөөд дагавар асуудал гарахгүй гээд уг аргаар бэрхшээлээ шийдлээ.