如何设置显示模式 TikZ 图片的水平位置?

如何设置显示模式 TikZ 图片的水平位置?

考虑以下 LaTeX 文档:

\documentclass{article}
\usepackage{lipsum,tikz}
\begin{document}
   \lipsum[1-1]

   \tikz \draw (0,0) rectangle (1,1);
\end{document}

在 PDF 查看器中查看时,相应的 PDF 文件如下所示(我从屏幕截图中截断了页面的下半部分):

TikZ 图片的水平定位

如何更精确地调整 TikZ 图片相对于页面/文本边缘/中心的水平位置?例如,假设我希望图片中心位于文本中心右侧 1 厘米处?还是位于文本右边缘左侧 1 厘米处?还是位于页面右边缘左侧 1 厘米处?还是位于文本右边缘和页面右边缘之间的中间位置?如果我想将参考点设为其他锚点而不是图片中心,该怎么办?

答案1

这里似乎缺少的基本信息是,atikzpicture实际上是 a盒子,例如一个角色。盒子TeX(和 LaTeX)中的基本内容。

因此,请看下面的例子,我希望它是自动解释的,以便概括我在评论中链接的问答中可以找到的所有内容:

\documentclass{article}
\usepackage{lipsum,tikz}
\usetikzlibrary{tikzmark}
\begin{document}
   \lipsum[1-1]

   The \texttt{tikzpicture} is really a character (or a \emph{box}) for \TeX.
   Some text \tikz \draw (0,0) rectangle (1,1);
   more text where I show that you can
   change where the baseline of the box is:
   \tikz[baseline={(1,1)}] \draw (0,0) rectangle (1,1);
   And more text here
   \tikz[baseline={(0,0.5)}] \draw (0,0) rectangle (1,1);

   So if you have another paragraph here you can put it in the
   margin as you do with any text.
   So if you have another paragraph here you can put it in the
   margin as you do with any text.\marginpar{%
        \tikz \draw (0,0) rectangle (1,1);
   }
   So if you have another paragraph\tikzmark{a}
   here you can put it in the
   margin as you do with any text.

   This one will be set on the mid of the page, 5cm down the top.
   \tikz[overlay, remember picture]
        \draw[red] ([yshift=-5cm]current page.north) rectangle ++(1,1);

   And this one will be at the right of the mark set on the
   third "paragraph" word in the previous paragraph.
   \tikz[overlay, remember picture] \draw[red] (pic cs:a) rectangle ++(1,1);

    And finally, given that the picture is a box, you can display it:
    \begin{center}
        \tikz \draw (0,0) rectangle (1,1);
    \end{center}
    Or even put into an equation:
    \begin{equation}
        A=\tikz[baseline={(0,0.5)}] \draw (0,0) rectangle (1,1);
    \end{equation}

    Or 5cm from the text margin position:

    \noindent\hspace*{5cm}\tikz[baseline={(0,0.5)}] \draw (0,0) rectangle (1,1);

Or two-thirds away between tex margins:
    
    \noindent X\hfill\hfill\tikz \draw (0,0) rectangle (1,1);\hfill X 

\end{document}

在此处输入图片描述

请注意,内联元素\tikz是如何被当作字符来处理的,并且它们会相应地改变行距。该overlay选项使整体tikzpicture看起来好像是 0 大小。需要remember picture,以便tikzmark库可以处理整个编译中的位置(您可能需要编译几次才能得到此处显示的结果)。

另外,图片的“参考”不是它的中心。对于文本的外部流动,重要的是基线;默认基线是整个图片的左下角,与内部坐标无关;您可以使用选项更改基线baseline

答案2

目前尚不完全清楚您的意图是什么,但我预计您正在寻找类似这样的东西:

在此处输入图片描述

垂直虚线红色线表示文本的水平中心。

页面上的定位tikzpicture可以是绝对的(如下面 MWE 中绘制的垂直红线所示),也可以是相对的,通过\tikzpicture使用\vspace*(如果需要)和来定位\hspace*,如下面的 MWE 所示:

\documentclass{article}
\usepackage{tikz}
\usepackage{lipsum}

\begin{document}
   \lipsum[1-1]
   
\noindent%
%\vspace*{11mm}% if you like vertical shift of image
\hspace*{\dimexpr0.5\linewidth+1cm}%
     \tikz \draw (0,0) rectangle (1,1);
     
     % show horizontal center of paragraph
    \tikz[remember picture, overlay]\draw[dashed,red] (current page.north) -- (current page.south);
\end{document}

当然,通过相应的设置,您\hspace*\vspace*可以将图像从段落最后一行的开头移动到所需位置。

相关内容