So streichen Sie ein Wort in LaTex durch

So streichen Sie ein Wort in LaTex durch

Wie kann ich in Latex ein Wort in einem Satz streichen, ohne ein Paket zu verwenden?

MWE:

\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}

Antwort1

Ihr Professor sollte es besser wissen. Meiner Meinung nach lernt man hier nichts über LaTeX; die Verwendung von PaketenIstder Weg.

Aber hier ist es; es enthält eine (vielleicht zu schwerfällige) Implementierung des euklidischen Algorithmus für den größten gemeinsamen Teiler, um ein korrektes Wertepaar an zu übergeben \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}

Bildbeschreibung hier eingeben

Natürlich wäre es Betrug, diese Lösung zu präsentieren. Und nein, sie wird nicht in allen Fällen funktionieren, da es strenge Beschränkungen für die von akzeptierten Paare gibt \line. Ihr Professorsicherlichweiß, dass TeX keine schrägen Linien zeichnet.

Mit demStandardPaket pict2e, es ist einfacher und es wird auf jeden Fall funktionieren.

\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}

Bildbeschreibung hier eingeben


Eine andere Lösung (nur pdftex oder 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}

Bildbeschreibung hier eingeben

Antwort2

Ihr Professor möchte, dass Sie TeX lernen. Er ist ein weiser Mann! Probieren Sie den folgenden Code aus.

\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}

Der Ansatz besteht darin, die Wörter in ein Kästchen zu setzen und die Breite zu messen. Zeichnen Sie dann eine Linie (mit Linienführung, Sie können jedes beliebige Symbol wie xoder verwenden -) darüber. Ein Paket wie ulemverwendet ausgefeiltere Makros, um Methoden zum Anpassen der Querlinien, Unterstreichungen usw. bereitzustellen.

verwandte Informationen