346

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?

Werner
  • 603,163
Arindam Pal
  • 3,821

7 Answers7

284

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.

doncherry
  • 54,637
guillem
  • 4,984
  • 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
  • 2
    The of @Aditya is dead. Here is the new link: https://texfaq.org/FAQ-conditional and an archive version: https://web.archive.org/web/20210813002049/https://texfaq.org/FAQ-conditional – lyinch Feb 23 '22 at 13:55
103

A simple solution I use is

\newcommand{\mycomment}[1]{}

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

Sample use:

\mycomment{
This line of text won't show

This one won't either }

Edit: Replaced comment with mycomment since the former conflicts with the semi-popular comment package. This way, if you reuse commented blocks in a project that uses the comment package, nothing will break.

ntjess
  • 1,240
  • 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 09 '20 at 03:49
  • Long story short, starred commands are parsed differently from the normal version. See https://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 '20 at 18:24
  • 2
    I prefer this solution, as it seems much more readable/verbose to me then the \iffalse ... \fi suggestion. – Kim Jan 15 '20 at 09:55
  • This is very easy to use. Thanks – creative Jun 28 '20 at 07:11
60

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}
yannisl
  • 117,160
14

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}
Scott H.
  • 11,047
13

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
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.
}
Astrinus
  • 1,809
  • 10
  • 28
2

This works for me and I think it is very simple and good enough. Highlight the text that you want to comment using your mouse or keyboard. Once highlighted use Ctrl+t This will comment the selection. You can uncomment the selection by using same steps on commented text.

Hope it helps :)

CH4
  • 75