Журнал LinuxFormat - перейти на главную

LXF97:Препринт

Материал из Linuxformat
Перейти к: навигация, поиск
Препринт

Содержание

Переходим на офсет

ЧАСТЬ 3 В прошлый раз мы рассмотрели особенности печати книги на ризографе. Настало время добиться наивысшего качества. В этом нам поможет офсетная печать и Александр Чернышов.

Вопреки распространённому убеждению, коего я сам до недавнего времени придерживался, что офсет — это дорого и только для избранных, на деле всё оказалось значительно интереснее. Если вам надо качественно напечатать книгу тиражом более 300 экземпляров, то имеет смысл поискать офсетную типографию и попросить, чтобы вам посчитали стоимость тиража вашей книги. Обычно услуга эта бесплатная.

Многие типографии «дерут» высокие цены. Но при желании и везении вполне можно найти недорогую офсетную типографию. Так мне однажды повезло с типографией в Москве: книга в качественном жёстком переплёте, тиражом 500 экземпляров, в которой было почти 800 страниц (без цветных иллюстраций), обошлась меньше чем по 300 рублей за экземпляр, что я считаю очень неплохим показателем.

Что же касается качества, то офсет — это как раз тот случай, когда все положительные свойства TeX’а проявляются оптимальным образом. В конце концов, именно для подобных технологий печати тиражей TeX и создавался. Так что — осваиваем офсет.

Формат бумаги

Вы, вероятно, будете удивлены применением в типографиях собственных стандартов размеров бумаги. Вместо «А4» и «А5», вам назовут что-то вроде «60x90/8» и «60x90/16». Кстати, «промежуточный» формат большинства книг по программированию имеет здесь своё стандартное обозначение: «70x100/16» (читается «семьдесят на сто в шестнадцатую долю»).

Дело в том, что офсетная машина печатает сразу целый печатный лист. Это большой лист бумаги, на котором напечатаны все страницы одной книжной тетради. Причём лист, запечатанный только с одной стороны, называется оттиском, а с обеих сторон — собственно печатным листом. Первые две цифры (например, 70x100) описывают размер печатного листа в сантиметрах.

Далее лист фальцуют (складывают) в несколько раз, получая сразу тетрадку книги. Её теперь остаётся только прошить и обрезать. Параметр доли как раз и определяет, сколько страниц текста будет напечатано на одном печатном листе. Так, /16 означает, что на оттиске будет 16 страниц, а на печатном листе (и в одной тетрадке книги) — 32 страницы.

Между прочим, именно в силу этого вы должны обеспечить, чтобы количество страниц в вашей книге было кратным 16 (я не ошибся — по технологическим причинам именно 16). По счастью, в TeX’е можно слегка «поиграть» параметрами междустрочного интервала (\baselineskip, \lineskiplimit, \lineskip) и добиться желаемого. Лишь в редких случаях приходится поступать «по старинке» и выбрасывать «лишний» материал либо дописывать «недостающий».

При подготовке вёрстки в TeX’е важно правильно задать формат гранки. Исходите из того, что после фальцовки на обрезку с каждой стороны уйдёт примерно по 1-1,5 см. Прикиньте, какие вам бы хотелось оставить в книге поля, где у вас будет располагаться колонцифра. Можно просто замерить линейкой гранку в готовой книге подходящего формата. В конце концов вы получите два числа, которые надо задать как \hsize и \vsize.

Спуск

Чтобы после фальцовки все страницы в тетрадке следовали в нужном порядке, их надо правильно расположить на каждом печатном листе. Процесс этого расположения называется спуском. В принципе, в современном Linux есть средства, позволяющие выполнить спуск самостоятельно (мы рассмотрим эту возможность позже), но обычно в этом нет необходимости. В большинстве случаев типография делает спуск сама.

Печать плёнок

А вот теперь переходим к самому интересному. Любой офсет начинается с плёнок. Именно «в плёнках» затем делают спуск и дальнейший процесс от нас уже не зависит. Как только плёнки взяты типографией в работу, можете мыть руки, чтобы не испачкать ими сигнальные экземпляры.

