私は、引数なしでは何も出力しない簡単なコマンド例を書こうとしていますが、引数があるとそれを何かで囲みます。
私は、デフォルト値が\@empty
であり、単純な\ifx\@empty#1
条件が適切であることを読みました:
\newcommand{\optarg}[1][\@empty]{%
\ifx\@empty#1 {} \else {(((#1)))} \fi
}
\optarg % (((empty)))
\optarg{} % (((empty)))
\optarg{test} % (((empty))) test
後者の3つのコマンドはすべて、何らかの理由でempty
Wordを出力します。最初の2つのコマンドは何も出力せず、最後の2つは(((test)))
を出力します。
TeXLive/Ubuntuを使用しています。アイデア?
次のテストを試してください:
\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}
xifthen
パッケージ は、\ifthenelse
構成と\isempty
テストを提供します。
別のオプションは、ifmtarg
パッケージを使用することです(ドキュメントについては ifmtarg.sty
ファイル を参照してください)。
LaTeX3 xparseパッケージの使用:
\usepackage{xparse}
\NewDocumentCommand\optarg{g}{%
\IfNoValueF{#1}{(((#1)))}%
}
LaTeXが記述される基礎となるTeXエンジンでは、コマンドが取ることができる引数の数は固定されています。デフォルトの[\@empty]
で行ったことは、LaTeXに次のトークンを調べて、角かっこ[
かどうかを確認するよう依頼することです。その場合、LaTeXは角括弧の内容を引数として受け取ります。そうでない場合は、次のトークンが入力ストリームに戻され、代わりにデフォルトの\@empty
引数が使用されます。したがって、アイデアを機能させるには、オプションの引数が存在する場合にsquare角かっこを使用して区切る必要があります。
\optarg
\optarg[]
\optarg[test]
あなたはこの表記法でもっと運が良いはずです。
必須の引数に使用するのと同じブラケットをオプションの引数に使用できないのは不愉快ですが、それはそのようです。
\documentclass{article}
\usepackage{ifthen} % provides \ifthenelse test
\usepackage{xifthen} % provides \isempty test
\newcommand{\inlinenote}[2][]{%
{\bfseries{Note:}}%
\ifthenelse{\isempty{#1}}
{#2} % if no title option given
{~\emph{#1} #2} % if title given
}
\begin{document}
\inlinenote{
simple note
}
\inlinenote[the title]{
simple note with title
}
\end{document}