0

I have some images that I need to cut it up, and some to cut it down. I implemented a single solution using two \newcommand that worked, but I look for one compact solution using xparse that did not work and I can not understand why.

I will appreciate any help to correct and to improve my code below.

\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}
4

In xparse, the command for defining new commands is \NewDocumentCommand instead of \newcommand. Also the second argument describing the parameters is mandatory ({...} instead of [...]) and ifNoValueTF should be \IfNoValueTF (uppercase and with a backslash).

Additionally your % at the end of the line with trim arguments suppresses a required space and the scale argument is optional ([...] instead of {...}).

Then you get

\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}
  • perfect. I did big mistakes. – jotagah Sep 23 '20 at 1:44

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.