Іншими мовами — рос.

Вступ

Іноді хочеться роздрукувати якийсь ман, щоб почитати, не ламаючи очі монітором. Усі маніпуляції з перенаправлениями виведення команди 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";