Однако, качество результата в наибольшей степени зависит именно от качества вывода плёнок. А здесь от нас зависит очень многое.

В зависимости от типографии вам могут предложить:

  • принести свои плёнки (и вам придётся печатать их самостоятельно);
  • изготовить плёнки по вашему файлу на оборудовании типографии.

Рассмотрим каждый из этих вариантов.

…В типографии

–«...и тут пошли огрехи всей системы...»
Из монолога Жванецкого

Вообще, этот вариант на мой взгляд предпочтительнее. Типография, предлагая его, обычно «имеет за душой» довольно мощное печатающее устройство (2400, или даже 4800 dpi). В результате итоговое качество будет соответствовать непревзойдённому металлическому набору. И к этому надо стремиться. Тем более что в арсенале нашего TeX’а имеется возможность делать шрифты разрешением аж до 9600 dpi! Только узнайте о возможностях устройства заранее и постарайтесь подготовить свой электронный оригинал-макет с соответствующим разрешением. Например:

dvips -D 2400 ..... -o file.ps file.dvi

При работе программы dvips обращайте внимание на все предупреждения о генерации шрифтов! Иногда встречаются шрифты со скрытыми ошибками, а также для некоторых букв в некоторых шрифтах случаются банальные переполнения программы metafont. Это приводит к потере букв и даже целых участков текста, набранных забракованным шрифтом, или к непредсказуемым заменам. Бороться с этим можно только понижением разрешения или переходом на векторные шрифты (скажем, CM-Super — мы обсудим их чуть позже).

Ключ -O не нужен — окончательное расположение материала в спуске всё равно делается вручную. Главное, чтобы печатаемый материал в принципе попадал в зону печати. И ключ -x тоже не нужен. Для офсетной печати вывод всегда делается в масштабе 1:1.

Казалось бы, после получения file.ps все проблемы должны быть сняты. Но оказывается, что это не всегда так — подробности читайте во врезке.

…И самостоятельно

Этот вариант может показаться дешевле, но для получения высокого качества потребует от вас учёта дополнительных факторов, которые мы сейчас и обсудим.

Сначала о принтерах. Годятся только лазерные. Чем выше разрешение принтера, тем лучше. Настоящего профессионального качества в «домашних» условиях, конечно, не добиться, но если вы найдёте лазерный принтер с разрешением 1200 dpi, понимающий PostScript и с новым (не перезаправленным!) картриджем, да ещё с барабаном в пределах заводского ресурса, то вам крупно повезло — вы сможете получить плёнки почти профессионального качества.

Если принтер не понимает PostScript, то придётся использовать GhostScript (в Linux), либо переводить оригинал-макет в PDF и печатать из Adobe Reader (в Windows). Это способно очень сильно увеличить время вывода каждой страницы при высоком разрешении печати. Для ускорения можно попытаться использовать векторные шрифты вместо стандартных, но это далеко не всегда возможно.

Помните также, что желательно настроить metafont на растеризацию шрифтов именно для вашей модели принтера!

Своенравный ps2pdf

Мне надо было напечатать на офсете книгу, вёрстка которой была рассчитана на формат 70x100/16 (размер страницы не кратен А4). Типография бралась сама изготовить плёнки по моему file.ps. Но вдруг обнаружилось, что их специализированная программа управления принтером плёнок упорно считает, что каждая страница моей книги расположена на листе А4. Это приводило к значительному перерасходу дорогостоящей плёнки.

Переплачивать за плёнку не хотелось, и я решил поискать решение. Первое, что пришло на ум – ключ -T команды dvips, задающий (вроде бы) размер листа. Но этот способ проблемы не решил.

Второе решение – «правильно» установить параметр BoundingBox – оказалось вообще несостоятельным. Дело в том, что этот «параметр» на самом деле записывается в комментариях файла PostScript и используется только программами типа TeX, которые сами PostScript не интерпретируют. Профессиональные же программы, интерпретирующие PostScript, комментарии игнорируют.

