LaTeX(TikZ)图像居中

LaTeX(TikZ)图像居中

我对图像的水平对齐有问题。我从matlab扩大并使用以下代码将其添加到我的 LaTeX 文件中:

\begin{figure}[H]
\centering
\newlength\figureheight 
\newlength\figurewidth 
\setlength\figureheight{6cm} 
\setlength\figurewidth{9cm}
\input{img/ConvPlot.tikz}
\caption{Convergentieplot bij $\nu=-0.7$ en $M_{ref}=M(Q=30)$.}
\label{ConvPlot}
\end{figure}

LaTeX 自动将图像宽度居中垂直轴宽度。但我只希望图形框居中,而不是图像和轴。有什么方法可以实现吗?

图像:

http://i49.tinypic.com/35iwxs4.jpg

答案1

图形未按您想要的方式居中的原因是因为图形的边界框包含垂直轴的标签。有两种方法可以告诉 TikZ 忽略垂直轴标签添加的宽度。

方法 1。添加

\pgfplotsset{
  ylabel style={overlay},
  yticklabel style={overlay},
}

在您的.tex文档中(添加它的位置似乎并不重要,只要它在当前图形之前即可)这可能会产生全局效果(除非\pgfplotssetfigure)。也就是说,全部您后续的 PGF 图的边界框将被“修剪”。

方法 2。ConvPlot.tikz使用文本编辑器打开文件,找到ylabel={...},并添加

ylabel style={overlay},
yticklabel style={overlay},

在其下方。这将产生局部影响。也就是说,只有这个特定图形的边界框会发生变化。所有其他 PGF 图仍将具有默认边界框(包括垂直轴的标签)。

ylabel下面两张图分别对比了修改和不修改/样式的效果yticklabel

ylabel 样式修改 ylabel样式未修改

答案2

我尝试给出一个更通用的答案来涵盖其他一些情况

A 部分)仅将乳胶图像的一部分居中

这是一张图片在此处输入图片描述

我想只将窗口居中,而不使用背景。手动操作即可。这个想法很简单,首先我使用\includegraphics[trim= 98 0 0 13,clip]98 和 13 手动确定。然后当你得到你想要的东西时,你可以写\includegraphics[trim= 98 0 0 13]{tm.png}

\documentclass{article}
\usepackage{pgfplots}
\usetikzlibrary{shapes,positioning}
\begin{document}

\begin{figure}
\centering
\includegraphics[]{tm.png}
\caption{tm}
\label{ConvPlot}
\end{figure}

\begin{figure}
\centering
\includegraphics[trim= 98 0 0 13]{tm.png}
\caption{tm}
\label{ConvPlot}
\end{figure}

\end{document}

B 部分)仅将 latex tikz 图像的一部分居中(不使用 pgfplots)

一个简单的 tikz 图片就可能出现问题。在这种情况下,您可能需要使用trim left带有尺寸或锚点的 tikz 选项(我认为是可能的......)

这里有一个小文件:fig.tikz

\begin{tikzpicture}[trim left= -1.5cm]
\node[rectangle,draw,minimum width=1 cm, minimum height=2 cm, fill=cyan!20] (a) {}
node[rectangle,draw=red,fill=orange!20,minimum width=2 cm, minimum height=1 cm] (b) [left= 0pt of a] {};
\end{tikzpicture}

您可以在主文件中写入

\begin{figure}
\centering
\input{fig.tikz}
\caption{tikz}
\label{tikz}
\end{figure}

在此处输入图片描述

但如果你不能修改这个文件,并且第一行是

  \begin{tikzpicture} without [trim left= -1.5cm]``

你可以在主文件中图前写入:

 \tikzset{every picture/.style={trim left=-1.5cm}}

也许可以使用这样的锚点

\tikzset{每张图片/.style={trim left=(a.left)}}

在此处输入图片描述

C 部分)仅将 latex pgfplots 图像的一部分居中

如果图片仅包含pgfplots 图形和没有其他的

您可以尝试 Jake 的一个想法,trim axis left,trim axis right但诀窍是使用 B 部分中使用的工具。

这里有一个小文件 pgfplot.tikz

\begin{tikzpicture}[trim axis left,trim axis right]
\begin{axis}[width=5cm,ylabel=looong label,ylabel style={rotate=-90}]
\addplot {x^2};
\end{axis}
\end{tikzpicture}

在主文件中

\documentclass{article}
\usepackage{pgfplots}
\usetikzlibrary{shapes,positioning}
\begin{document}

%\tikzset{every picture/.style={trim axis left,trim axis right}}
\begin{figure}
\centering
\input{pgfplot.tikz}
\caption{pgfplot}
\label{pgfplot}
\end{figure}

\end{document}

如果你无法修改文件 pgfplot.tikz(它不是你的文件......)你可以尝试

  \tikzset{every picture/.style={trim axis left,trim axis right}}   

你会得到

在此处输入图片描述

相关内容