Іншими мовами — рос.
Вступ
Іноді хочеться роздрукувати якийсь ман, щоб почитати, не ламаючи очі монітором. Усі маніпуляції з перенаправлениями виведення команди man мене не влаштували, оскільки втрачалося форматування, виділення тощо. Хотілося, щоб man був, приміром, у PDF.
Реалізація
Якщо почитати (поки ще з монітора :)) опис man, то можна знайти наступне:
-t Використовуйте /usr/bin/groff -Tps -mandoc для форматування сторінки довідки, із виведенням на типовий вивід. Можливо, вивід з /usr/bin/groff -Tps -mandoc буде необхідно пропустити через деякий фільтр перед друком.
Саме те, що потрібно. Адже будь-який постскрипт можна сконвертировать в PDF і купу інших форматів.
man -t emerge
На типовому виході зможемо прочитати отриманий постскрипт. :) Проте нас це не влаштовує. Тому:
man -t emerge > ~/emerge.man.ps
Отримаєм файл emerge.man.ps. Залишилося лише сконвертувати його в PDF. Робиться це за допомогою програми ps2pdf.
ps2pdf ~/emerge.man.ps emerge.man.pdf
Отрили бажане, а саме: PDF файл із збереженим форматуванням. Усе б добре, але отриманий PDF буде зі сторінкою формату letter. А хотілося б A4. Для виправлення формату папери редагуємо файл /etc/man.conf. Знайдемо рядок
TROFF /usr/bin/groff -Tps -mandoc
і замінимо його на
TROFF /usr/bin/groff -Tps -dpaper=a4 -P-pa4 -mandoc
Наново створимо постскрипт файл, а потім сконвертируем його в PDF, але вже на сторінку A4.
man -t emerge > emerge.man.ps && ps2pdf emerge.man.ps
Невеликий скрипт
Для зручності користування:
#!/usr/bin/perl -w
my $source;
if($ARGV[0]) {
$source = $ARGV[0];
}
else {
print "Usage: man2pdf manFile\n"; exit(0);
}
#Тимчасовий файл
my $tmp = "/tmp/man2pdf.$source";
#Шлях і формат назви вихідного PDF-файла.
my $fName = "/data/pdf/man_$source.pdf";
print "Converting man: $source\n";
system("man -t $source > $tmp");
system("ps2pdf $tmp $fName");
system("rm $tmp");
print "Output: $fName\n";