假设\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}