定位文本区域的西北角

定位文本区域的西北角

我想找到文本区域西北角的准确位置。使用\layout(参见笔记部分),似乎所需的偏移量current page.north west

xshift=1.0in+\hoffset+\oddsidemargin,
yshift=-1.0in-\voffset-\headsep,

使用showframe包:(与 MWE 中一样)

下面的图片是文本区域的西北角,缩放到 6400%,我在这里放置了一个灰色+和填充的圆圈。从视觉上看,这看起来非常接近正确的位置。然而,要到达这个位置,需要对

(-0.35pt,2.35pt)%% Required shift to obtain image below (see MWE)

从上述参数可以看出。

列出的相关问题参考inner sep部分提到了和的问题\parindent,这两个问题都已得到解决。(实际上这里不需要它们,但还是添加了它们)。

为什么需要进行这个额外的调整?

在此处输入图片描述

使用 showframe选项包装geometry

如果我不使用showframe包,而是使用

\usepackage[showframe]{geometry}

所需的调整略有不同:

(-0.1pt,1.8pt)

得出的结果是:

在此处输入图片描述

参考:

笔记:

  • 使用\layout,我们得到下面的图片,从中我获得了计算文本区域西北方向的精确位置的参数。

    在此处输入图片描述

    在此处输入图片描述

代码:

\documentclass{article}
\usepackage{showframe}
\usepackage{tikz}

\usepackage{layout}
\usepackage{geometry}

\newcommand*{\ShowNorthWestOfTextArea}{%
\begin{tikzpicture}[remember picture, overlay]
    \coordinate (X) at ([
            xshift=1.0in+\hoffset+\oddsidemargin-0.35pt,
            yshift=-1.0in-\voffset-\headsep+2.35pt,
        ]current page.north west);

    \draw [draw=red, fill=yellow, text=gray] (X) circle (1pt)
        node [inner sep=0pt] {+};
\end{tikzpicture}%
}%


\begin{document}%\layout% <-- uncomment to obtain the layout parameters
\noindent\ShowNorthWestOfTextArea%
\end{document}

答案1

文本区域相对于页角的位置

图像的顶部\layout通常看起来像下面的图像,但在您的情况下,虚线似乎与标题的底部重合,因为④(\topmargin= -13pt)和⑤(\headheight= 12pt)几乎抵消。

距离

您可以读出文本左上角相对于页面左上角之间的水平/垂直距离是

水平距离 =1in+\hoffset+\oddsidemargin1in+\hoffset+\evensidemargin
垂直距离 =1in+\voffset+\topmargin+\headheight+\headsep

\oddsidemargin适用于单面文档和双面文档的奇数页,以及\evensidemargin双面文档的偶数页。

文本区域相对于的位置current page.north west

对于 TikZ,文本区域左上角的坐标是 (wrt current page.north west)

(1in+\oddsidemargin, -1in-2\voffset-\topmargin-\headheight-\headsep)

对于单面文档和双面文档的奇数页(\evensidemargin双面文档的偶数页相同)。

笔记:我不知道为什么你需要添加-2\voffsety 坐标,但这似乎是一个错误。也许在纠正 时代码中的某个地方出现了符号错误\voffset

然而,通常\hoffset\voffset都等于零,所以这并不重要。

这是具有正确参数的 MWE 版本:

\documentclass{article}
\usepackage{showframe}
\usepackage{tikz}

\usepackage{geometry}

\newcommand*{\ShowNorthWestOfTextArea}{%
\begin{tikzpicture}[remember picture, overlay]
    \coordinate (X) at ([
            xshift=1.0in+\oddsidemargin,
            yshift=-1.0in-2\voffset-\topmargin-\headheight-\headsep,
        ]current page.north west);

    \draw [draw=red, fill=yellow, text=gray] (X) circle (1pt)
        node [inner sep=0pt] {+};
\end{tikzpicture}%
}%

\begin{document}

\noindent\ShowNorthWestOfTextArea%

\end{document}

输出

注意showframe绘制边框大约文本区域。

答案2

包裹tikzpage节点提供了一组有用的蒂克兹坐标为:

  • 当前页面文本区域
  • 当前页面边距区域
  • 当前页眉区域
  • 当前页脚区域

因此,如果tikzpage节点(current page text area.north west)加载后,您可以使用环境内部获取“文本区域的西北角” tikzpicture。您需要使用remember picture,overlay才能使其工作。

调整问题中的 MWE,我们可以使用:

\documentclass{article}
\usepackage{showframe}
\usepackage{tikz}
\usepackage{tikzpagenodes}
\usepackage{layout}
\usepackage{geometry}

\newcommand*{\ShowNorthWestOfTextArea}{%
\begin{tikzpicture}[remember picture, overlay]
  \coordinate (X) at (current page text area.north west);

  \draw [draw=red, fill=yellow, text=gray] (X) circle (1pt)
      node [inner sep=0pt] {+};
\end{tikzpicture}%
}%


\begin{document}%\layout% <-- uncomment to obtain the layout parameters
  \ShowNorthWestOfTextArea%
\end{document}

使用此代码,文本区域的西北角看起来像:

在此处输入图片描述

相关内容