# Using \show in nonstopmode causes TeXmaker to raise false alarms. Any fix?

I'm currently reading the TeXbook, and I use `\show` a lot to see how Knuth defined plain-TeX macros in terms of TeX primitives. For instance, to have access to the definition of `\centerline`, I would write `\show\centerline` in my input file. When I compile that file with `pdftex` in interactive mode from the command line (a Unix terminal, in my case), TeX generates an error message that shows me the definition of `\centerline` in the terminal and offers me a menu of options (as described in Chapter 6: Running TeX in the TeXbook).

I understand that design choice by Knuth of having TeX generate an error message for each instance of `\show`: he probably wanted to leave the user some time to read what `\show...` prints in the terminal before letting TeX resume execution, instead of having to open the log file only after the end of the compilation.

However, instances of `\show...` in the input file have the undesirable side-effect of raising "errors" (false alarms, really) when `pdftex` is called from within an IDE such as TeXmaker with option `-interaction=nonstopmode`. For example,

``````\show\centerline
\bye
``````

when compiled with `pdftex -interaction=nonstopmode` causes TeXmaker to report

Obviously, those false alarms prove really annoying when debugging. I always have to ask myself: Wait... are those errors due to instances of `\show` in my input file, or are they bona fide errors? On the other hand, my understanding is that you have to specify

``````-interaction=nonstopmode
``````

if you want to call pdftex from within an IDE. Therefore, my question is:

Is there any way of preventing TeXmaker from reporting those "false alarms"?

Note: the problem I describe may be present in IDEs other than TeXmaker as well.

-
`\show` uses the same routine as error messages. Use it only in interactive sessions. –  egreg Nov 6 '13 at 17:51
@egreg It's too bad the errors generated by `\show` are indistinguishable from bona fide errors. I wish I could use `\show` in `nonstopmode` without having to deal with that problem. Oh well! I guess I can just use `\meaning`... –  Jubobs Nov 6 '13 at 17:56
`\texttt{\meaning\foo}` prints (almost) the same information. But for looking at meanings I prefer running interactively, so I can add other commands to look at. Also `texdef` is good for this. However, error lines start with `!`, while `\show` lines start with `>`; if Texmaker doesn't distinguish between the two cases it's its fault. –  egreg Nov 6 '13 at 18:03
@Jubobs: Try using `\typeout{\meaning<cs>}`. –  Werner Nov 6 '13 at 18:03
Additional to the already mentioned tools, `texdef` and `latexdef` are very handy in a command line console. Ah, sorry already in `egreg`'s comment! Besides with `emacs/auctex` there is no problem; only `\showbox` is truly a pain there. –  jfbu Nov 6 '13 at 18:22

`\show` uses the same internal routines that TeX employs for error messages. Judging now this may seem a design error, but one always has to keep in mind that TeX was released in 1982, when computer memory was quite scarcer than it is today.

A front-end like Texmaker could, in principle, distinguish between diagnostic messages given by `\show` (or `\showthe`) and real error messages, because the former start with `>`, while the latter start with `!`.

However, I find that using `\show` in a non interactive session is a waste of time, because you can't add other commands. If, for instance, you do `\show\section`, you'll be welcomed by

``````> \section=\long macro:
->\@startsection {section}{1}{\z@ }{-3.5ex \@plus -1ex \@minus -.2ex}{2.3ex \@plus .2ex}{\normalfont \Large \bfseries }.
``````

which wouldn't tell much about the meaning and the syntax, unless you add, at the prompt,

``````i\makeatletter\show\@startsection
``````

and then follow the other macros that appear. Just doing a compilation, looking at the log file and realizing that you need other `\show` commands is a very tedious procedure.

A very nice utility in this respect is `texdef`: calling

``````texdef -t latex -c article \section
``````

you'd receive the same information; with

``````texdef -t latex -c article -s \section
``````

you'd even get

``````% article.cls, line 312:
\newcommand\section{\@startsection {section}{1}{\z@}%
{-3.5ex \@plus -1ex \@minus -.2ex}%
{2.3ex \@plus.2ex}%
{\normalfont\Large\bfseries}}
``````

so also the place where the command is defined is shown (when possible).

Instead of `\show` you could use `\meaning`, that instead of interrupting the run will print the same information. It's probably better to enclose the call in a `\texttt` command, like

``````\texttt{\meaning\section}
``````

(or `{\tt\meaning\foo}` in Plain TeX). However the same limitations as with `\show` apply.

-
Thanks. Great answer! –  Jubobs Nov 19 '13 at 17:26