Tikz-Bilder werden nicht vertikal ausgerichtet

Tikz-Bilder werden nicht vertikal ausgerichtet

Wie kann ich die Achsen zweier nebeneinander in Tikz gezeichneter Graphen vertikal ausrichten? Hier ist mein Code:

\documentclass{article}
\usepackage{tikz}

\begin{document}
    \begin{center}
        \resizebox{0.45\linewidth}{8cm}{
            \begin{tikzpicture}
            \tikzstyle{every node}=[font=\tiny];
            
            %Axes
            \draw[-latex] (0, 0) -- (3, 0) ;
            \draw[-latex] (0, -1.5) -- (0, 2);
            \node[above] at (0, 2) {\( \$ \)};
            \node[right] at (3, 0) {\( S_T \)}; 

            %Title
            \node[above, font = \small\bfseries] at (current bounding box.north) {Long Call};
            \end{tikzpicture}
        }
        \quad
        \resizebox{0.45\linewidth}{8cm}{
            \begin{tikzpicture}
            \tikzstyle{every node}=[font=\tiny];
            
            %Axes
            \draw[-latex] (0, 0) -- (3, 0) ;
            \draw[-latex] (0, -1.5) -- (0, 2);
            \node[above] at (0, 2) {\( \$ \)};
            \node[right] at (3, 0) {\( S_T \)}; 

            %Title
            \node[above, font = \small\bfseries] at (current bounding box.north) {Short Call};
        \end{tikzpicture}
        }
    \end{center}
\end{document}

Wie Sie im Bild unten sehen können, sind die Achsen leicht verschoben: Bildbeschreibung hier eingeben Das Problem scheint daher zu kommen, dass das g in „Long“ den linken Titel größer macht. Ich habe versucht, für beide Bilder die gleichen Größenmaße zu definieren und valign = t zu verwenden, aber beides hat nicht funktioniert.

Antwort1

Positionieren Sie sie einfach baselineauf der gleichen Koordinate, hier (0,0):

\begin{tikzpicture}[baseline={(0,0)}]

Bildschirmfoto

\documentclass{article}
\usepackage{tikz}

\begin{document}
    \begin{center}
        \resizebox{0.45\linewidth}{8cm}{
            \begin{tikzpicture}[baseline={(0,0)}]
            \tikzstyle{every node}=[font=\tiny];
            
            %Axes
            \draw[-latex] (0, 0) -- (3, 0) ;
            \draw[-latex] (0, -1.5) -- (0, 2);
            \node[above] at (0, 2) {\( \$ \)};
            \node[right] at (3, 0) {\( S_T \)}; 

            %Title
            \node[above, font = \small\bfseries] at (current bounding box.north) {Long Call};
            \end{tikzpicture}
        }
        \quad
        \resizebox{0.45\linewidth}{8cm}{
            \begin{tikzpicture}[baseline={(0,0)}]
            \tikzstyle{every node}=[font=\tiny];
            
            %Axes
            \draw[-latex] (0, 0) -- (3, 0) ;
            \draw[-latex] (0, -1.5) -- (0, 2);
            \node[above] at (0, 2) {\( \$ \)};
            \node[right] at (3, 0) {\( S_T \)}; 

            %Title
            \node[above, font = \small\bfseries] at (current bounding box.north) {Short Call};
        
        \end{tikzpicture}
        }
    \end{center}
\end{document}

Antwort2

  • Kleine vertikale Fehlausrichtungen der Bilder werden durch unterschiedliche vertikale Größen der Titelknoten verursacht: Der erste enthält den Buchstaben g mit Unterlänge, der zweite hat keinen solchen Buchstaben. Wenn Sie die Texttiefe beispielsweise mit vorgeben, text depth=0.5exhaben beide Titelknoten die gleiche Höhe, sodass beide Bilder vertikal ausgerichtet werden.
  • Off-Topic: Die Verwendung von \resizeboxist keine gute Idee. Dadurch ändert sich auch die Schriftgröße (Sie verlieren also die Kontrolle darüber).
\documentclass{article}
\usepackage{tikz}
%---------------- show page layout. don't use in a real document!
\usepackage{showframe}
\renewcommand\ShowFrameLinethickness{0.15pt}
\renewcommand*\ShowFrameColor{\color{red}}
%---------------------------------------------------------------%

\begin{document}
    \begin{center}
\tikzset{
every node/.style = {text depth=0.5ex, font=\small} % <---
        }
    \begin{tikzpicture}
%Axes
\draw[-latex] (0, 0-0) -- (0.4\linewidth, 0) node[right] {\( S_T \)}; 
\draw[-latex] (0,-1.5) -- (0, 3) node[above] {\( \$ \)};
%Title
\node[above, font = \bfseries] at (current bounding box.north) {Long Call};
    \end{tikzpicture}
\hfill
    \begin{tikzpicture}
%Axes
\draw[-latex] (0, 0-0) -- (0.4\linewidth, 0) node[right] {\( S_T \)};
\draw[-latex] (0,-1.5) -- (0, 3) node[above] {\( \$ \)};
%Title
\node[above, font = \bfseries] at (current bounding box.north) {Short Call};
\end{tikzpicture}
    \end{center}
\end{document}

Bildbeschreibung hier eingeben

(rote Linien zeigen Textränder)

Antwort3

Eine etwas allgemeinere Problemumgehung für den Fall, dass unterschiedliche Texthöhen in Überschriften oder Bildunterschriften die vertikale Ausrichtung zerstören, besteht darin, Latex so tun zu lassen, als ob im anderen Text auch ein höherer (niedrigerer) Buchstabe vorhanden wäre.

Wenn Ihre beiden Texte Long Callund lauten Short Call, ändern Sie einfach Letzteres in Short Call\vphantom{g}. Auf diese Weise behandelt Latex es so, als würde es auch diesen vertikalen Platz einnehmen (aber keinen zusätzlichen horizontalen Platz).

Beachten Sie, dass dies ein kleiner Hack ist und es fast immer eine bessere Lösung gibt, wie in diesem Fall das Ändern des Ursprungs, aber es ist ein nützlicher Trick, wenn Sie die Ausrichtung schnell korrigieren möchten. Sie müssen nur wissen/raten, welche Buchstaben das Problem verursachen, oder Short Call\vphantom{Long Call}zur Sicherheit etwas übertrieben vorgehen.

verwandte Informationen