195

In LaTeX, % can be used for single-line comments. For multi-line comments, the following command is available in the verbatim package.

\begin{comment}
Commented code
\end{comment}

But is there a simple command like /* code */ in C?

151

Following the C code paradigm, where one can use the preprocessor directives

#if 0
junk code
#endif

something similar can be done in TeX (and descendants):

\iffalse
I don't want this to happen
\fi

The commented parts can be easily activated by replacing \iffalse with \iftrue.

  • 18
    See the TeX FAQ on why \iffalse can fail in unexpected ways. – Aditya Dec 18 '12 at 8:04
  • @Aditya: thanks for the link, I wasn't aware of these problems! – guillem Dec 18 '12 at 8:35
  • 2
    @Aditya What would you say is a good and stable way to comment things out? Say, stable in so far as I am not doing anything fancy ---- just commenting out a chunk of code in its plain version. I have also got trouble with block-comment using the \begin{comment} environment, either from the verbatim package or comments package. – llinfeng Nov 29 '17 at 12:01
50

No, but you can define something close:

\documentclass{article}
\begin{document}
\long\def\/*#1*/{}

AAA

\/* This is a test
    and this is another
*/

BBB
\end{document}
  • 1
    Can you make \* multiline comments *\ ? – kiss my armpit Dec 17 '12 at 7:01
  • 2
    @GarbageCollector You can but then it means changing the catcode of the backtick to make it active and would cause a lot of grief in other areas. Ah! did not see your edit ... changing catcode of slash will give you same headaches. – Yiannis Lazarides Dec 17 '12 at 7:03
  • @YiannisLazarides: Of course, this definition cannot be nested. With LuaTeX it is possible to have multiline comments without any catcode jugglery. See Block comments in TeX for an example. – Aditya Dec 18 '12 at 8:06
  • It redefines \* and requires a space after the closing delimiter but, \def\*#1*\ {} works I think. – Scott H. Dec 22 '12 at 21:05
  • Just a heads-up, this broke \url{} in BibTex for me. (Sadly) – domenukk Nov 29 '16 at 16:10
13

Here's a poor man's version of the answer linked by Aditya above. It doesn't require ConTeXt but it does need to be compiled with LuaTeX. With it you can use C style comments: /*comment*/. A potential downside is that it "works" even in a verbatim environment. It works in all situations I can think of.

This input:

enter image description here

Gives this output:

enter image description here

\documentclass{article}

\usepackage{luacode}

\begin{luacode*}

commenting = false
local gsub = string.gsub

local opencomm = "%/%*(.*)"
local closecomm = "(.-)%*%/"

function comment(s)
    if not commenting then
        s = gsub(s,opencomm,
                function(s1)
                commenting = true
                s1 =  gsub(s1,closecomm,function(s2) commenting = false return "" end,1)
                  if commenting then return "" else
                      return comment(s1)
                  end
              end
            )
    else
        s = gsub(s,"(.+)",
                function(s3)
                s3 =  gsub(s,closecomm,function(s4) commenting = false return "" end,1)
                    if commenting then return "%" else
                        return comment(s3)
                    end
                end
                )
    end
    return s
end

luatexbase.add_to_callback('process_input_buffer', comment, 'comment')
\end{luacode*}

\begin{document}

1 /*HIDDEN*/ 2

1 /*HIDDEN
HIDDEN*/ 2

1/*HIDDEN
HIDDEN
HIDDEN*/2

1 /*HIDDEN 
HIDDEN*/ 2 /*HIDDEN*/ 3

1 /*HIDDEN*/ 2 /*HIDDEN
HIDDEN*/ 3

\end{document}
11

I think the most straightforward way to do this is to use a TeX editor. TeXnicCenter for instance offers to comment and uncomment marked blocks by ctrl+q and ctrl+w. This simply adds a '%' at the respective lines. This further grays out commented section, which is not the case with scripted solutions.

  • 2
    you can't have inline comments as such for example 2 /* HIDDEN HIDDEN HIDDEN */ 3 – percusse Nov 27 '13 at 21:18
  • 1
    This is true of course. A scripted version also lets hide/show comments by a simple compile flag, which can be great in drafting or reviewing work. – Thomas Ortner Nov 27 '13 at 21:46
7

A simple solution I use is

\newcommand{\comment}[1]{}

Which just defines a command that does nothing with the input (effectively commenting it out!)

Sample use:

\comment{
This line of text won't show

This one won't either
}
4

Short: put \directlua{-- before the block and a single } after the block when compiling with Lua(La)TeX.

Long: this is a "bug" of LuaTeX turned into a feature, or what make programmers happy. Putting a double hyphen in front of a text in Lua means a single-line comment; however, since TeX strips newlines from Lua code, this appears as a single-line chunk to Lua and so all the chunk gets commented.

Not tested, but I think you could alias that as

\newcommand{\multlinecomment}[1]{\directlua{-- #1}}

and then enclose your comment as in

\multlinecomment{
  My multiline
  comment
  with Lorem ipsum.
}

protected by Community Jul 5 '15 at 16:24

Thank you for your interest in this question. Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).

Would you like to answer one of these unanswered questions instead?

Not the answer you're looking for? Browse other questions tagged or ask your own question.