Я пытаюсь правильно выровнять tikzpicture
текст, состоящий из стрелки, которую я поместил в нижний колонтитул. Моя проблема в том, что я хочу, чтобы кончик стрелки был выровнен с восточным краем нижнего колонтитулаиЯ хочу, чтобы базовая линия текста совпадала с остальным текстом в других частях нижнего колонтитула.
Ни один из вариантов привязки, похоже, не дает того, что мне нужно. Если я использую привязку base east
, текст выравнивается правильно, но наконечник стрелки выпирает на поля, как показано здесь:
Я знаю, как добавить ручной сдвиг. В MWE ниже у меня есть более или менее рабочее решение, использующее yshift
для подтягивания стрелки в нужное место, но значение я определил на глаз. Это решение выглядит так:
Однако, очевидно, это справедливо только для этого одного размера. Есть ли способ tikz
автоматически рассчитать сдвиг?
Вот мой 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}
решение1
Используйте anchor=east
или left
для узлов. Назовите узлы, например, n
и используйте baseline=(n.base)
как вариант для 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}
Обновлять
Обратите внимание, что нет необходимости использовать tikzpagenodes
и remember picture
. Тогда вам придется запустить его только один раз.
\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}
Результат тот же, что и выше.