# Multi-line (block) comments in LaTeX

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?

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.

• 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
• @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

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}

• Can you make \* multiline comments *\ ? – kiss my armpit Dec 17 '12 at 7:01
• @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

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
}

• 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
• I prefer this solution, as it seems much more readable/verbose to me then the \iffalse ... \fi suggestion. – Kim Jan 15 at 9:55

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:

Gives this output:

\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

\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}


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.

• you can't have inline comments as such for example 2 /* HIDDEN HIDDEN HIDDEN */ 3 – percusse Nov 27 '13 at 21:18
• 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

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.
}