Проблема оказалась в том, что размер листа вообще не попадал в мою вёрстку, и по умолчанию интерпретатор PostScript принимал его равным А4. Решение проблемы следующее:

  1. Размер листа надо задавать внутри верстаемого документа (в его начале) командой
    \special{papersize=WIDTH,HEIGHT}
    где вместо WIDTH и HEIGHT подставить необходимые значения. В моём случае команда выглядела так
    \special{papersize=164mm,235mm}
    После этого получить DVI-файл обычным способом.
  2. Найти в системе файл конфигурации драйвера dvips config.ps. Найти в нём определение формата печати
    @ unknown 0in 0in
    Если это определение есть, то вам повезло. Если же его там нет, создайте в домашнем подкаталоге файл .dvipsrc со следующим содержимым:
    @ unknown 0in 0in @+ statusdict /setpageparams known { hsize vsize 0 1 statusdict begin { @+ setpageparams } stopped end } { true } ifelse { statusdict / setpage known @+ { hsize vsize 1 statusdict begin { setpage } stopped pop end } if } if
  3. Теперь можно переводить вёрстку в PostScript:
    dvips -D 2400 -t unknown -O 0.5cm,0cm -o file.ps file.dvi
    Параметр -O в данном случае нужен именно для того, чтобы попасть в зону печати.

Попутно выяснилось, что проверить правильность выполненной работы довольно легко, «не выходя» из Linux. Достаточно скомандовать:

ps2pdf file.ps file.pdf

и далее

gv file.pdf

В этом случае просмотр осуществляется по действительным размерам страницы, заданным непосредственно в PS-программе.

Векторные шрифты

Технология, используемая в шрифтах TeX, иногда приводит к неприятностям. Итоговые шрифты остаются растровыми, и при попытке их генерации для больших разрешений metafont иногда переполняется (не хватает длины его разрядной сетки). То есть, используя технологию metafont, эти шрифты получить в высоком полиграфическом качестве невозможно.

Поэтому сообщество пользователей TeX постоянно предпринимает усилия в направлении использования в TeX векторных аналогов применяемых шрифтов. Отрадно, что в последнее время уделили, наконец, внимание и кириллическим шрифтам.

