使用“布局”和“tikz”包可视化正确的页面长度?

使用“布局”和“tikz”包可视化正确的页面长度?

我目前正在使用xelatex/fontspec和 tikz 进行一个项目,因此,这个示例与布局包使用 tikz/fontspec/xelatex 将所有长度读取为零?

基本上,我正在尝试排版一些文本 - 然后使用该包在与“纸张尺寸”右上角对齐的节点layouts 中绘制页面的可视化效果(tikz而不是“页面”,它指的是页面边缘的空间……嗯……:))。问题是 - 对于 A4 尺寸,一切似乎都按预期工作;但当切换到 A5 时,事情似乎很奇怪。

这是为 A4 页面制定的 MWE (test.tex),并使用以下方式编译xelatex test.tex

\documentclass[12pt,a4paper]{article}

\usepackage[pass]{geometry}
\usepackage{tikz,enumitem}

\usepackage{fix-cm}

\usepackage{fontspec}
\defaultfontfeatures{Ligatures=TeX}
\setmainfont{Junicode}

\usepackage{layouts}

\usepackage{etoolbox}
\patchcmd{\drawpage}{\ifdrawparameters}{\iftrue}%
  {\typeout{^^J*******\string\drawpage fixed*******^^J}}%
  {\typeout{^^J*******\string\drawpage not fixed*******^^J}}

\usepackage{lipsum}



\begin{document}


\lipsum[1]

Trying

some

text



\begin{tikzpicture}[overlay,remember picture,inner sep=0pt,yscale=-1,outer sep=0pt,anchor=north west]

  \begin{scope}[shift={(0pt,0pt)}]% layer1

  %\path[..] (0,0) node[below right] (dbg) {% this goes to (0,0) - but after margin
  %\path[..] (current page.north west) node[below right] (dbg) {% this goes to (0,0) - but before margin; that is, upper right corner of paper size

  \path[anchor=north west] (current page.north west) node[below right] (dbg) {%
      \begin{minipage}{\paperwidth}%
        \setlayoutscale{1} % {1} for A4; {0.7} for A5
        %
        \printparametersfalse % do not print table of parameters at end; no effect on \drawpage
        \printheadingsfalse % do not print the "The circle is at 1 inch from the ... " headings; works only for \pagedesign
        \drawdimensionstrue %
        %
%           \trypaperwidth{\paperwidth}
%           \trypaperheight{\paperheight}
%           \tryhoffset{\hoffset}
%           \tryvoffset{\voffset}
%           \tryoddsidemargin{\oddsidemargin}
%           \tryevensidemargin{\evensidemargin}
%           \trymarginparwidth{\marginparwidth}
%           \trymarginparsep{\marginparsep}
%           \trymarginparpush{\marginparpush}
%           \trytopmargin{\topmargin}
%           \tryheadheight{\headheight}
%           \tryheadsep{\headsep}
%           \tryfootskip{\footskip}
%           \trytextheight{\textheight}
%           \trytextwidth{\textwidth}
%           \trycolumnsep{\columnsep}
%           \trycolumnseprule{\columnseprule}
        \currentpage % "collects together the page parameter settings for the current document for the page on which it is issued."
        \currentparagraph % "sets the drawing parameters to the settings for the current document."
%         \drawpage
        \pagedesign %
%         \pagediagram %
      \end{minipage}
  }%path
  ;

  \end{scope}

\end{tikzpicture}


\end{document}

请注意,上面我已经编写并注释了\try...命令,以记住这是\currentpage宏应该做的事情 - 并且还要记住,如果我在那里专门设置了长度,那么生成的页面布局图应该进行相应的修改(据我所知,layman.pdf, 那是

当这个文档被构建时(运行xelatex两次后),我得到以下pdf(点击图片查看完整尺寸):

现在,我不确定段落文本是否应该排版在\headsep标题下方的空间中 - 但除此之外,图表似乎是合理的。

好的,现在让我们将文档类别替换为 A5 纸张大小:

\documentclass[12pt,a5paper]{article}
...

...经过两次编译后,我们可以发现 pdf 中有些不对劲:

对我来说,看起来包装layouts仍然绘制了 A4 的尺寸和长度 - 即使页面现在应该更改为 A5!

所以,我想,好吧,我们也修改一下布局比例,这样我们现在就有了:

\documentclass[12pt,a5paper]{article}
...
        \setlayoutscale{0.7} % {1} for A4; {0.7} for A5
...

...编译两次后得到以下 PDF 结果:

同样,这看起来有点合理 - 但我已经“通过目测”手动缩放了尺寸,我不喜欢这样;并且文本超出了右正文边距,并且没有恰好从上正文边距开始。

最后,如果在这种情况下我尝试做一些非常明显的事,比如启用像那里的语句那样\tryheadheight{50pt}的语句\try..——标题的绘制高度绝对不会发生任何变化。

 

因此,如果有正确的方法使用该layouts包,以便我在这种情况下获得准确的长度可视化,我很想知道它 - 但我想,所有这些都应该告诉我,不幸的是,我实际上无法使用包获得尺寸的准确可视化layouts?有人可以确认吗?

在此先非常感谢大家的回答,
干杯!

答案1

这是您描述的不使用 TikZ 的版本。这表明您的问题在于您如何使用 tikz 内部的布局,而不是layouts它本身。

\documentclass[a4paper]{article}
\usepackage{layouts}
\usepackage{lipsum}
\begin{document}
\newdimen\dx \dx=1in \advance\dx\hoffset \advance\dx\oddsidemargin
\newdimen\dy \dy=1in \advance\dy\voffset \advance\dy\topmargin 
\advance\dy\headheight \advance\dy\headsep \advance\dy2.4\baselineskip
\moveright-\dx\vbox to 0pt{\vskip-\dy\leavevmode
   \printheadingsfalse \printparametersfalse
   \currentpage \setlayoutscale 1 \pagedesign \vss}
\noindent
\lipsum[1-3]
\end{document}

我使用了 TeX 原语来尝试使其保持简单并消除与其他包的可能交互。 \newdimen\dx创建一个新的维度变量dx,然后将其设置为 1in++ \hoffset\oddsidemargin对于 也类似dy。然后我们创建一个vbox来保存布局图,我们使用 将其移动到右侧\moverightvskip框顶部的 在顶部创建一些负空间,底部的\vss扩展以将内容向上推以填充负空间。整个框设置为 0pt,这样它就不会占用页面上的垂直空间。

请注意,处理此操作时,您将收到“overfull \hbox”错误。以下是a5paper顶部带有选项的输出。

示例布局

相关内容