不要使用这个!

不要使用这个!

我知道其他注释选项,但我想将 /* 定义为多行注释的开头,将 */ 定义为结尾。

有任何想法吗?

答案1

这可能会破坏其他东西(David 指出,注释中的括号必须匹配,例如,不能在同一行的%括号前面有括号;此外,参数内部的其他用法将被丢弃,例如,斜杠作为子目录文件名的一部分)。 *//\includegraphics

这种方法使其处于/活动状态,这意味着它现在是一个宏名称,并且将吸收其后的空间,因此如果/单独使用,则可能需要{}在它后面添加,以便后续(所需的)空间不会被抑制。

我同意大卫的强烈推荐不是使用这种方法,因为有陷阱!

\documentclass{article}
\let\svslash/
\catcode`/=\active
\makeatletter
\def/{\@ifnextchar*{\ccomment}{\svslash}}
\makeatother
\long\def\ccomment*#1*/{}
\begin{document}
Here is/* a comment that I want
to go on

and on

and on*/ something that I am testing.  But a normal /{} passes through.
\end{document}

在此处输入图片描述

答案2

可以使用模块设置一个解析器pgfparser以便它可以吞噬任何标记,唯一的问题是我们必须使其处于/活动状态,因此它不能在文件名中使用它,TiZ 或 pgf 选项等。

它还会本地更改 catcode %,使得它们可以出现在 C 注释内,但如果输入已经标记(因此如果它已经是宏的一部分),则此操作将会失败。

不要使用这个!

\documentclass[]{article}

\usepackage{pgf}
\usepgfmodule{parser}
\pgfparserdef{ccomment}{initial}*{\pgfparserswitch{star}}
\pgfparserdefunknown{ccomment}{star}{\pgfparserswitch{initial}}
\pgfparserdeffinal{ccomment}{\endgroup}
% we have to put this here, as the `/` would otherwise not work in the options
\pgfparserset{ccomment/silent=true}
\let\svslash/
\catcode`\/=\active
\makeatletter
\def/{\@ifnextchar*{\@firstoftwo\ccomment}{\svslash}}
\makeatother
\pgfparserdef{ccomment}{star}/{\pgfparserswitch{final}}
\newcommand*\ccomment
  {%
    \begingroup
    \catcode`\%=12
    \catcode`\*=12 % just to make sure `*` has the correct meaning
    \pgfparserparse{ccomment}%
  }

\begin{document}
some /*comment that gobbles} %unbalanced{tokenlists*/ but a normal one /\ slips
through
\end{document}

相关内容