На данный момент разработан и постепенно проникает «в массы» пакет шрифтов под названием CM-Super. В стандартные дистрибутивы Linux он, кажется, пока не входит, но его можно взять из сети Интернет (CTAN:fonts/ps-type1/cm-super или ftp://ftp.vsu.ru/pub/tex/font-packs/cm-super) и попытаться поставить в своей системе.

Инструкция по установке, идущая в комплекте с пакетом, не совсем верная. Но с помощью Ивана Чернявского мне удалось заставить работать этот пакет на своей системе.

Пакет включает полный комплект векторных шрифтов, позволяющий заменить все основные «стандартные» шрифты TeX. Причём шрифты идентичны со своими аналогами по метрике, так что при их замене вёрстка не «уплывает». После его установки для пользователей LaTeX не меняется (теоретически) вообще ничего (если только в вёрстке не используются «нестандартные» для LaTeX шрифты). Пользователям же plain TeX придётся привыкать к новым именам шрифтов — так, вместо lhr10 придётся теперь писать larm1000. А заодно придётся «передвинуть» по кодам некоторые русские знаки, например «номер».

Вообще, пакет оставил приятное впечатление. Получающийся PostScript просто идеален: хорошо конвертируется в PDF, просматривается Acrobat и печатается. При этом для нас очень важно, что теперь он вообще не зависит от разрешения принтера! Правда, и жирностью мы теперь управлять не можем: растеризация этих шрифтов — дело самого принтера.

Однако все эти прелести работают, только если в документе не используются нестандартные шрифты. Например, если вы верстаете книгу по шахматным партиям и используете макропакет chess, то шрифты этого макропакета всё равно будут растровыми.

Если же ваши нестандартные шрифты ещё и русские буквы содержат (а вы эти буквы используете), то у вас могут возникнуть проблемы и похуже — дело в том, что внутренние кодировки шрифтов семейства lh (стандартных для большинства русификаций teTeX), а также других шрифтов на их базе и шрифтов CM-Super различаются. В результате совмещать эти шрифты в одной вёрстке нельзя.

Снова о плёнках

Теперь осталось обсудить собственно процесс вывода.

В зависимости от принятой в типографии технологии, вас попросят изготовить либо прозрачные плёнки, либо полупрозрачные (иногда их называют кальками). Технология печати в обоих случаях немного различается, но сэкономить всё равно не удастся, так как, независимо от формата вашей книги, печатать вы будете в масштабе 1:1 на формате А4. Посему постарайтесь центрировать свои страницы на плёнке. Ширина остающихся белых полей играет очень большую роль. Без полей плёнки невозможно будет закрепить в спуске. А лишние поля в типографии просто обрежут.

  • Прозрачные плёнки.
    Здесь всё просто. Печать выполняется точно так же, как на бумаге. Весь процесс уже описан раньше, и больше рассказывать нечего.
  • Полупрозрачные плёнки.
    Здесь вывод надо выполнить в зеркальном отражении. Для этого надо добавить в итоговый документ PostScript программу зеркального разворота.

В состав современных установок teTeX входит файл mirr.hd, содержащий эту программу. Применяется он так (искать его не надо — если он есть, программа dvips должна найти его сама):

dvips -hmirr.hd [другие ключи] -o file.ps file.dvi

Вот и всё!

Делаем спуск сами

Повторю ещё раз: вам вряд ли это понадобится. Но технология может пригодиться для других целей [например — верстки «книжкой» и печати на обычном лазерном принтере методички, автореферата или даже одного из многочисленных руководств texinfo, — прим. ред.].

Вся работа выполняется командой pstops, обычно входящей в пакет psutils, существующий практически в любом дистрибутиве Linux. Вообще-то её основное предназначение — пересортировка страниц в готовом документе PostScript, но и разложить несколько страниц на большом листе она тоже может.

Ключей командной строки у команды не так много, и они достаточно хорошо описаны в man.

Самая сложная часть команды — описание раскладки страниц (pagespec).

Вот как она представлена в документации:

pagespec = [modulo:]specs specs = spec[+specs][,specs] spec = [-]pageno[L][R][U][@scale][(xoff,yoff)]

В этом описании:

  • modulo (модуль) — количество страниц на одном листе (блоке), включая те, которые на данном проходе просто пропускаются, например, для печати на обратной стороне.
  • spec — описание вывода и расположения на листе одной страницы с номером pageno (по модулю modulo, то есть pageno должен иметь значение от 0 до modulo-1).
  • xoff и yoff задают смещение страницы на листе, допускается указание величины смещения в сантиметрах (cm), дюймах (in) или в специальных единицах w и h, соответствующих ширине и высоте страницы (их размеры должны быть заданы ключами командной строки).
  • Параметры L, R и U задают поворот страницы влево, вправо и вверх ногами; точкой поворота считается левый нижний угол страницы.
  • scale задаёт масштабирование страницы и для наших целей не нужен.
  • Знак минус задаёт реверсивный порядок вывода страниц.

Параметры, объединённые знаком +, описывают расположение страниц на одном листе, объединённые через запятую — на разных (это может пригодиться, если у вас двухсторонний принтер).

Ключевым к нашей цели будет следующий пример:

4:2U(1w,2h)+0(0w,0h)

В нём мы взяли первый и третий из каждых четырёх листов документа и разместили третий лист над первым, причём перевернули его вверх ногами. Теперь переходим к собственно спуску.

Вообще говоря, порядок страниц в спуске зависит от многих факторов. Поэтому приводимый ниже пример носит демонстрационный характер. Реальное расположение страниц в спуске вы всегда должны определять на месте.

Выполним спуск в шестнадцатую долю (/16). При этом в одной тетради будет 32 страницы. Расположим страницы на первом оттиске так:

17 16 9 24 32 1 8 25 29 4 5 28 20 13 12 21

а на втором оттиске (с учётом печати на противоположной стороне!) так:

23 10 15 18 26 7 2 31 27 6 3 30 22 11 14 19

В обеих раскладках в первой и третьей строках страницы должны быть перевёрнуты вверх ногами.

Чтобы выполнить раскладку, подготовим два вспомогательных файла. Первый назовём pages.first (весь файл — одна строка!):

32:16U(1w,4h)+15U(2w,4h)+8U(3w,4h)+23U(4w,4h)+31(0w,2h)+0(1w,2h)+7(2w,2h)+24(3w,2h)+28U(1w,2h)+3U(2w,2h)+4U(3w,2h)+27U(4w,2h)+19(0w,0h)+12(1w,0h)+11(2w,0h)+20(3w,0h)

второй — pages.second (опять — одна строка!):

32:22U(1w,4h)+9U(2w,4h)+14U(3w,4h)+17U(4w,4h)+25(0w,2h)+6(1w,2h)+1(2w,2h)+30(3w,2h)+26U(1w,2h)+5U(2w,2h)+2U(3w,2h)+29U(4w,2h)+21(0w,0h)+10(1w,0h)+13(2w,0h)+18(3w,0h)

Теперь, чтобы выполнить спуски для всех первых оттисков, достаточно дать команду

pstops -h... -w... `cat pages.first` file.ps first.ps

и в файле first.ps будут находиться последовательные листы первых оттисков всех печатных листов. Обратите внимание, что необходимо задать правильные значения -h и -w — они должны быть равны размеру одной страницы с полями, причём с запасом на фальцовку и обрезку.

Вторые оттиски могут быть получены командой

pstops -h... -w... `cat pages.second` file.ps second.ps

Просмотреть результат можно командой gv, например,

gv first.ps

при этом весь лист можно увидеть только на формате А0, который в конфигурации программы по умолчанию закрыт. Разрешите его, отредактировав файл /etc/X11/app-defaults/GV (с правами root), а затем выберите в меню форматов запущенной программы.

Приведённый пример имеет целый ряд недостатков. Во-первых, в правильном спуске поля между страницами у корешка и у обреза разные, а у нас они одинаковые, так что для реального применения промежуточные файлы с раскладкой придётся доработать. Во-вторых, не согласован порядок следования оттисков в файлах first.ps и second.ps. Но для печати плёнок это не имеет значения: формы всё равно получают раздельно. В-третьих, если количество страниц в книге кратно 16, но не кратно 32, одна тетрадь должна будет иметь половинную толщину (обычно это третья от конца книги тетрадь). Наш пример этого не учитывает. Но, опять же, при желании его можно доработать, написав дополнительные промежуточные файлы раскладок.

Наконец, самое важное. При перекладке страниц программа немного переписывает исходный код PostScript в документе, в результате чего заданный в документе истинный размер страницы (который мы выше вставили с таким трудом) будет завуалирован и не сможет правильно распознаться. При этом размер листа, на котором выполняется спуск, в документ вставлен не будет. А для профессиональных программ печати это уже проблема.

Ее можно решить исправлением итогового PS-файла вручную. Я приведу упрощённый пример, имеющий под собой реальную основу. Итак, плёнки моей книги формата 70x100/16 выводили на машине, имевшей ширину печати сразу в три моих страницы. Переложить страницы для этого случая было довольно просто (реально использованная команда):

pstops -h 235mm -w 164mm ‘3:0(0w,0h)+1(1w,0h)+2(2w,0h)’ infile.ps ofile.ps

Далее файл ofile.ps был открыт обычным текстовым редактором и в нём были сделаны следующие изменения:

  1. увеличена втрое ширина (точнее, правая граница листа) в %%BoundingBox (конкретно, с 465 до 1395);
  2. символами % закомментирована строка с /setpagedevice и следующая за ней (именно она снова заставляет интерпретатор PostScript работать с листом А4, а у нас свой размер страницы);
  3. в строке (найти поиском) TeXDict begin 30580752 43819980 1000 600 600 …….. первое число (как раз ширина листа) заменено втрое большим (91742256).

Теперь преобразованный документ готов к печати на плёнке.

Предварительную проверку результата можно выполнить, как и ранее:

ps2pdf ofile.ps ofile.pdf
gv ofile.pdf

Если на одном широком листе видны все три страницы в ряд, значит, всё сделано правильно.

Вот, пожалуй, и всё, что мне хотелось рассказать сегодня.

Happy TeX’ing!

Персональные инструменты
купить
подписаться
Яндекс.Метрика