我想要下面的代码位于中心,但是 \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
问题在于你如何找到绘制点。我将向你展示如何操作:
- 构建正确的 MWE(因为类将要影响结果)
- 添加
[showframe]{geometry}
包以查看页面轮廓 - 在图片周围添加一个
\fbox
以显示图片的大小 - 最后,我在路径移动中添加了一条线
(0:13+\i) ++ (-60:\i) ++ (-120:\i)
(并将填充改为绘制以便能够看到任何内容)。
如你所见,你先向右移动,然后向左移动;Ti钾Z 不知道您不想在图片中出现这些点(它们在路径上!),因此它设置了边界框来考虑它们。
所以是的,你的图片居中;不居中的是你的绘画里面图片。
\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}
(红线表示页面布局)