Como posso definir dimensões de página para um documento CWEB?

Como posso definir dimensões de página para um documento CWEB?

Tenho um arquivo CWEB e quero alterar as dimensões da página. Eu sei como fazer isso em um documento TeX simples e sempre funcionou bem para mim. Se eu fizer o mesmo (alterando o tamanho, os deslocamentos, etc.) no arquivo CWEB, ficarei completamente confuso com as margens e o posicionamento.

Quero ter saída em papel A4. As dimensões finais da página são definidas pelo meu pdftex como A4, então esse não é o problema. O problema é que o CWEB é feito para saída em papel carta, então a cópia não fica centralizada, por exemplo.

Tentei procurar uma solução no Stanford Graphbase de Knuth, já que é um monte de programas CWEB publicados em formato de livro, então ele deve ter feito algo para alterar as dimensões da página. As fontes que ele disponibiliza na internet, porém, são feitas para produção de cartas, portanto não ajudam em nada. Alguma ideia?

Até agora, adicionei o seguinte código ao início do arquivo CWEB (a propósito, esse código funciona em um arquivo TeX simples):

\newdimen\pagewidth   \pagewidth=210mm
\newdimen\pageheight  \pageheight=297mm

\hsize=13cm

\hoffset=\pagewidth
\advance\hoffset by-\hsize
\hoffset=.5\hoffset
\advance\hoffset by-1in

\voffset=\pageheight
\advance\voffset by-\vsize
\voffset=0.5\voffset
\advance\voffset by-1in

Responder1

Isso está documentado no manual CWEB (que você pode abrir invocando texdoc cwebo que abre um arquivo DVI, ouler como PDF on-line), emApêndice C: Como usar macros CWEB(página 25), ponto 4.

O truque é que depois de definir qualquer um \pagewidth(padrão 6,5 pol.), \pageheight(padrão 8,7 pol.) ou \fullpageheight(padrão 9 pol.), você precisa dizer \setpage:

Se você alterar qualquer uma dessas quantidades, deverá chamar a macro \setpage imediatamente após fazer a alteração.


Exemplo: Se você baixarlp.wde Knuthpágina de programas para download, e run cweave lp.w, você obtém um lp.tex, que processado com tex lp.tex(or pdftex lp.tex) fornece o seguinte como primeira página:

lp-padrão

Se você mudar o topo lp.texde

\input cwebmac
\datethis

para

\input cwebmac
\pagewidth=3.25in % The default is 6.5in
\pageheight=4.35in % The default is 8.7in
\fullpageheight=4.5in % The default is 9in
\setpage
\datethis

(dividindo tudo pela metade), então (se você não alterar o tamanho do papel pdf) você obterá o seguinte:

lp dividido pela metade


Especificamente para papel A4, se você quiser manter a mesma margem do papel carta (o que pode não fazer muito sentido, mas é uma opção), você pode alterar o \input cwebmacna parte superior do .texarquivo para (se estiver usando pdftex) :

\input cwebmac
\pdfpagewidth=210mm
\pdfpageheight=297mm
\pagewidth= 159.2mm % The default is 6.5in for 8.5in width, so for A4 this is 210mm - 2in
\pageheight=238.58mm % The default is 8.7in for 11in height, so for A4 this is 297mm - 2.3in
\fullpageheight=246.2mm % The default is 9in for 11in height, so for A4 this is 297mm - 2in
\setpage

Se você quiser manter o layout (a largura do texto, as quebras de linha, etc.) igual ao do papel carta, mas em vez disso aperte e centralize-o no papel A4 (como sugerido na resposta de Igor), então é claro o que você precisa fazer não é nada específico cwebmace você pode usar o mesmo bloco de código em qualquer lugar: você pode simplesmente ajustar \pdfhorigin: o padrão é 1in(=(8,5 pol. - 6,5 pol.)/2). Basta adicionar isto no topo do seu arquivo e não alterar mais nada:

\pdfpagewidth=210mm
\pdfpageheight=297mm
\pdfhorigin=\dimexpr (210mm-6.5in)/2
\pdfvorigin=\dimexpr (297mm-9in)/2

informação relacionada