Как изменить размер страницы PDF-файла, созданного с помощью plain-TeX?

Как изменить размер страницы PDF-файла, созданного с помощью plain-TeX?

Ситуация, вероятно, известная

Я знаю, что размер страницы pdf можно изменить с LaTeXпомощью пакета geometry. Но как это сделать в plain-TeX?

Например, изменение параметров, связанных со страницей, таких как \vsizeили \hoffset, вносит изменения, но, похоже, не затрагивает формат бумаги, записанный в PDF-файле, в данном случае 8,27 x 11,69 дюймов.

% setting (some) page parameters
\vsize 3in
\pagegoal \vsize
\hsize 4in
\hoffset 2in
\topskip 1.5in


\headline{My head \hrulefill}\footline{\hrulefill Your foot - \the\pageno}

Lorem ipsum dolor sit amet consectetuer nibh enim congue porta vel. Commodo hendrerit pellentesque Curabitur quis consectetuer Integer laoreet ante adipiscing aliquet. Congue condimentum tempus lorem nec leo et semper Aliquam senectus augue. Dolor massa vitae Nullam Sed est dignissim penatibus tellus orci Aliquam. Nulla sed iaculis aliquet massa ipsum Nullam id ipsum vitae sapien. Consequat Vestibulum Ut id morbi Aliquam lobortis Fusce Lorem at platea. Nibh.

Justo elit montes nulla justo at quis nascetur diam Morbi Phasellus. Vestibulum enim Vestibulum semper Curabitur consequat ante penatibus quis ut auctor. Vestibulum nunc Aliquam interdum non wisi congue nec interdum Sed orci. Sed Nam consequat enim non sem dignissim vitae eleifend mauris mauris. Curabitur enim ligula massa orci aliquam ac Phasellus semper id tortor. Magna.

Vitae laoreet lorem Nulla Nunc Nunc nunc convallis nibh venenatis Vivamus. Curabitur laoreet felis congue interdum condimentum augue at condimentum id Aliquam. Suspendisse adipiscing velit ipsum ipsum Ut Aenean pellentesque consequat enim et. 

\bye

размер страницы

результат

Вопрос

Как решить эту проблему? Не мог найти ответ здесь, в книгах или в сети в течение нескольких дней. Я использую текущий TexWorks от MikTeX, компилирую с помощью pdftex.

решение1

TeX (по замыслу Кнута) не имеет понятия о размере страницы. Печать или просмотр всегда были работой драйверов DVI.

Единственным исключением является то, что по указу Кнута все водителидолженучитывать начало координат, которое находится на расстоянии одного дюйма от левого края и одного дюйма от верхнего края бумаги, независимо от того, какая бумага (возможно, только виртуальная бумага на экране) в конечном итоге используется.

Поскольку pdftexэто собственный драйвер, необходимо передать ему желаемый размер бумаги, и он предоставляет несколько примитивов для этой работы:

  • \pdfpagewidthи \pdfpageheightявляются основными;
  • \pdfhoriginи \pdfvoriginследующие.

Предположим, вы хотите, чтобы ширина страницы составляла 10 дюймов, а высота — 9 дюймов, при этом верхний левый угол текстового блока располагался на расстоянии 3 дюймов от левого и верхнего краев.

\pdfpagewidth=10truein
\pdfpageheight=9truein
\pdfhorigin=3truein
\pdfvorigin=3truein

\hsize=4truein
\vsize=3truein

\input plipsum

\lipsum{3-7}

\bye

введите описание изображения здесь

Извините за длину в сантиметрах, но, знаете ли, ими пользуются почти все.

решение2

Я рекомендую, чтобы \pdfhoriginи \pdfvoriginбыли установлены 0ptдля того, чтобы задать контрольную точку в левом верхнем углу бумаги. Затем вы можете установить \hoffsetи \voffsetкак поля, измеряемые от границы бумаги, вам не нужно включать расчет +-1in в ваши макросы, и жизнь становится проще. И \pdfpagewidthдолжны \pdfpageheightбыть установлены на реальную ширину и высоту бумаги.

