TikZ-Bild horizontal zentrieren

TikZ-Bild horizontal zentrieren

Ich habe einige Figuren, die ich gerne verwenden würde, aber da die erste größer als die zweite ist, wird die zweite relativ zur Unterkante der ersten platziert. Mein Code:

\begin{figure}[h]
\centering
\begin{tikzpicture}[scale=0.9]
    \draw[->] (0, 0) -- (6, 0) node[right] {$z$};
    \draw[->] (0, 0) -- (0, 6) node[above] {$x$};
    \coordinate (a) at (5, 1);
    \node[fill=red, circle, scale=0.3, label=above:{$s$}] (s) at (5, 5) {};
    \node[fill=red, circle, scale=0.3, label=below:{$e$}] (e) at (1, 1) {};
    \draw (s) -- (e);
    \node[fill=red, circle, scale=0.3, label=above:{$m^*$}] (m*) at (2.293, 3.707) {};
    \node[fill=red, circle, scale=0.3, label=right:{$m$}] (m) at (3, 3) {};
    \draw (m) -- (m*);
    \draw[dashed] (s) -- (a) node[pos=0.5, label=right:{$\Delta x$}] -- (e) node[pos=0.5, label=below:{$\Delta z$}] {};
\end{tikzpicture}
\hspace{10mm}
\begin{tikzpicture}        
    \coordinate (ayy) at (4.293, 1);
    \coordinate (mstar) at (4.293, 3.707);
    \coordinate (emm) at (7, 1);
    \node[fill=red, circle, scale=0.3, label=above:{$m^*$}] (m*) at (mstar) {};
    \node[fill=red, circle, scale=0.3, label=right:{$m$}] (m) at (emm) {};
    \node[fill=none, inner sep=0, outer sep=0] (a) at (ayy) {};
    \draw (m) -- (m*) node[pos=0.6, label=right:{$d$}] {};
    \draw[dashed] (a) -- (m*) node[pos=0.5, label=left:{$d\cos\alpha$}] {};
    \draw[dashed] (a) -- (m) node[pos=0.5, label=below:{$d\sin\alpha$}] {};
    \pic[draw, "$\alpha$", angle eccentricity=1.2, angle radius=7mm] {angle=ayy--mstar--emm};
\end{tikzpicture}
\caption{Calculating $m^*$ (Case 1)}
\end{figure}

Was ich derzeit habe: Was ich habe

Was ich gerne hätte: Was ich gerne hätte:

Antwort1

Herzlich willkommen! Es gibt viele Möglichkeiten, von denen ich zwei erläutere:

  1. Verwenden Sie \vcenter. Die vielleicht einfachste Möglichkeit, es zu verwenden, besteht darin, es in den Mathematikmodus zu versetzen.
  2. Verwenden Sie nur ein Bild und arbeiten Sie mit Bereichen.

Im zweiten Beispiel habe ich den Code etwas vereinfacht, indem ich Polarkoordinaten verwende, den Parser zum Analysieren von Koordinaten verwende, Pfade kombiniere usw.

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{angles,quotes}
\begin{document}
\begin{figure}[h]
\centering
$\vcenter{\hbox{\begin{tikzpicture}[scale=0.9]
    \draw[->] (0, 0) -- (6, 0) node[right] {$z$};
    \draw[->] (0, 0) -- (0, 6) node[above] {$x$};
    \coordinate (a) at (5, 1);
    \node[fill=red, circle, scale=0.3, label=above:{$s$}] (s) at (5, 5) {};
    \node[fill=red, circle, scale=0.3, label=below:{$e$}] (e) at (1, 1) {};
    \draw (s) -- (e);
    \node[fill=red, circle, scale=0.3, label=above:{$m^*$}] (m*) at (2.293, 3.707) {};
    \node[fill=red, circle, scale=0.3, label=right:{$m$}] (m) at (3, 3) {};
    \draw (m) -- (m*);
    \draw[dashed] (s) -- (a) node[pos=0.5, label=right:{$\Delta x$}]{}
     -- (e) node[pos=0.5, label=below:{$\Delta z$}] {};
\end{tikzpicture}}}
\hspace{10mm}
\vcenter{\hbox{\begin{tikzpicture}
    \coordinate (ayy) at (4.293, 1);
    \coordinate (mstar) at (4.293, 3.707);
    \coordinate (emm) at (7, 1);
    \node[fill=red, circle, scale=0.3, label=above:{$m^*$}] (m*) at (mstar) {};
    \node[fill=red, circle, scale=0.3, label=right:{$m$}] (m) at (emm) {};
    \node[fill=none, inner sep=0, outer sep=0] (a) at (ayy) {};
    \draw (m) -- (m*) node[pos=0.6, label=right:{$d$}] {};
    \draw[dashed] (a) -- (m*) node[pos=0.5, label=left:{$d\cos\alpha$}] {};
    \draw[dashed] (a) -- (m) node[pos=0.5, label=below:{$d\sin\alpha$}] {};
    \pic[draw, "$\alpha$", angle eccentricity=1.2, angle radius=7mm] {angle=ayy--mstar--emm};
\end{tikzpicture}}}$
\end{figure}

