Макрос принимает аргумент без заключения в скобки?

Макрос принимает аргумент без заключения в скобки?

Я хочу сделать макрос, который не требует фигурных скобок для принятия аргумента. Давайте придумаем пример. Допустим, я хочу макрос, который принимает необязательный аргумент fи аргумент x:

\dd[f]{x}

И что эквивалентно записи:

\frac{\mathrm{d} f }{\mathrm{d} x }

Вопрос в том, можно ли создать макрос, в котором не нужно будет писать скобки, но который все равно будет принимать аргумент?

Было бы очень удобно, если бы я мог обойтись без скобок. Что-то вроде этого было бы отлично:

\dd f,x

Есть ли способ избежать написания скобок?

решение1

Этот тип макроса представляет собой простую текстовую конструкцию и называется «разграниченным макросом». В латексе он не рекомендуется, по крайней мере, отчасти потому, что в нем легко сделать ошибки.

Вот пример, который делает то, о чем вы просите:

\documentclass{article}
\def\dd #1,#2 {\frac{\mathrm{d} #1 }{\mathrm{d} #2 }}
\begin{document}
\thispagestyle{empty}
$\dd f,x $
\end{document}

вывод примера кода

Обратите внимание, что если вы опустите пробел после второго аргумента во входных данных

$\dd f,x$

вы получите сообщение об ошибке:

! Missing } inserted.
<inserted text> 
                }
l.5 $\dd f,x$

Однако отсутствие определенного «замыкателя» ограничивает распознавание аргумента одним входным токеном, что может быть весьма ограничивающим фактором, хотя и не для этого примера.

редактировать: в ответ на запрос о похожем макросе с разделителями, в котором аргументы могут быть необязательными, вот тот же самый, измененный для этой цели. в данном конкретном случае все, что требуется, — это четко разграничить каждый аргумент.

\documentclass{article}
\def\dd #1,#2;{\frac{\mathrm{d} #1 }{\mathrm{d} #2 }}
\begin{document}
\[\dd f,x; \quad \dd ,x; \quad \dd ,; \]
\end{document}

вывод примера кода

В этом случае, когда каждый аргумент, скорее всего, будет состоять только из одной буквы или управляющей последовательности (например, \phi), пропуск аргумента просто исключит его из вывода. (Только не вводите точку вместо запятой, как я сделал при настройке примера.)

В более сложных ситуациях, когда аргументами являются многосимвольные строки, возможное присутствие знаков препинания в аргументе означает, что выбор разделителей должен осуществляться с гораздо большей тщательностью. В таких случаях можно также заключить затронутые аргументы в фигурные скобки, чтобы они отображались как один токан в (la)tex, как предлагается в комментарии @SeanAllred.

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

Связанный контент