改变颜色的 ifcase 命令不起作用

改变颜色的 ifcase 命令不起作用

我正在创建一份讲义,其中有一个命令可以隐藏学生的答案并显示教师的答案。我定义了一个invisible接受布尔值和文本的新命令。如果是0,文本应该保持不变。如果是1,文本应该以白色打印,使其在纸上不可见。但是在这个例子中,无论布尔值如何,文本都会被打印。我创建了另一个命令,altinvisible其中文本不是参数。它没有解决问题。这里有什么问题?

\documentclass{article}
\usepackage{tikz}
\newcommand{\invisible}[2]{\ifcase#1\or\expandafter\textcolor{white}\fi{#2}}
\newcommand{\altinvisible}[1]{\ifcase#1\or\expandafter\textcolor{white}\fi}

\title{}
\author{}
\begin{document}

{3.14}

\textcolor{white}{3.14}

\invisible{0}{3.14}

\invisible{1}{3.14}

\altinvisible{0}{3.14}

\altinvisible{1}{3.14}

\end{document}

答案1

如果您不完全了解 TeX 的宏和原语(例如\expandafter本例)的工作原理,我建议编写不使用它们的易于理解的宏(请参阅\invisible我的答案中的修改后的宏)(可能以编译速度稍慢为代价)。

如果您想学习,有几种方法。请参阅\altinvisible下面\altbinvisible的宏。

学习资料:

tl;dr 在这种情况下,错误在于您可以清楚地看到,如果和之间有多个标记,则\expandafter不能用于早期执行。\fi\expandafter\fi

\documentclass{article}
\usepackage{tikz}
\newcommand{\textcolorwhite}{\textcolor{white}}
\newcommand{\invisible}[2]{\ifcase#1 #2\or\textcolor{white}{#2}\fi}
\newcommand{\altinvisible}[1]{\ifcase#1\or\expandafter\textcolorwhite\fi}
\makeatletter
\newcommand{\altbinvisible}[1]{\ifcase#1\or\expandafter\@gobble\fi}
\makeatother

\title{}
\author{}
\begin{document}

visible: {3.14}

invisible: \textcolor{white}{3.14}

visible: \invisible{0}{3.14}

invisible: \invisible{1}{3.14}

visible: \altinvisible{0}{3.14}

visible: \altbinvisible{0}{3.14}

invisible: \altinvisible{1}{3.14}

invisible: \altbinvisible{1}{3.14}

\end{document}

相关内容