除非被文字包围,否则胶水可以无限收缩吗?

除非被文字包围,否则胶水可以无限收缩吗?

假设\a\b是两个扩展为某个文本的宏,其中一个可能是,\empty但不能同时是。我想将\a\b放在一行中,居中并用 分隔\quad

\hfil\a\quad\b\hfil

问题:如果\a或中的一个\b\empty,那么\quad会阻止文本正确居中。理想情况下,我需要在 和 之间使用一些胶水,\a如果\b直接与可无限拉伸的胶水接触,胶水会收缩到零。

答案1

可以测试定义\a\b是否\empty

\a
\ifx\a\empty
\else
  \ifx\b\empty
  \else
    \quad
  \fi
\fi
\b

答案2

您可以使用 \unskip 删除空 \b 前的 \quad。您可以通过检查 \lastskip 的 \gluestretchorder 来测试空 \a:

\documentclass[parskip=half-]{scrartcl}
\usepackage{lipsum}


\begin{document}
\lipsum[1]

\def\a{balbalbablabl} \def\b{balbalbablabl}

\hfil\a\ifnum\gluestretchorder\lastskip>0\else\quad\fi\b\unskip \hfil

\def\a{balbalbablabl} \def\b{}

\hfil\a\ifnum\gluestretchorder\lastskip>0\else\quad\fi\b\unskip \hfil

\def\a{} \def\b{balbalbablabl}

\hfil\a\ifnum\gluestretchorder\lastskip>0\else\quad\fi\b\unskip \hfil

\hfil balbalbablabl\hfil

\end{document}

相关内容