
Ich habe einige Bilder, die ich zerschneiden muss, und einige, die ich verkleinern muss. Ich habe eine einzelne Lösung mit zwei davon implementiert, \newcommand
die funktioniert hat, aber ich suche nach einer kompakten Lösung mit xparse, die nicht funktioniert hat, und ich kann nicht verstehen, warum.
Ich freue mich über jede Hilfe zur Korrektur und Verbesserung meines unten stehenden Codes.
\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}
Antwort1
In xparse
lautet der Befehl zum Definieren neuer Befehle \NewDocumentCommand
anstelle von \newcommand
. Auch das zweite Argument, das die Parameter beschreibt, ist obligatorisch ( {...}
anstelle von [...]
) und ifNoValueTF
sollte lauten \IfNoValueTF
(in Großbuchstaben und mit einem Backslash).
Darüber hinaus unterdrückt Ihr Argument %
am Ende der Zeile mit Trim-Argumenten ein erforderliches Leerzeichen und das Scale-Argument ist optional ( [...]
anstelle von {...}
).
Dann bekommst du
\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}