So berechnen Sie automatisch die Tikz-Verschiebung innerhalb von Pagenodes

So berechnen Sie automatisch die Tikz-Verschiebung innerhalb von Pagenodes

Ich versuche, einen tikzpictureText innerhalb eines Pfeils, den ich in die Fußzeile eingefügt habe, richtig auszurichten. Mein Problem ist, dass ich die Pfeilspitze mit der östlichen Kante der Fußzeile ausrichten möchte.UndIch möchte, dass die Grundlinie des Textes mit dem Rest des Textes in den anderen Teilen der Fußzeile übereinstimmt.

Keine der Verankerungsoptionen scheint das gewünschte Ergebnis zu liefern. Wenn ich den base eastAnker verwende, ist der Text zwar korrekt ausgerichtet, aber die Pfeilspitze ragt in den Rand hinein, wie hier gezeigt:

Mit Anker=Basis Ost

Ich weiß, wie man eine manuelle Verschiebung hinzufügt. Im MWE unten habe ich eine mehr oder weniger funktionierende Lösung, indem ich yshiftden Pfeil nach oben an die richtige Stelle ziehe, aber den Wert habe ich nach Augenmaß ermittelt. Diese Lösung sieht folgendermaßen aus:

Bildbeschreibung hier eingeben

Allerdings gilt es offensichtlich nur für diese eine Größe. Gibt es eine Möglichkeit, tikzdie Verschiebung automatisch berechnen zu lassen?

Hier ist mein MWE:

\documentclass{memoir}
\usepackage{tikz}
\usepackage{tikzpagenodes}
\usetikzlibrary{positioning,calc,shapes.arrows}
\usepackage{showframe}
\usepackage{lipsum}

\renewcommand*{\ShowFrameColor}{\color{red}}

% This version correctly aligns the CONTINUE text to the baseline,
% but the arrow head sticks out into the margin.
\newcommand{\ContinueNotice}{%
    \begin{tikzpicture}[remember picture,overlay, font={\large\sffamily\bfseries}]
        \node[single arrow,single arrow head extend=3pt,fill=black,text=white,anchor=base east]
        at (current page footer area.south east) {\enspace CONTINUE\enspace};
\end{tikzpicture}%
}

% This version is more or less correctly aligned, but the yshift is done by eye.
\newcommand{\ContinueNoticeAlt}{%
    \begin{tikzpicture}[remember picture,overlay, font={\large\sffamily\bfseries}]
        \node[single arrow,single arrow head extend=3pt,fill=black,text=white,anchor=east,yshift=-2pt]
        at (current page footer area.east) {\enspace CONTINUE\enspace};
\end{tikzpicture}%
}

\makepagestyle{TestStyle}
\makeoddfoot{TestStyle}{\footnotesize Some Notice}{\thepage}{\ContinueNotice}
\makeevenfoot{TestStyle}{\footnotesize Some Notice}{\thepage}{\ContinueNoticeAlt}
\pagestyle{TestStyle}

\begin{document}

\lipsum

\end{document} 

Antwort1

Verwenden Sie anchor=eastoder leftfür die Knoten. Benennen Sie die Knoten beispielsweise mit nund verwenden Sie baseline=(n.base)als Option für tikzpicture:

\documentclass{memoir}
\usepackage{tikzpagenodes}
\usetikzlibrary{shapes.arrows}
\usepackage{showframe}
\usepackage{lipsum}

\renewcommand*{\ShowFrameColor}{\color{red}}

\newcommand{\ContinueNotice}{%
    \begin{tikzpicture}[remember picture,overlay, font={\large\sffamily\bfseries},baseline=(n.base)]
        \node[single arrow,single arrow head extend=3pt,fill=black,text=white,left](n)
        at (current page footer area.south east) {\enspace CONTINUE\enspace};
\end{tikzpicture}%
}

\newcommand{\ContinueNoticeAlt}{%
    \begin{tikzpicture}[remember picture,overlay, font={\large\sffamily\bfseries},baseline=(n.base)]
        \node[single arrow,single arrow head extend=3pt,fill=black,text=white,anchor=east](n)
        at (current page footer area.east) {\enspace CONTINUE\enspace};
\end{tikzpicture}%
}

\makepagestyle{TestStyle}
\makeoddfoot{TestStyle}{\footnotesize Some Notice}{\thepage}{\ContinueNotice}
\makeevenfoot{TestStyle}{\footnotesize Some Notice}{\thepage}{\ContinueNoticeAlt}
\pagestyle{TestStyle}

\begin{document}
\lipsum
\end{document}

Bildbeschreibung hier eingeben


Aktualisieren

Beachten Sie, dass es nicht notwendig ist, tikzpagenodesund zu verwenden remember picture. Dann müssen Sie es nur einmal ausführen.

\documentclass{memoir}
\usepackage{tikz}
\usetikzlibrary{shapes.arrows}
\usepackage{showframe}
\usepackage{lipsum}

\renewcommand*{\ShowFrameColor}{\color{red}}

\newcommand{\ContinueNotice}{%
  \begin{tikzpicture}[overlay, font={\large\sffamily\bfseries},baseline=(n.base)]
    \node[single arrow,single arrow head extend=3pt,fill=black,text=white,left](n)
      {\enspace CONTINUE\enspace};
  \end{tikzpicture}%
}

\newcommand{\ContinueNoticeAlt}{%
  \begin{tikzpicture}[overlay, font={\large\sffamily\bfseries},baseline=(n.base)]
    \node[single arrow,single arrow head extend=3pt,fill=black,text=white,anchor=east](n)
      {\enspace CONTINUE\enspace};
  \end{tikzpicture}%
}

\makepagestyle{TestStyle}
\makeoddfoot{TestStyle}{\footnotesize Some Notice}{\thepage}{\ContinueNotice}
\makeevenfoot{TestStyle}{\footnotesize Some Notice}{\thepage}{\ContinueNoticeAlt}
\pagestyle{TestStyle}

\begin{document}
\lipsum
\end{document}

Das Ergebnis ist das gleiche wie oben.

verwandte Informationen