页面顶部以外的地方出现垂直条

页面顶部以外的地方出现垂直条

我想要一个\shybar打印\textbar 除了如果它是页面上的第一个字符。在这种情况下,它应该什么也不做。因为这个问题,我尝试了以下代码:

\documentclass{memoir}

\newcommand*\shybar{\leaders{\mbox\textbar}}

\begin{document}
\shybar This bar should not be printed, but \shybar this one should.
\end{document}

我插入了一个\mbox因为\leaders要求提供方框的命令。无论如何,它不起作用;它仍然要求提供方框。我该如何解决这个问题?

答案1

我突然想到\tikz[remember page,overlay]必须等到页面布局完成后才能正常工作。它也不会改变布局,因为它会覆盖现有文本。

\documentclass{memoir}
\usepackage{tikzpagenodes}

\newlength{\tempx}
\newlength{\tempy}

\newcommand*\shybar{\ifvmode\tikz[remember picture,overlay]% start of paragraph
{\pgfextracty{\tempy}{\pgfpointdiff{\pgfpointorigin}{\pgfpointanchor{current page text area}{north west}}}%
\ifdim\tempy<\baselineskip\relax%
\else\pgftext[base]{\textbar};\fi}%
\else\tikz[remember picture,overlay]% inside paragraph
{\let\p1=\pgfpointdiff{\pgfpointorigin}{\pgfpointanchor{current page text area}{north west}}%
\pgfextractx{\tempx}{\p1}%
\pgfextracty{\tempy}{\p1}%
\ifdim\tempy<\baselineskip \ifdim\tempx=0pt \relax%
\else\pgftext[base]{\textbar};\fi%
\else\pgftext[base]{\textbar};\fi}\fi%
\hspace*{1pt}}% reserve space

\begin{document}
\shybar This bar should not be printed, but \shybar this one should.

\rule{1pt}{7.1in}

Last line of page\newline
\shybar This bar should not be printed, but \shybar this one should.
\end{document}

这种方法在诸如悬挂缩进等方面存在问题。

相关内容