如何隐藏自定义命令而不留下空格?

如何隐藏自定义命令而不留下空格?

为了注释文档,我定义了如下命令:

\DeclareDocumentCommand \commment { o m } {%
    \stepcounter{commentcounter}
    \ifhidecomments
    \else \IfNoValueTF{#1}{%
        \textsf{\textcolor{Red}{\footnotesize[Comment:\;#2]}}%
    }{%
        \textsf{\textcolor{lightgray}{\footnotesize[Comment:\;#2]}}%
    }%
    \fi
}

在文本中,您可以通过执行操作嵌入评论\comment{blah blah blah},它将像[Comment: blah blah blah]在文本中一样呈现,但显示为红色。如果您希望评论以灰色呈现(保留它但表明它已被解决),您可以执行操作\comment[]{blah blah blah},即传递一个空的可选参数。

现在,我想要的是能够隐藏所有评论无踪无迹使用单个命令(而不是手动删除它们)。我的 DocumentCommand 中有一个 if-else 语句,如果\hidecommentstrue在文档中指定,则不会呈现注释。当我使用该命令时,确实隐藏了所有注释。不幸的是,它可能会弄乱单词之间的间距。例如,如果我有word1 \comment{blah} word1和我做,那么和\hidecommentstrue之间会有额外的空格,如果我实际删除,则不会出现该空格。word1word2\comment

我可以在命令中添加一些内容来修复此问题吗?还是没有办法手动删除注释?

这是一个最小工作示例:

\documentclass{article}
\usepackage{lipsum}
\usepackage[dvipsnames]{xcolor}

\usepackage{totcount}
\newif\ifhidecomments
\newtotcounter{commentcounter}
\setcounter{commentcounter}{0}
\DeclareDocumentCommand \comment { o m } {%
    \stepcounter{commentcounter}
    \ifhidecomments
    \else \IfNoValueTF{#1}{%
        \textsf{\textcolor{Red}{\footnotesize[Comment:\;#2]}}%
    }{%
        \textsf{\textcolor{lightgray}{\footnotesize[Comment:\;#2]}}%
    }%
    \fi
}

% \hidecommentstrue

\begin{document}

\lipsum[1]
\comment{this is a comment}
\lipsum[1] 

\end{document}

答案1

该问题属于以下一种:由于未注释行尾而导致的意外空格。你可以使用一个以上的百分比来修复它\ignorespaces

\documentclass{article}
\usepackage{lipsum}
\usepackage[dvipsnames]{xcolor}

\usepackage{totcount}
\newif\ifhidecomments
\newtotcounter{commentcounter}
\setcounter{commentcounter}{0}
\DeclareDocumentCommand \comment { o m } {%
    \stepcounter{commentcounter}% <-- percent needed!
    \ifhidecomments
      \ignorespaces
    \else
    \IfNoValueTF{#1}{%
        \textsf{\textcolor{Red}{\footnotesize[Comment:\;#2]}}%
    }{%
        \textsf{\textcolor{lightgray}{\footnotesize[Comment:\;#2]}}%
    }%
    \fi
}

\begin{document}

\lipsum[1]
\comment{this is a comment}
\lipsum[1]

\hidecommentstrue
\lipsum[1]
\comment{this is a comment}
\lipsum[1]

\end{document}

在此处输入图片描述

或者另外两个百分比和一个空格:

\documentclass{article}
\usepackage{lipsum}
\usepackage[dvipsnames]{xcolor}

\usepackage{totcount}
\newif\ifhidecomments
\newtotcounter{commentcounter}
\setcounter{commentcounter}{0}
\DeclareDocumentCommand \comment { o m } {%
    \stepcounter{commentcounter}% <-- percent needed!
    \ifhidecomments
    \else
    \IfNoValueTF{#1}{%
        \textsf{\textcolor{Red}{\footnotesize[Comment:\;#2]}}%
    }{%
        \textsf{\textcolor{lightgray}{\footnotesize[Comment:\;#2]}}%
    } % <-- space before percent added
    \fi
}

\begin{document}

\lipsum[1]
\comment{this is a comment}%
\lipsum[1]

\hidecommentstrue
\lipsum[1]
\comment{this is a comment}%
\lipsum[1]

\end{document}

顺便说一句:根据所示定义,如果用星号变体来定义会更有意义,\comment例如,

\DeclareDocumentCommand \comment { s m } {%
    \stepcounter{commentcounter}% <-- percent needed!
    \ifhidecomments
    \else
    \IfBooleanTF{#1}{%
        \textsf{\textcolor{lightgray}{\footnotesize[Comment:\;#2]}}%
    }{%
        \textsf{\textcolor{Red}{\footnotesize[Comment:\;#2]}}%
    } % <-- space before percent added
    \fi
}

而不是使用空的可选参数进行测试。

相关内容