225

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?

179

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.

| improve this answer | |
  • 22
    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
52

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}
| improve this answer | |
  • 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
32

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
}
| improve this answer | |
  • If I just want to disable section*{} (and not displaying it, why woudn't \renewcommand{\section}[1]{} work ? Is there a work around? Thanks. – CasperYC Jan 9 at 3:49
  • Long story short, starred commands are parsed differently from the normal version. See texfaq.org/FAQ-cmdstar. If you wanted to hide section* blocks, you can do (on separate lines): \usepackage{suffix}, \WithSuffix\newcommand\section*[1]{} – ntjess Jan 10 at 18:24
  • 1
    I prefer this solution, as it seems much more readable/verbose to me then the \iffalse ... \fi suggestion. – Kim Jan 15 at 9:55
  • This is very easy to use. Thanks – creative Jun 28 at 7:11
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}
| improve this answer | |
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.

| improve this answer | |
  • 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
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.
}
| improve this answer | |

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