Estou tentando alinhar corretamente um tikzpicture
texto composto por uma seta que coloquei no rodapé. Meu problema é que quero que a ponta da seta esteja alinhada com a borda leste do rodapéeQuero que a linha de base do texto se alinhe com o restante do texto nas outras partes do rodapé.
Nenhuma das opções de ancoragem parece produzir o que desejo. Se eu usar a base east
âncora, o texto ficará alinhado corretamente, mas a ponta da seta sobressai na margem, como mostrado aqui:
Estou ciente de como adicionar uma mudança manual. No MWE abaixo, tenho uma solução mais ou menos funcional usando yshift
para puxar a seta para o lugar certo, mas o valor é aquele que determinei observando-o. Essa solução é assim:
No entanto, obviamente só é válido para este tamanho. Existe uma maneira de tikz
calcular a mudança automaticamente?
Aqui está meu 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}
Responder1
Use anchor=east
ou left
para os nós. Nomeie os nós por exemplo n
e use baseline=(n.base)
como opção para 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}
Atualizar
Observe que não há necessidade de usar tikzpagenodes
e remember picture
. Então você terá que executá-lo apenas uma vez.
\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}
O resultado é o mesmo acima.