릭스 | 매크로 인수 순서 변경

릭스 | 매크로 인수 순서 변경

LyX에서는 매크로의 필수 인수와 옵션 인수의 순서를 변경할 수 있나요?

이 매크로에서 필수 인수 뒤에 옵션 인수가 오도록 하고 싶습니다.

가능하다면 어떻게 해야 하나요?

매크로 스크린샷

답변1

귀하의 문서를 읽는 다른 사람에게 혼란을 줄 수 있으므로 이 작업을 권장하지 않습니다. 또한 모든 매크로, 특히 인수를 읽기 전에 범주 코드를 가지고 노는 매크로에서는 작동하지 않습니다. 가능하다고 하더군요.

다음은 정확히 하나의 필수 인수와 하나의 선택적 인수를 갖도록 정의된 매크로 \flip의 필수 및 선택적 인수를 뒤집는 매크로를 정의하는 일부 LaTeX 코드입니다.

\usepackage{etoolbox}

\makeatletter
\newcommand*\flip[1]{%
    \cslet{flip@\string#1}#1%
    \long\def#1##1{%
        \@ifnextchar[{\@flip{#1}{##1}}{\csuse{flip@\string#1}{##1}}%
    }%
}
\long\def\@flip#1#2[#3]{%
    \csuse{flip@\string#1}[#3]{#2}%
}
\makeatother

예를 들어, 매크로가 주어지면

\newcommand\foo[2][none]{%
    \par
    Required argument: #2\\
    Optional argument: #1%
}

한 번만 작성 하면 필수 인수와 선택적 인수를 취하도록 \flip\foo재정의됩니다 . \foo이를 설명하는 전체 문서는 다음과 같습니다.

\documentclass{article}
\usepackage{parskip}
\usepackage{etoolbox}

\makeatletter
\newcommand*\flip[1]{%
    \cslet{flip@\string#1}#1%
    \long\def#1##1{%
        \@ifnextchar[{\@flip{#1}{##1}}{\csuse{flip@\string#1}{##1}}%
    }%
}
\long\def\@flip#1#2[#3]{%
    \csuse{flip@\string#1}[#3]{#2}%
}
\makeatother

\newcommand\foo[2][none]{%
    \par
    Required argument: #2\\
    Optional argument: #1%
}


\begin{document}

Normal use:
\foo{blah}
\foo[option]{asdf}

Now we can flip the arguments:
\flip\foo
\foo{blah}
\foo{asdf}[option]
\end{document}

여기에 이미지 설명을 입력하세요

저는 지금까지 LyX를 사용해 본 적이 없지만 서문에 코드를 삽입하여 동일한 효과를 얻을 수 있었습니다.

매크로(즉, 없이 패밀리를 통해 정의되거나 를 통해 정의된 매크로) \flip의 부족을 고려하지 않는다는 점에 유의하세요 . 이로 인해 경우에 따라 혼란스러운 오류가 발생할 수 있습니다. 매크로 패치 와 비슷하게 처리하는 것이 가능 하지만 이 답변에서는 그렇게 할 가치가 없어 보였습니다.\long\def\long\newcommand*etoolbox

인수 를 재정의하지 않고 \flip대신 . (테스트되지 않은) 것과 같은 것\flip\foo{required}[optional]\foo[optional]{required}

\long\def\flip#1#2[#3]{#1[#3]{#2}}

그러면 선택적 인수가 필수 인수로 바뀌지만 선택적 인수가 없으면 \flip.

결론적으로, 할 수는 있지만 해서는 안 될 것 같습니다.

관련 정보