Ayuda con xparse\newcommand

Ayuda con xparse\newcommand

Tengo algunas imágenes que necesito para recortar y otras para recortar. Implementé una solución única usando dos \newcommandque funcionaron, pero busco una solución compacta usando xparse que no funcionó y no puedo entender por qué.

Agradeceré cualquier ayuda para corregir y mejorar mi código a continuación.

\documentclass[11pt]{article}

\usepackage{easyfig}

% [cut up]{file}{caption}{label}{scale} - Cut up % <== Ok
\newcommand{\ruleone}[5][.05]{%
    \Figure[trim={.0\width} {.0\height} {.0\width} {#1\height},clip,%
        width=#5\linewidth,keepaspectratio=true,%
        caption={#3},label={#4},center,here]{#2}
}

% [cut down]{file}{caption}{label}{scale} - Cut down % <== Ok
\newcommand{\ruletwo}[5][.05]{%
    \Figure[trim={.0\width} {#1\height} {.0\width} {.0\height},clip,%
        width=#5\linewidth,keepaspectratio=true,%
        caption={#3},label={#4},center,here]{#2}
}

% [cut up]{file}[cut down]{caption}{label}[scale] - Cut down % <== compile with errors
\newcommand{\onerule}[ o m o m m o ]{%
    \Figure[trim={.0\width} {ifNoValueTF{#1}{.0}{#1}\height}%
        {.0\width} {ifNoValueTF{#3}{.0}{#3}\height},clip,%
        width={ifNoValueTF{#6}{1}{#6}\linewidth},keepaspectratio=true,%
        caption={#4},label={#5},center,here]{#2}
}

\begin{document}

Here comes the images:

\ruleone[.45]{example-image-a}{First image}{label1}{.5} % <== this works

\ruletwo[.35]{example-image-a}{Second image}{label2}{.5} % <== This too

\onerule[.35]{example-image-b}{Third image}{label3}{.5}

\onerule{example-image-b}[0.45]{Third image}{label3}{.5}

\end{document}

Respuesta1

En xparse, el comando para definir nuevos comandos es \NewDocumentCommanden lugar de \newcommand. Además, el segundo argumento que describe los parámetros es obligatorio ( {...}en lugar de [...]) y ifNoValueTFdebe estar \IfNoValueTF(en mayúsculas y con una barra invertida).

Además, %al final de la línea con argumentos de recorte se suprime un espacio requerido y el argumento de escala es opcional ( [...]en lugar de {...}).

Entonces obtienes

\documentclass[11pt]{article}

\usepackage{xparse,easyfig}

% [cut up]{file}{caption}{label}{scale} - Cut up % <== Ok
\newcommand{\ruleone}[5][.05]{%
    \Figure[trim={.0\width} {.0\height} {.0\width} {#1\height},clip,%
        width=#5\linewidth,keepaspectratio=true,%
        caption={#3},label={#4},center,here]{#2}
}

% [cut down]{file}{caption}{label}{scale} - Cut down % <== Ok
\newcommand{\ruletwo}[5][.05]{%
    \Figure[trim={.0\width} {#1\height} {.0\width} {.0\height},clip,%
        width=#5\linewidth,keepaspectratio=true,%
        caption={#3},label={#4},center,here]{#2}
}

% [cut up]{file}[cut down]{caption}{label}[scale] - Cut down % <== compile with errors
\NewDocumentCommand \onerule { o m o m m o }{%
    \Figure[trim={.0\width} {\IfNoValueTF{#1}{.0}{#1}\height}
        {.0\width} {\IfNoValueTF{#3}{.0}{#3}\height},clip,%
        width={\IfNoValueTF{#6}{1}{#6}\linewidth},keepaspectratio=true,%
        caption={#4},label={#5},center,here]{#2}
}

\begin{document}

Here comes the images:

\ruleone[.45]{example-image-a}{First image}{label1}{.5} % <== this works

\ruletwo[.35]{example-image-a}{Second image}{label2}{.5} % <== This too

\onerule[.35]{example-image-b}{Third image}{label3}[.5]

\onerule{example-image-b}[0.45]{Third image}{label3}[.5]

\end{document}

información relacionada