为什么使用 amsmath 包会破坏以下代码?

为什么使用 amsmath 包会破坏以下代码?

我正在尝试找到一种方法来隐藏数学环境中的表达式。我找到了一个解决方案,由 Steven B. Segletes 提供,网址为

隐藏部分文字,留下空白

但是,当我添加 amsmath 包时,它就崩溃了,并显示错误“缺少 $ 插入”。我在下面提供了一个 MWE 示例。如果我删除\usepackage{amsmath},它会编译。如果我删除\frac命令,它会编译。

\documentclass{article}

\usepackage{amsmath}

\usepackage{censor}
\usepackage{stackengine}
\usepackage{scalerel}

\censorruleheight=0ex

\makeatletter
\long\def\blackout#1{%
 \def~{-}%
 \protected@edef\save@arg{#1}%
 \expandafter\censor@Block\save@arg\stringend\let~\sv@tilde}
 \let\sv@cenword\@cenword
\newcommand\m@cenword[1]{\ThisStyle{%
\stackengine{\mcensorruledepth}{$\SavedStyle\phantom{#1}$}%
{\rule{\widthof{$\SavedStyle#1$}}{\the\censorruleheight}}{U}{c}{F}{T}{L}}}
\newcommand\mblackout[2][\dp\strutbox]{%
 \let\@cenword\m@cenword%
\def\mcensorruledepth{#1}%
\blackout{{#2}}%
\let\@cenword\sv@cenword%
}
\makeatother

\begin{document}

\[\mblackout{\frac{a}{b}} \]

\end{document}

答案1

随着该软件包 4.2 版本的censor推出,数学文本在某种程度上是自动处理的。例如:

\documentclass{article}
\usepackage{amsmath}
\usepackage{censor}
%\censorruleheight=0ex
\begin{document}
\[y = \blackout{x = \frac{a_{1}}{b_{2}}} \cdot \frac{1}{2} \]

\[y = x = \frac{a_1}{b_2} \cdot \frac{1}{2} \]

$\beta / \blackout{\alpha} \times 3$

$\beta / \alpha \times 3$
\end{document}

产量

在此处输入图片描述

请注意以下几点:1)非文本宏\frac本身不受审查,只有分子和分母不受审查文本受到审查(因此连字符显示),并且 2)即使是单个标记,也必须包含受到审查的下标和上标。

因此,对于当前问题,其中\censorruleheight可以将设置为0pt,联结保持不变:

在此处输入图片描述

原始答案

您可以在自己的组中设置有问题的宏(通过括号),然后无论有没有,它们都可以设置得很好amsmath

\documentclass{article}

\usepackage{amsmath}

\usepackage{censor}
\usepackage{stackengine}
\usepackage{scalerel}

\censorruleheight=0ex

\makeatletter
\long\def\blackout#1{%
 \def~{-}%
 \protected@edef\save@arg{#1}%
 \expandafter\censor@Block\save@arg\stringend\let~\sv@tilde}
 \let\sv@cenword\@cenword
\newcommand\m@cenword[1]{\ThisStyle{%
\stackengine{\mcensorruledepth}{$\SavedStyle\phantom{#1}$}%
{\rule{\widthof{$\SavedStyle#1$}}{\the\censorruleheight}}{U}{c}{F}{T}{L}}}
\newcommand\mblackout[2][\dp\strutbox]{%
 \let\@cenword\m@cenword%
\def\mcensorruledepth{#1}%
\blackout{{#2}}%
\let\@cenword\sv@cenword%
}
\makeatother

\begin{document}
\[y = \mblackout{x = {\frac{a}{b}}} \cdot \frac{1}{2} \]

\[y = x = \frac{a}{b} \cdot \frac{1}{2} \]

$\beta / \mblackout{{\alpha}} \times 3$

$\beta / \alpha \times 3$
\end{document}

在此处输入图片描述

答案2

为什么不直接使用\phantom{...}\phantom它只会在页面上放置(精确测量的)空间。

当然,您必须小心保持&和其他格式指令的正确同步,但如何做到这一点应该是相当明显的。

\documentclass{article}
\usepackage{amsmath}

\begin{document}

\[ abc\phantom{def}ghi \]

first, the example without \verb+\phantom+s:
\begin{align*}
 abc &= def\\
 ghi &= \frac{1}{m}jklmnopq\\
 rst &> \frac{1}{2}

\end{align*}
this even works in $abc\tfrac{1}{1+n}de$ in-line text.

now, apply \verb+\phantom+ to selected elements:
\begin{align*}
 abc &= def\\
 g\phantom{h}i &= \phantom{\frac{1}{m}}jk\phantom{lmn}opq\\
 rs\phantom{t} &> \frac{1}{2}
\end{align*}
this even works in $ab\phantom{c\tfrac{1}{1+n}}de$ in-line text.

\end{document}

示例代码的输出

相关内容