латекс: своя команда с необязательным аргументом

mtk79

можно ли создать свою команду с необязательным аргументом?
если да — то как?

dunkel68

гугл?
http://texblog.net/help/latex/ltx-18.html
\newcommand{\RefFig}[2][]{Рис.\,\ref{#2}\textit{#1}}
\RefFig{Label} --- Рис. 1
\RefFig[(a,б)]{Label} --- Рис. 1(a,б)
ps латех, латекс это в порно

Vlad128

Советую пролистать книгу Чеботаева про верстку в техе, издательство сибирский хронограф.

mtk79

спасибо.
но я хочу вставить необязательный остступ (с аргументом с параметром длины например
\newcommand{\RefFig}[2][]{Рис.\, \hspace{#1} #2}
при этом
\RefFig[1cm]{label}
работает, а
\RefFig{label} — нет
то же, если в определение написать \hspace{#1cm}, а в вызов — нет

dunkel68

при этом ошибка какая вылазит или чо?
пс не люблю hspace, с hskip та же хрень?

mtk79

\RefFig{s}

A number should have been here; I inserted `0'.
(If you can't figure out why I needed to see a number,
look up `weird error' in the index to The TeXbook.)
! Illegal unit of measure (pt inserted).
<to be read again>
\hskip
l.166 \RefFig{s}

Dimensions can be in units of em, ex, in, pt, pc,
cm, mm, dd, cc, nd, nc, bp, or sp; but yours is a new one!
I'll assume that you meant to say pt, for printer's points.
To recover gracefully from this error, it's best to
delete the erroneous units; e.g., type `2' to delete
two letters. (See Chapter 27 of The TeXbook.)
Как я понимаю, несмотря на необязательность, Тех хочет вместо необязательного аргумента нечто дефолтовое с размерностью длины. В то же время, если предположить, что это 0 — то тогда по идее должен был бы работать второй вариант, с
\newcommand{\RefFig}[2][]{Рис \, \hspace{#1cm} \ref{#2} }
(т.е. 0cm)
но выдается то же
A number should have been here; I inserted `0'.
(If you can't figure out why I needed to see a number,
look up `weird error' in the index to The TeXbook.)
правда без продолжения
а каков синтаксис \hskip ' а?

dunkel68

а, ну точно, тут пофиг, hspace или hskip, просто эти команды сами по себе имеют обязательный аргумент, а ты хочешь им типа впаять его как необязательный
я тут повозился, но у меня что-то тоже ничё не вышло, щас ещё поколдую

dunkel68

о!
\usepackage{ifthen}
\newlength{\unh}
\newcommand{\RefFig}[2][]{\ifthenelse{\equal{#1}{}}{\setlength\unh{0pt}}{\setlength\unh{#1}} Рис \, \hskip\unh {#2} }

mtk79

просто эти команды сами по себе имеют обязательный аргумент, а ты хочешь им типа впаять его как необязательный

да, скорее всего, тут и был гон.
Хотя, если бы удалось заставить считать Тех дефолтным (т.е. при неуказанном необяз. арг-е) состоянием 0pt, а не 0 или что-то еще — то прокатило бы
\usepackage{ifthen}
\ifthenelse

пока не знаю, как работает — но уже видно, что что-то нужное: примерно такое (с оператором условия) и нужно было
спасибо
Оставить комментарий
Имя или ник:
Комментарий: