我目前正在使用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
来保存布局图,我们使用 将其移动到右侧\moveright
。vskip
框顶部的 在顶部创建一些负空间,底部的\vss
扩展以将内容向上推以填充负空间。整个框设置为 0pt,这样它就不会占用页面上的垂直空间。
请注意,处理此操作时,您将收到“overfull \hbox”错误。以下是a5paper
顶部带有选项的输出。