我正在尝试编写一个新命令,该命令会插入一个带有输入的颜色框。这适用于常规文本和数学输入,但在数学环境中,它会抛出“缺少 $ 插入”错误。
\documentclass{article}
\usepackage{amsmath,color}
% I've got several environments for conditional rendering, here's one
\newenvironment{filled}{\ifdefined\filledflag\else\setbox0\vbox\fi\bgroup}{\par\egroup}
% my command
\newcommand{\clozecontentinline}[1]{
\begin{filled}
\colorbox{white}{#1}
\end{filled}
}
\begin{document}
\def\filledflag{}
%% working
\begin{align*}
a=b+\colorbox{white}{$c$}
\end{align*}
%% not working
\begin{align*}
a=b+\clozecontentinline{c}\\
a=b+\clozecontentinline{$c$} % both won't work, missing $ inserted for both
\end{align*}
\end{document}
提前致谢
答案1
在所示的情况下(标志已定义),您正在以\par
不允许的数学模式插入。
\documentclass{article}
\usepackage{amsmath,color}
\newbox\zzbox
% I've got several environments for conditional rendering, here's one
\newenvironment{filled}{\relax\ifdefined\filledflag\else\setbox\zzbox\vbox\fi\bgroup}
{\ifdefined\filledflag\else\par\fi\egroup}
% my command
\newcommand{\clozecontentinline}[1]{%
\begin{filled}
\colorbox{white}{#1}
\end{filled}%
}
\begin{document}
\def\filledflag{}
%% working
\begin{align*}
a=b+\colorbox{white}{$c$}
\end{align*}
%% not working
\begin{align*}
a=b+\clozecontentinline{c}\\
a=b+\clozecontentinline{$c$} % both won't work, missing $ inserted for both
\end{align*}
\end{document}
但是这里的 vbox 相当可疑,包含的段落会被拆分为多行\textwidth
宽?另外,align
永远不要在没有对齐点 () 的情况下使用,&
因此不清楚此代码的意图是什么,但现在运行时没有错误。