我想要一个\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}
这种方法在诸如悬挂缩进等方面存在问题。