检查是否在一行的开头

检查是否在一行的开头

对于以项目符号分隔的项目列表,如果分隔符是行的第一个或最后一个元素,我希望将其吞掉。也就是说,我想要类似

\renewcommand{\and}{%
  \ifnolinebreak%    <=== HERE'S THE PROBLEM
    {\hfill\textbullet\hfill\xspace}%
  \else{}\fi
}
Aa Bb \and Cc Dd \and veryveryverylongE \and Ff Gg \and H

最终

Aa Bb   *   Cc Dd
veryveryverylongE
Ff Gg     *     H

我知道\discretionary可以通过以下方式利用它:

\renewcommand{\and}{\discretionary{}{}{\mbox{~~{\textbullet}~~}}}

这确实能解决问题,但不幸的是,我找不到在自由定义中插入可伸缩跳过的方法。因此,它在对齐模式下看起来很尴尬:

Aa   Bb * Cc   Dd
veryveryverylongE
Ff         Gg * H

有什么想法如何实现吗\ifnolinebreak?如果重要的话,对于这个项目我使用 LuaLaTeX...

答案1

借用 Marcin Woliński 的代码作为 TeX pearl 发布“如何让换行符处的方框消失”一个人可以

\documentclass{article}
\newcommand{\AND}{\unskip
  \hskip 2pt plus 1pt minus 1pt
  \cleaders\copy\ANDbox\hskip\wd\ANDbox
  \hskip 2pt plus 1pt minus 1pt
  \ignorespaces}
\newsavebox\ANDbox
\sbox\ANDbox{\textbullet}

\begin{document}
\settowidth{\dimen0}{someveryverylongword}
\parbox{\dimen0}{
some text \AND some text \AND
someveryverylongword \AND
text \AND text}
\end{document}

在此处输入图片描述

相关内容