Например, если вы хотите, чтобы все поля были 2 см при формате бумаги А4, то вы можете задать:

\pdfhorigin=0pt  \pdfvorigin=0pt % We don't support a sub-optimal Knuth's decision about (1in, 1in)

\pdfpagewidth=210mm  \pdfpageheight=297mm  % A4 paper dimensions

\hoffset=2cm
\voffset=2cm
\hsize=\dimexpr \pdfpagewidth - 2\hoffset \relax
\vsize= \dimexpr \pdfpageheight - 2\voffset \relax

Обратите внимание, что OpTeX устанавливает \pdfhoriginи \pdfvoriginв 0pt, поскольку положение опорной точки (1in,1in) просто раздражает.

решение3

Решение

Решение уже (почти) есть: компиляция с помощью pdftex. Согласно егоРуководство пользователявсе, что нужно сделать, это добавить необходимое pdf-primitives:

% setting pdf-page parameters  <<<<<< new
\pdfoutput 1
\pdfpageheight 5in
\pdfpagewidth 8in

% setting (some) page parameters
\vsize 3in
\pagegoal \vsize
\hsize 4in
\hoffset 2in
\topskip 1.5in


\headline{My head \hrulefill}\footline{\hrulefill Your foot - \the\pageno}

Lorem ipsum dolor sit amet consectetuer nibh enim congue porta vel. Commodo hendrerit pellentesque Curabitur quis consectetuer Integer laoreet ante adipiscing aliquet. Congue condimentum tempus lorem nec leo et semper Aliquam senectus augue. Dolor massa vitae Nullam Sed est dignissim penatibus tellus orci Aliquam. Nulla sed iaculis aliquet massa ipsum Nullam id ipsum vitae sapien. Consequat Vestibulum Ut id morbi Aliquam lobortis Fusce Lorem at platea. Nibh.

Justo elit montes nulla justo at quis nascetur diam Morbi Phasellus. Vestibulum enim Vestibulum semper Curabitur consequat ante penatibus quis ut auctor. Vestibulum nunc Aliquam interdum non wisi congue nec interdum Sed orci. Sed Nam consequat enim non sem dignissim vitae eleifend mauris mauris. Curabitur enim ligula massa orci aliquam ac Phasellus semper id tortor. Magna.

Vitae laoreet lorem Nulla Nunc Nunc nunc convallis nibh venenatis Vivamus. Curabitur laoreet felis congue interdum condimentum augue at condimentum id Aliquam. Suspendisse adipiscing velit ipsum ipsum Ut Aenean pellentesque consequat enim et. 

\bye

Теперь размер страницы составляет 8 x 5 дюймов, как и указано.

размер

результат

Фон

Эта проблема действительно хорошо известна и не нова. См. например этот вопрос ополя страницы с 2013 года для нескольких компиляторов TeX, особенно комментарии.

Эта загадка, вероятно, существует потому, что в настоящее время мы привыкли ассоциировать «печатную область» с «размером бумаги». Это обоснованное предположение для текстового процессора, использующего офисный или домашний принтер, который большую часть времени использует бумагу формата Letter или A4.

Однако TeXон был разработан с учетом набора текста, или, точнее, способа, которым Гутенберг, Китай, задолго до него и др. создали печатную бумагу.

Это значит, что у вас есть печатный блок (как набранный q или n, который будет перемещен под блок с меткой h на "Рис.1 Печатный станок"), которая примерно содержит область (и немного больше) между заголовком и нижним колонтитулом, показанными выше. Координаты на наборе, так сказать, указываются там параметрами TeX, такими как \vsizeили \hoffset, и его алгоритмами размещения.

Размер бумаги, напротив, может быть известен или неизвестен до фактической печати, и он, безусловно, должен быть больше, и будет разрезан на более мелкие части позже. Подумайте о том, как pdf-primitivesзаботиться pdftexоб этой (электронной) бумаге.

Связанный контент