tikz 图形居中不起作用

tikz 图形居中不起作用

我想要下面的代码位于中心,但是 \begin{center} 和 \end{center} 在这里不起作用。

\begin{figure}
\begin{center}
\begin{tikzpicture}[scale = 0.4]
\def\nx{12}
\def\ny{12}
\foreach \i in {0, ..., \nx}{
    \fill (0:13+\i) ++ (-60:\i) ++ (-120:\i) coordinate (f\i) circle (2pt) node[right] {\small$f_{\i}$}; %node[right] {\i};
}
\foreach \j in {0, ..., \ny}{
    \fill (0:11-\j) ++ (-60:\j) ++ (-120:\j) coordinate (e\j) circle (2pt) node[left]{\small$e_{\j}$}; % node[left] (e\j) {\j};
}
\draw (f0) -- (f12);
\draw (e0) -- (e12);
\end{tikzpicture}
\end{center}
\end{figure}

它给出的是左移图形而不是居中图形。你能帮忙吗?谢谢!

答案1

与 Romano 的回答 (+1) 相辅相成的解决方案,我同意。

更简单一点的方法可能是:

\documentclass{article}
\usepackage{lipsum}    % dummy text
\usepackage{showframe} % to show the page geometry
\usepackage{tikz}

\begin{document}
\lipsum[1]
\begin{figure}[ht]\centering
\begin{tikzpicture}[scale=0.4]
\def\nx{12}
\foreach\i in{0,...,\nx}
{
    \fill (0: 1) ++ (-60 :2*\i) coordinate (f\i) circle (2pt) node[right] {\small$f_{\i}$};
    \fill (0:-1) ++ (-120:2*\i) coordinate (e\i) circle (2pt) node[left]  {\small$e_{\j}$};
}
\draw (f0) -- (f12);
\draw (e0) -- (e12);
\end{tikzpicture}
\end{figure}

\lipsum[2]
\end{document}

在此处输入图片描述

答案2

问题在于你如何找到绘制点。我将向你展示如何操作:

  1. 构建正确的 MWE(因为类将要影响结果)
  2. 添加[showframe]{geometry}包以查看页面轮廓
  3. 在图片周围添加一个\fbox以显示图片的大小
  4. 最后,我在路径移动中添加了一条线(0:13+\i) ++ (-60:\i) ++ (-120:\i)(并将填充改为绘制以便能够看到任何内容)。

如你所见,你先向右移动,然后向左移动;TiZ 不知道您不想在图片中出现这些点(它们在路径上!),因此它设置了边界框来考虑它们。

所以是的,你的图片居中;不居中的是你的绘画里面图片。

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usepackage[showframe]{geometry}
\begin{document}
\begin{figure}
    \begin{center}
        \fbox{\begin{tikzpicture}[scale = 0.4]
            \def\nx{12}
            \def\ny{12}
            \foreach \i in {0, ..., \nx}{
                \draw (0:13+\i) -- ++ (-60:\i) -- ++ (-120:\i) coordinate (f\i) circle (2pt) node[right] {\small$f_{\i}$}; %node[right] {\i};
            }
            \foreach \j in {0, ..., \ny}{
                \fill (0:11-\j) ++ (-60:\j) ++ (-120:\j) coordinate (e\j) circle (2pt) node[left]{\small$e_{\j}$}; % node[left] (e\j) {\j};
            }
            \draw (f0) -- (f12);
            \draw (e0) -- (e12);
    \end{tikzpicture}}
    \end{center}
\end{figure}
\end{document}

在此处输入图片描述

正如之前所评论的那样,一个可能的解决方案是手动重置边界框(手册在这里):

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usepackage[showframe]{geometry}
\begin{document}
\begin{figure}
    \centering %better than {center} environment, no vertical spurious space
        \fbox{\begin{tikzpicture}[scale = 0.4]
            \def\nx{12}
            \def\ny{12}
            \foreach \i in {0, ..., \nx}{
                \path (0:13+\i) -- ++ (-60:\i) -- ++ (-120:\i) coordinate (f\i) circle (2pt) node[right] {\small$f_{\i}$}; %node[right] {\i};
            }
            \foreach \j in {0, ..., \ny}{
                \fill (0:11-\j) ++ (-60:\j) ++ (-120:\j) coordinate (e\j) circle (2pt) node[left]{\small$e_{\j}$}; % node[left] (e\j) {\j};
            }
            \draw (f0) -- (f12);
            \draw (e0) -- (e12);
            %% take responsibility for the bounding box
            \pgfresetboundingbox
            \draw [use as bounding box]
                ([shift={(-2,2)}] e12 |- f0) rectangle ([shift={(2,-2)}] f12);
            %% Notice the use of the perpendicular coordinate system here
            %% and a shift added to avoid clipping labels.
    \end{tikzpicture}}
\end{figure}
\end{document}

其结果如下:

图像居中,手动设置边界框

另一个解决方案是使用Juan Castaño 的回答并简化您塑造身材的方式。

答案3

您的图像位于文本块的中心,但您应该注意图像的宽度不要超过\textwidth

但是,对于您的身材我会考虑:

  • center我宁愿使用命令而不是环境\centering,然后立即插入\begin{figure}
  • 对于图像代码,我会根据你之前的提问调整我的答案:
\documentclass{article}
%---------------- show page layout. don't use in a real document!
\usepackage{showframe}
\renewcommand\ShowFrameLinethickness{0.15pt}
\renewcommand*\ShowFrameColor{\color{red}}
%---------------------------------------------------------------%
\usepackage{tikz}

\begin{document}
    \begin{figure}
    \centering
\begin{tikzpicture}[scale=0.4,
dot/.append style = {circle, fill, inner sep=2pt,
                     label=#1}
                     ]
\def\nx{12}
\def\ny{12}
\foreach \i in {0, ..., \nx}
{
    \path (0:25-\i) ++ (80:\i) ++ (100:\i) node (f\i) [dot=right:$f_\i$] {};
}
\foreach \j in {0, ..., \ny}
{
    \path (0:\j)   ++ (80:\j) ++ (100:\j) node (e\j) [dot=left:$e_\j$] {};
}
\draw (f0) -- (f12);
\draw (e0) -- (e12);
\end{tikzpicture}
    \end{figure}
\end{document}

在此处输入图片描述

(红线表示页面布局)

相关内容