
Следующее решениеквопросгде текст с математикой должен быть отменен, использует пакет cancel
. Там макрос \cancelto
создает стрелку снизу слева направо вверх. Он также дает макрос, \bcancel
который дает зачеркивание сверху слева направо вниз.
Возможно ли создать макрос, который объединит эти два элемента вместе, что-то вроде \bcancelto
стрелки из левого верхнего угла в правый нижний угол?
Вот MWE:
\documentclass{article}
\usepackage{amsmath}
\usepackage[makeroom]{cancel}
\begin{document}
\noindent
\verb|\cancel{5y}|:
\[ x+\cancel{5y}=0\]
\verb|\bcancel{5y}|:
\[ x+\bcancel{5y}=0\]
\verb|\xcancel{5y}|:
\[ x+\xcancel{5y}=0\]
\verb|\cancelto{\infty}{5y}|:
\[ x+\cancelto{\infty}{5y}=0\]
\end{document}
решение1
Я представляю \bcancelto{label}{term}
, изменив одну из процедур пакетов. ОТРЕДАКТИРОВАНО для поддержки меток на \bcancelto
.
Изменение в \canto@vector
производстве \cantox@vector
сводилось к трем вещам:
1) добавление -
предыстории #4
в \vector
вызов;
2) Изменение ^
верхнего индекса на _
нижний перед \raise
; и
3) добавление -
знака перед #2
следующим \raise
.
Затем мне пришлось определить, \bcancelto
как сделать эту макроподстановку и вызвать ее \cancelto
с выполненной заменой.
\documentclass{article}
\usepackage{amsmath}
\usepackage[makeroom]{cancel}
\makeatletter
% #1, #2 offset of label #6 extra width to clear arrowhead
% #3, #4 vector direction #7 superscript label style
% #5 vector width #8 superscript label
\def\cantox@vector#1#2#3#4#5#6#7#8{%
\[email protected]\p@
\setbox\z@\vbox{\boxmaxdepth.5\p@
\hbox{\kern-1.2\p@\kern#1\dimen@$#7{#8}\m@th$}}%
\ifx\canto@fil\hidewidth \wd\z@\z@ \else \kern-#6\unitlength \fi
\ooalign{%
\canto@fil$\m@th \CancelColor
\vcenter{\hbox{\dimen@#6\unitlength \kern\dimen@
\multiply\dimen@#4\divide\dimen@#3 \vrule\@depth\dimen@\@width\z@
\vector(#3,-#4){#5}%
}}_{\raise-#2\dimen@\copy\z@\kern-\scriptspace}$%
\canto@fil \cr
\hfil \box\@tempboxa \kern\wd\z@ \hfil \cr}}
\def\bcancelto#1#2{\let\canto@vector\cantox@vector\cancelto{#1}{#2}}
\makeatother
\begin{document}
\noindent
\verb|\cancel{5y}|:
\[ x+\cancel{5y}=0\]
\verb|\bcancel{5y}|:
\[ x+\bcancel{5y}=0\]
\verb|\xcancel{5y}|:
\[ x+\xcancel{5y}=0\]
\verb|\cancelto{\infty}{5y}|:
\[ x+\cancelto{\infty}{5y}=0\]
\noindent NEW! \verb|\bcancelto{\infty}{5y}|:
\[ x+\bcancelto{\infty}{5y}=0\]
\end{document}
решение2
Вот решение TikZ.
\documentclass[varwidth,border=50]{standalone}
\usepackage{tikz}
\tikzset{
main node/.style={inner sep=0,outer sep=0},
label node/.style={inner sep=0,outer ysep=.2em,outer xsep=.4em,font=\scriptsize,overlay},
strike out/.style={shorten <=-.2em,shorten >=-.5em,overlay}
}
\newcommand{\cancelto}[3][]{\tikz[baseline=(N.base)]{
\node[main node](N){$#2$};
\node[label node,#1, anchor=south west] at (N.north east){$#3$};
\draw[strike out,-latex,#1] (N.south west) -- (N.north east);
}}
\newcommand{\bcancelto}[3][]{\tikz[baseline=(N.base)]{
\node[main node](N){$#2$};
\node[label node,#1, anchor=north west] at (N.south east){$#3$};
\draw[strike out,-latex,#1] (N.north west) -- (N.south east);
}}
\begin{document}
\cancelto[orange]{test}{Oooo!}
and math
$\sqrt{\cancelto[red]{x}{\infty}}$
\bcancelto[orange]{test}{Oooo!}
and math
$\sqrt{\bcancelto[red]{x}{\infty}}$
\end{document}