在 varwidth 环境中使用 \color 会产生警告,并且无法按预期工作

在 varwidth 环境中使用 \color 会产生警告,并且无法按预期工作

尝试在varwidth环境中使用颜色时,我偶然发现了来自软件包的警告varwidth。检查问题并尝试在\parbox环境中执行相同操作minipage会导致以下 MWE:

\documentclass{article}

\usepackage{xcolor}
\usepackage{varwidth}


\begin{document}

\begin{tabular}{lll}
\verb|\parbox| & \verb|\minipage| & \verb|\varwidth| \\

%without color, everything works as expected.
\parbox[t]{4em}{
%  \color{red}
  test
}abc &
\begin{minipage}[t]{4em}
%  \color{red}
  test
\end{minipage}
abc &
\begin{varwidth}[t]{4em}
%  \color{red}
  test
\end{varwidth}
abc\\

% but using \color needs \leavevmode and breaks varwidth
\parbox[t]{4em}{
  \leavevmode
  \color{red}
  test
}abc &
\begin{minipage}[t]{4em}
  \leavevmode
  \color{red}
  test
\end{minipage}
abc &
% throws error (twice):
% Package varwidth Warning: Failed to reprocess entire contents on input line 45.
\begin{varwidth}[t]{4em}
  \leavevmode\color{red}
  test
\end{varwidth}% this is line 45
abc
\end{tabular}

\end{document}

MWE 结果

两次产生以下警告

包 varwidth 警告:无法重新处理输入行 45 上的全部内容。

如您所见,如果插入 ,则可以在es 和s\color中使用,但它会破坏环境并发出警告。其行为类似于不带 的。\parboxminipage\leavevmodevarwidth\parbox\leavevmode

这个问题能(轻松)解决吗?还有其他解决方法吗varwidth

为了澄清我想要什么:我想在varwidth按预期工作的环境中使用颜色:放置在没有颜色的线条中。

答案1

您可以使用\textcolor

\begin{varwidth}[t]{4em}
  \textcolor{red}{test}
\end{varwidth}

或附加组:

\begin{varwidth}[t]{4em}
  \leavevmode
  {\color{red}
  test}
\end{varwidth}

例子:

\documentclass{article}
\usepackage{xcolor}
\usepackage{varwidth}
\begin{document}
\begin{tabular}{lll}
\verb|\parbox| & \verb|\minipage| & \verb|\varwidth| \\

\parbox[t]{4em}{
  test
}abc &
\begin{minipage}[t]{4em}
  test
\end{minipage}
abc &
\begin{varwidth}[t]{4em}
  test
\end{varwidth}
abc\\

\parbox[t]{4em}{
  \textcolor{red}{test}
}abc &
\begin{minipage}[t]{4em}
  \textcolor{red}{test}
\end{minipage}
abc &
\begin{varwidth}[t]{4em}
  \textcolor{red}{test}
\end{varwidth}
abc
\\
\parbox[t]{4em}{
  \leavevmode
  \color{red}
  test
}abc &
\begin{minipage}[t]{4em}
  \leavevmode
  \color{red}
  test
\end{minipage}
abc &
\begin{varwidth}[t]{4em}
  \leavevmode
  {\color{red}
  test}
\end{varwidth}
abc
\end{tabular}
\end{document}

结果:

在此处输入图片描述

答案2

minipage或开头总是会产生在顶部产生空白行的副作用。您可以使用以下方法解决问题\parbox\color

\begin{minipage}[t]{4em}
\leavevmode\color{red}% <--- don't forget
test
\end{minipage}

然而,这对 不起作用varwidth。你可以改为开始着色外部环境varwidth

\documentclass{article}

\usepackage{xcolor}
\usepackage{varwidth}

\newenvironment{colorvarwidth}[1]
 {\leavevmode\color{#1}\varwidth}
 {\endvarwidth}

\begin{document}

\begin{tabular}{lll}
\verb|\parbox| & \verb|\minipage| & \verb|\varwidth| \\

%without color, everything works as expected.
\parbox[t]{4em}{
  \leavevmode\color{red}%
  test
}abc &
\begin{minipage}[t]{4em}
  \leavevmode\color{red}%
  test
\end{minipage}
abc &
\begin{colorvarwidth}{red}[t]{4em}
  test
\end{colorvarwidth}
abc
\end{tabular}

\end{document}

在此处输入图片描述

相关内容