考虑 MWE
\documentclass{article}
\textheight 8.25in \textwidth 4.75in
\usepackage{scalefnt}
\usepackage{amsmath,amssymb}
%\blacksquare\hspace*{.7em}
\usepackage{stackengine,xcolor,lipsum}
\let\svitem\item
\newcommand\difbox[1]{\stackengine{0pt}{\color{white}\rule{5ex}{1.15ex}}{%
$\iftrue\makeballs#1\fi$}{O}{c}{F}{F}{L} }
\def\makeballs#1#2\fi{\fi\ifx R#1\textcolor{red}{\blacksquare}\else
\ifx B#1\textcolor{blue!35}{\blacksquare}\fi\fi%
\ifx\relax#2\relax\else\makeballs#2\fi}
\newenvironment{benumerate}
{\renewcommand\item[1][1]{\def\difficulty{##1}\svitem}%
\def\labelenumi{\smash{\stackunder[5pt]{\color{blue!65!black}%
\bfseries\sffamily\theenumi}{\expandafter\difbox\expandafter{\difficulty}}}}%
\enumerate}{\endenumerate}
\begin{document}
\large
\begin{benumerate}
\setcounter{enumi}{0}
\item[RBRRBR] \lipsum[11]
\item[RRR] \lipsum[39]
\item[BRRRB] \lipsum[13]
\end{benumerate}
\end{document}
带输出
我想扩大彩色方块之间的间隙;但是当我将两个实例都替换\blacksquare
为\blacksquare\hspace*{.7em}
--- 时,我得到了我想要的额外间距,但相对于上面的枚举,新的水平堆栈似乎没有对齐;即,没有位于上述数字下方的中心,如下所示:
现在,第一个输出中的对齐并不完美,但相当准确。然而,第二个输出中的对齐显然没有在相应数字下方居中。
问题:我怎样才能增加原始输出的彩色框之间的间隙,以便彩色方块的水平堆栈合理地位于上方数字的正下方?
谢谢。
答案1
您可以\unskip
在末尾使用来删除导致偏移的尾随空格:
\documentclass{article}
\textheight 8.25in \textwidth 4.75in
\usepackage{scalefnt}
\usepackage{amsmath,amssymb}
\usepackage{stackengine,xcolor,lipsum}
\let\svitem\item
\newcommand\difbox[1]{\stackengine{0pt}{\color{white}\rule{5ex}{1.15ex}}{\makeballs{#1}}{O}{c}{F}{F}{L}}
\newcommand\makeballs[1]{$\iftrue\makeballsA#1\fi \unskip$}
\def\makeballsA#1#2\fi{\fi
\ifx R#1\textcolor{red}{\blacksquare}\else
\ifx B#1\textcolor{blue!35}{\blacksquare}\fi\fi \hspace{.7em}%
\ifx\relax#2\relax \else\makeballsA#2\fi}
\newenvironment{benumerate}
{\renewcommand\item[1][1]{\def\difficulty{##1}\svitem}%
\def\labelenumi{\smash{\stackunder[5pt]{\color{blue!65!black}%
\bfseries\sffamily\theenumi}{\expandafter\difbox\expandafter{\difficulty}}}}%
\enumerate}{\endenumerate}
\begin{document}
\large
\begin{benumerate}
\setcounter{enumi}{0}
\item[RBRRBR] \lipsum[11]
\item[RRR] \lipsum[39]
\item[BRRRB] \lipsum[13]
\end{benumerate}
\end{document}
在这里我将其抽象\makeballs
为一个单独的宏,以便可以在其他地方重复使用,而不必关注实际的工作细节。
此外,这里必须使用\hspace
(无星号)或,因为会添加中间框。\hskip
\hspace*
附录:另一种方法是仅在有下一次迭代时才添加空格。
\newcommand\makeballs[1]{$\iftrue\makeballsA#1\fi$}
\def\makeballsA#1#2\fi{\fi
\ifx R#1\textcolor{red}{\blacksquare}\else
\ifx B#1\textcolor{blue!35}{\blacksquare}\fi\fi
\ifx\relax#2\relax \else\hspace{.7em}\makeballsA#2\fi}