LaTeX \newcommand default argument: is empty?

conditional-statements, if-statement, latex

Solution

Try the following test:

\documentclass{article}

\usepackage{xifthen}% provides \isempty test

\newcommand{\optarg}[1][]{%
  \ifthenelse{\isempty{#1}}%
    {}% if #1 is empty
    {(((#1)))}% if #1 is not empty
}

\begin{document}

Testing \verb|\optarg|: \optarg% prints nothing

Testing \verb|\optarg[]|: \optarg[]% prints nothing

Testing \verb|\optarg[test]|: \optarg[test]% prints (((test)))

\end{document}

The `xifthen` package provides the `\ifthenelse` construct and the `\isempty` test.

Another option is to use the `ifmtarg` package (see the `ifmtarg.sty` file for the documentation).

Problem

I'm trying to write a simple example command that prints nothing without an argument, but with an argument it surrounds it with something. I've read that the default value should be `\@empty` and the simple `\ifx\@empty#1` condition should do the job: ``` \newcommand{\optarg}[1][\@empty]{% \ifx\@empty#1 {} \else {(((#1)))} \fi } \optarg % (((empty))) \optarg{} % (((empty))) \optarg{test} % (((empty))) test ``` The latter three commands all print the `empty` word for some reason, and I want the first two to print nothing and the last to print `(((test)))`. I'm using TeXLive/Ubuntu. An ideas?

Original source