Я пытаюсь записать, что простой пример управляет, чтобы ничего не печатал без аргумента, но с аргументом он окружает его чем-то.
Я считал, что значение по умолчанию должно быть \@empty
и простое \ifx\@empty#1
условие должно сделать задание:
\newcommand{\optarg}[1][\@empty]{%
\ifx\@empty#1 {} \else {(((#1)))} \fi
}
\optarg % (((empty)))
\optarg{} % (((empty)))
\optarg{test} % (((empty))) test
Последние три команды вся печать empty
слово по некоторым причинам, и я хочу, чтобы первые два не распечатали ничего и последнего для печати (((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
и \ isuppy
тестовое задание.
Другой вариант - использовать пакет IFMTARG
(см. Файл IFMTARG.STY
для документации).
В базовом движке TeX, которым написан LaTeX, количество аргументов, которые может принять команда, исправлено. По умолчанию [\@empty]
попросим LaTeX рассмотреть следующую лексему, чтобы посмотреть, не является ли она открытой квадратной скобкой [
. Если да, то LaTeX принимает содержимое квадратных скобок в качестве аргумента, если нет, то следующая лексембра возвращается во входной поток и вместо нее используется аргумент по умолчанию \@empty
. Чтобы заставить вашу идею работать, вы должны использовать квадратные скобки square, чтобы разделить необязательный аргумент, когда он присутствует:
\optarg
\optarg[]
\optarg[test]
Вам должно повезти с этой нотацией.
Раздражает то, что вы не можете использовать те же самые скобки для необязательного аргумента, что вы используете для требуемого аргумента, но так оно и есть.
Использование пакета XPARSE LaTex3:
\usepackage{xparse}
\NewDocumentCommand\optarg{g}{%
\IfNoValueF{#1}{(((#1)))}%
}