\begin{figure}[h]
\centering
\begin{tikzpicture}[bullet/.style={fill=red, circle, scale=0.3, label=#1}]
  \begin{scope}[scale=0.9]
    \draw[<->] (0, 6) node[above] {$x$} |- (6, 0) node[right] {$z$};
    \coordinate (a) at (5, 1);
    \node[bullet=above:{$s$}] (s) at (5, 5) {};
    \node[bullet=below:{$e$}] (e) at (1, 1) {};
    \draw (s) -- node[fill=red, circle, scale=0.3, label=right:{$m$}] (m){}  (e)
        (m) ++ (135:1) 
        node[fill=red, circle, scale=0.3, label=above:{$m^*$}] (m*) {};
    \draw (m) -- (m*);
    \draw[dashed] (s) |- (e) node[pos=0.75,below] {$\Delta z$}
    node[pos=0.25,right](dx){$\Delta x$};
  \end{scope}
  \begin{scope}
    \path (dx)  ++ (3,{-1-1/sqrt(8)})  coordinate (a)
        ++ (0,{2+1/sqrt(2)}) 
        node[bullet=above:{$m^*$}] (m*) {}
        (a) ++ ({2+1/sqrt(2)},0)
        node[bullet=right:{$m$}] (m){};
    \draw (m) -- (m*);  
    \draw[dashed] (m*)  --  node[left] (dc){$d\cos\alpha$} (a)
        -- node[below]{$d\sin\alpha$} (m);
    \pic[draw, "$\alpha$", angle eccentricity=1.2, angle radius=7mm] 
    {angle=a--m*--m};
  \end{scope}
\end{tikzpicture}
\end{figure}
\end{document}

Bildbeschreibung hier eingeben

Übrigens besteht das übliche Format auf dieser Site darin, vollständige minimale Arbeitsbeispiele (MWEs) bereitzustellen. Dies sind Codes, die alles enthalten, was zum Kompilieren erforderlich ist, und die normalerweise mit beginnen \documentclassund mit enden \end{document}. In Ihrem Fall weiß ich nicht, welche Dokumentklasse Sie verwenden, also musste ich raten, und welche Pakete Sie laden (außer denen, die zum Durchlaufen Ihres Snippets erforderlich sind). Möglicherweise laden Sie bereits etwas, das Tools enthält, mit denen Sie Ihr Problem auf andere Weise lösen können.

Antwort2

Eine weitere Möglichkeit ist das Ausrichten von Bildern an der ausgewählten Grundlinie. Mit leicht modifiziertem Code für Bilder lautet der MWE beispielsweise:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{angles,
                calc, % new
                quotes}

\begin{document}
    \begin{figure}[h]
    \tikzset{dot/.style = {circle, fill=red, minimum size=3pt, inner sep=0pt}}% new
\begin{tikzpicture}[baseline=(X.center)] % <---
% caxes
    \draw[->] (0,0) -- (6, 0) node[right] {$z$};
    \draw[->] (0,0) -- (0, 6) node[above] {$x$};
% triangle
\node (s) [dot, label=$s$]          at (5,5) {};
\node (e) [dot, label=below:{$e$}]  at (1,1) {};
\draw (s) -- node (m) [dot, label=right:$m$] {} (e);
\node (m*) [dot, label=$m^*$] at ($(m)!10mm!90:(s)$) {};
    \node[fill=red, circle, scale=0.3, label=right:{$m$}] (m) at (3, 3) {};
\draw (m) -- (m*);
\draw[dashed] (e) -| (s) node[pos=0.25, label=below:$\Delta z$] {}
                         node (X) [pos=0.75, label=right:$\Delta x$] {}; % <---
\end{tikzpicture}
    \hfill
\begin{tikzpicture}[baseline=(X.center)] % <---
\node (m*) [dot, label=above:$m^*$] {};
\node (m)  [dot, label=right:$m$]   at (3,-3) {};
\draw (m*) -- node[label=right:$d$] {} (m);
\draw[dashed] (m*) |- (m)   node (X) [pos=0.25, label=left:$d\cos\alpha$] {} % <---
                            coordinate[pos=0.5] (a)  % <--- 
                            node[pos=0.75, label=below:$d\sin\alpha$] {};
\pic[draw, "$\alpha$", angle eccentricity=1.2, angle radius=7mm] {angle=a--m*--m};
\end{tikzpicture}
\end{figure}
\caption{Calculating $m^*$ (Case 1)}
\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen