12

I'm trying to use \cancel from the cancel package to strike out some colored text but it is apparent that the diagonal line is drawn first so it doesn't do a very good job of canceling. enter image description here

Minimal example.

\documentclass{article}
\usepackage{xcolor,cancel}
\begin{document}
\leavevmode
\cancel{\textcolor{red}{T}}
\textcolor{red}{T}\llap{\cancel{\phantom{T}}}
\end{document}

I can obviously use the \llap, but that is suboptimal. Is there a better way?

TH.
  • 62,639
  • 7
    Probably the best answer is going to be 'take the code and alter it to reverse the order'! – Joseph Wright Apr 15 '11 at 19:54
  • or use TikZ instead! – Martin Scharrer Apr 15 '11 at 21:01
  • @Joseph: You're probably right about that. Maybe I'll take a look when I get some spare time. – TH. Apr 15 '11 at 22:51
  • 1
    I think your solution with \llap is the easiest way so far. I had a look at the docs, a hack is not easy. Suggestion cancel the word "suboptimal" in you question:) Certainly TikZ is not the answer for this. – yannisl Apr 16 '11 at 17:13
  • 2
    @Yiannis: That's herasy! TikZ is the answer to everything. Indeed, when computed according to the Magrathean system, the numerical value of TikZ is 42. – Andrew Stacey Apr 16 '11 at 17:57

1 Answers1

12

Using Tikz :

\newcommand{\cancel}[1]{%
    \tikz[baseline=(tocancel.base)]{
        \node[inner sep=0pt,outer sep=0pt] (tocancel) {#1};
        \draw[red] (tocancel.south west) -- (tocancel.north east);
    }%
}%

This is a \cancel{test}

Another possibility with Tikz is to use the strike out shape:

\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{shapes.misc}


\begin{document}
Strike \tikz[baseline] \node [strike out,draw=red,anchor=text] {me}; out!
\end{document}

Using pstricks, in the pstricks-add package :

%in preamble
\usepackage{pstricks,pstricks-add}

%in document
%example taken from pstricks-add documentation
\psCancel[linecolor=red]{Tikz :-)}

Edit 1 : I just realized that the \psCancel macro draws the mark before the text to cancel, same as for the cancel package. If you want the mark above the text, I guess you should use Tikz.

Edit 2 : Incorporated suggestions about baseline into the Tikz code

Frédéric
  • 11,087
  • 3
  • 37
  • 43
  • 1
    You should add the baseline=(tocancel.base) option to \tikz to make sure that the baseline doesn't change. Try a \cancel{Ag} or \cancel{test\strut} to see the difference. Also you need % after the first { and the closing } of \tikz to avoid spurious spaces. – Martin Scharrer Apr 16 '11 at 17:49