TikZ で cancel

cancel.sty が提供する cancel、cancelto、bcancel に加え、bcancelto に相当するコマンドを TikZ で実現する方法の覚書です。

はじめに

cancel.sty を使ってみると、以下の問題があることに気づきます。

  • 大きな数式に適用すると、斜線がずれてしまう場合がある。
  • cancelto の鏃が長く、ブサイクになる。
  • bcancelto コマンドが存在しない。

TikZ を使って、cancel.sty の上位互換となるコマンド cancel、cancelto、bcancel、bcancelto を定義すれば、これらを解消できます。

参考にさせていただいたサイト(というかほぼそのまま):ありがとうございました

LaTeX コマンド

\usepackage{tikz}
\usetikzlibrary{calc}

\newcommand\cancel[1]{%
  \begin{tikzpicture}[baseline = (B.base)]
    \node[anchor = center, inner sep = 0pt] (B) {$#1$};
    \draw ($(B.south west)+(-2pt, -2pt)$) -- ($(B.north east)+(+2pt, +2pt)$);
  \end{tikzpicture}%
}
\newcommand\bcancel[1]{%
  \begin{tikzpicture}[baseline = (B.base)]
    \node[anchor = center, inner sep = 0pt] (B) {$#1$};
    \draw ($(B.north west)+(-2pt, +2pt)$) -- ($(B.south east)+(+2pt, -2pt)$);
  \end{tikzpicture}%
}
\newcommand\cancelto[2]{%
  \begin{tikzpicture}[baseline = (B.base)]
    \node[anchor = center, inner sep = 0pt] (B) {$#2$};
    \draw[arrows = {}->]%
    ($(B.south west)+(-2pt, -2pt)$) -- ($(B.north east)+(+3pt, +3pt)$)%
    node [anchor = south west, xshift = +1pt, yshift = +1pt,%
    inner sep = 0pt]%
    {\scriptsize $#1$};
  \end{tikzpicture}%
}
\newcommand\bcancelto[2]{%
  \begin{tikzpicture}[baseline = (B.base)]
    \node[anchor = center, inner sep = 0pt] (B) {$#2$};
    \draw[arrows = {}->]%
    ($(B.north west)+(-2pt, +2pt)$) -- ($(B.south east)+(+3pt, -3pt)$)%
    node [anchor = north west, xshift = +1pt, yshift = -1pt,%
    inner sep = 0pt]%
    {\scriptsize $#1$};
  \end{tikzpicture}%
}

サンプル

\[
\frac{\cancel{2 \cdot 1} \times \cancelto{3}{6} \times \bcancel{5} \times \bcancelto{2}{8}}%
{\cancel{2 \cdot 1} \times \cancelto{1}{2} \times \bcancel{5} \times \bcancelto{1}{4}}
\]

カテゴリーTeX