このコマンドを論文で定義して正常に動作させましたが、他のドキュメントに含めようとすると動作しません (コンパイラーはコマンドが定義されていないと報告します)。何を定義/含め忘れたのでしょうか?
\documentclass{article}
\usepackage[normalem]{ulem}
\usepackage{xcolor}
\def\revisionHighlight{True}
\def\revisionHighlightOld{True}
\newcommand{\correction}[2]{% old word, new word
\ifnum\pdfstrcmp{\revisionHighlight}{True}=0%
\ifnum\pdfstrcmp{\revisionHighlightOld}{True}=0%
\stkout{#1}\textcolor{red}{#2}%
\else%
\ifx&%
\ignorespaces
\else
\textcolor{red}{#2}%
\fi
\fi
\else%
\ifx&%
\ignorespaces
\else
#2%
\fi
\fi}
\begin{document}
\correction{a}{b}
\end{document}
答え1
私の知る限り、テキストを取り消し線を引くマクロは\sout
ではなく と呼ばれます\stkout
。
%
行末、つまり の後にいくつかの bad があることに注意してください=0
。
\documentclass{article}
\usepackage[normalem]{ulem}
\usepackage{xcolor}
\def\revisionHighlight{True}
\def\revisionHighlightOld{True}
\newcommand{\correction}[2]{% old word, new word
\ifnum\pdfstrcmp{\revisionHighlight}{True}=0
\ifnum\pdfstrcmp{\revisionHighlightOld}{True}=0
\sout{#1}\textcolor{red}{#2}%
\else
\ifx&%
\ignorespaces
\else
\textcolor{red}{#2}%
\fi
\fi
\else
\ifx&%
\ignorespaces
\else
#2%
\fi
\fi}
\begin{document}
\correction{a}{b}
\end{document}
ただし、に基づいたアプローチの方が好ましいです\newif
。
\documentclass{article}
\usepackage[normalem]{ulem}
\usepackage{xcolor}
\newif\ifrevisionHighlight
\revisionHighlighttrue
\newif\ifrevisionHighlightOld
\revisionHighlightOldtrue
\newcommand{\correction}[2]{% old word, new word
\ifrevisionHighlight
\ifrevisionHighlightOld
\sout{#1}\textcolor{red}{#2}%
\else
\if\relax\detokenize{#2}\relax
\ignorespaces
\else
\textcolor{red}{#2}%
\fi
\fi
\else
\if\relax\detokenize{#2}\relax
\ignorespaces
\else
#2%
\fi
\fi}
\begin{document}
\correction{a}{b}
\end{document}