Как зачеркнуть слово в LaTex

Как зачеркнуть слово в LaTex

Как можно зачеркнуть слово в предложении в Latex без использования пакета?

МВЭ:

\documentclass{article}
\usepackage{cancel}
\begin{document}
%BeginDocument
The first \xcancel{three commands} work in text mode also i.e.,\xcancel{science}
%End Document
\end{document}

решение1

Ваш профессор должен знать лучше. Это ничему не учит о LaTeX, по моему мнению; использование пакетовявляетсяпуть.

Но вот он; он включает в себя (возможно, слишком неуклюжую) реализацию алгоритма Евклида для наибольшего общего делителя, чтобы передать правильную пару значений в \line.

\documentclass{article}

\makeatletter
\newcommand{\crossout}[1]{%
  \begingroup
  \settowidth{\dimen@}{#1}%
  \setlength{\unitlength}{0.05\dimen@}%
  \settoheight{\dimen@}{#1}%
  \count@=\dimen@
  \divide\count@ by \unitlength
  \count0=20 \count4=\count@
  \loop
  \count2=\count0 % keep a copy
  \divide\count2\count4 \multiply\count2\count4
  \ifnum\count2<\count0
    \advance\count0 -\count2 % the remainder
    \count2=\count0
    \count0=\count4
    \count4=\count2
  \repeat
  \count0=20 \divide\count0\count4
  \count2=\count@ \divide\count2\count4
  \begin{picture}(0,0)
  \put(0,0){\line(\count0,\count2){20}}
  \put(0,\count@){\line(\count0,-\count2){20}}
  \end{picture}%
  #1%
  \endgroup
}
\makeatother

\begin{document}

This word is \crossout{crossed} out

\end{document}

введите описание изображения здесь

Конечно, представление этого решения было бы мошенничеством. И, нет, это не будет работать во всех случаях из-за строгих ограничений на пары, принятые \line. Ваш профессорконечнознает, что TeX не рисует косые линии.

Сстандартныйупаковать pict2eего проще и он будет работать в любом случае.

\documentclass{article}
\usepackage{pict2e}

\makeatletter
\newcommand{\crossout}[1]{%
  \begingroup
  \settowidth{\dimen@}{#1}%
  \setlength{\unitlength}{0.05\dimen@}%
  \settoheight{\dimen@}{#1}%
  \count@=\dimen@
  \divide\count@ by \unitlength
  \begin{picture}(0,0)
  \put(0,0){\line(20,\count@){20}}
  \put(0,\count@){\line(20,-\count@){20}}
  \end{picture}%
  #1%
  \endgroup
}
\makeatother

\begin{document}

This word is \crossout{crossed} out

\crossout{word}

\crossout{U}

\end{document}

введите описание изображения здесь


Другое решение (только pdftex или luatex)

\documentclass{article}

\makeatletter
\newcommand{\crossout}[1]{%
  \begingroup
  \sbox\z@{#1}%
  \dimen\z@=\wd\z@
  \dimen\tw@=\ht\z@
  \dimen\z@=.99626\dimen\z@   % get big points
  \dimen\tw@=.99626\dimen\tw@ % get big points
  \edef\co@wd{\strip@pt\dimen\z@}%  just the number
  \edef\co@ht{\strip@pt\dimen\tw@}% just the number
  \leavevmode
  \rlap{\pdfliteral{q 1 J 0.4 w 0 0 m \co@wd\space \co@ht\space l S Q}}%
  \rlap{\pdfliteral{q 1 J 0.4 w 0 \co@ht\space m \co@wd\space 0 l S Q}}%
  #1%
  \endgroup
}
\makeatother

\begin{document}

This is \crossout{crossed} out

\end{document}

введите описание изображения здесь

решение2

Ваш профессор хочет, чтобы вы изучали TeX, он мудрый человек! Попробуйте код ниже.

\documentclass{article}
\usepackage{xcolor}
    \makeatletter
    \newbox\@tempboxb
    \def\cancel#1{%
      \leavevmode
      \setbox\@tempboxa\hbox{#1}
      \setbox\@tempboxb\hbox{x}
       \hbox to 0pt{\hbox to \wd\@tempboxa {\color{red}\leaders\copy\@tempboxb\hfill\kern0pt}}#1}
    \makeatother
\begin{document}
This is \cancel{a very long word}
\end{document}

Подход заключается в том, чтобы поместить слова в рамку и измерить ширину. Затем начертить над ней линейку (используя выноски, можно использовать любой символ, например xили -). Пакет, такой как , ulemбудет использовать более сложные макросы для предоставления методов корректировки перекрестных линий, подчеркивания и т. д.

Связанный контент