Ситуация, вероятно, известная
Я знаю, что размер страницы 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
об этой (электронной) бумаге.