如果我提供的数字>= 1,我想\includegraphics
使用参数进行调用,否则。我已经看到了这个:width= #1\textwidth
\mycmd
scale= #1
我可以使用 graphicx 有条件地缩放图像吗但是我更喜欢保留我的代码因为它更简单,我既不想要重复的代码也不想有\ifthenelse
(重复整个命令\includegraphics
)我没有成功在命令参数中使用它:\includegraphics[\ifthenelse...]
,最好只改变里面的参数,所以我需要在命令参数里面进行可扩展的条件测试,如果我可以避免在 OR 中重复就好了\mytest
。
附言:我尝试过\ifnumequal
但它只接受自然数,所以没有帮助。
\documentclass{report}
\usepackage{graphicx}
\usepackage{etoolbox}
\makeatletter
\def\mycmd{\@ifnextchar[{\@mycmdwith}{\@mycmdwithout}}
\def\@mycmdwith[#1](#2,#3,#4){
\ifnum#2>=1
\begin{figure}
\includegraphics[width=#2\textwidth]{#3}
\caption[#1]{#4}
\end{figure}
\else
\begin{figure}
\includegraphics[scale=#2]{#3}
\caption[#1]{#4}
\end{figure}
\fi
}
\def\@mycmdwithout(#1,#2,#3){
\ifnum#1>=1
\begin{figure}
\includegraphics[width=#1\textwidth]{#2}
\caption{#3}
\end{figure}
\else
\begin{figure}
\includegraphics[scale=#1]{#2}
\caption{#3}
\end{figure}
\fi
}
\makeatother
\begin{document}
\mycmd(1,example-image-A,test)
\mycmd[test](1,example-image-A,test)
\end{document}
答案1
要求类似这样的内容毫无意义width=1.2\textwidth
:如果第一项大于 1,则图像将缩放到比文本宽度更宽。而且混合scale
和width
相当可疑。
然而,顾客永远是对的。;-)
\documentclass{article}
\usepackage{graphicx,xparse}
\NewDocumentCommand{\mycmd}{o >{\SplitArgument{2}{,}}r()}{%
\IfNoValueTF{#1}
{\mycmdInternalNoOpt#2}
{\mycmdInternalOpt#2{#1}}%
}
\NewDocumentCommand{\mycmdInternalNoOpt}{mmm}{%
\mycmdInternalOpt{#1}{#2}{#3}{#3}%
}
\ExplSyntaxOn
\NewDocumentCommand{\mycmdInternalOpt}{mmmm}
{
\fp_compare:nTF { #1 >= 1 }
{
\includegraphics[width=#1\textwidth]{#2}
}
{
\includegraphics[scale=#1]{#2}
}
\caption[#4]{#3}
}
\ExplSyntaxOff
\begin{document}
\listoffigures
\begin{figure}
\centering
\mycmd(1,example-image-a,test)
\mycmd[testopt](0.5,example-image-a,test)
\end{figure}
\end{document}
图表列表(显示可选参数被接受)
包含图片的页面
只需出现一次\includegraphics
:
\NewDocumentCommand{\mycmdInternalOpt}{mmmm}
{
\use:x
{
\exp_not:N \includegraphics
[
\fp_compare:nTF { #1 >= 1 } { width=#1\textwidth } { scale=#1 }
]{#2}
}
\caption[#4]{#3}
}
答案2
请求的语法看起来很奇怪,但是 width= 和 scale= 只是缩放的变体,宽度意味着缩放自然宽度,因此您只需要以下内容即可避免重复\includegraphics
:
\documentclass{article}
\usepackage{graphicx}
\makeatletter
\newcommand\zz[1]{#1\ifdim#1pt<1pt \Gin@nat@width\else\textwidth\fi}
\makeatother
\begin{document}
\vspace*{-4cm}
\enlargethispage{4cm}
\centering
X\dotfill X
\includegraphics[width=\zz{1.2}]{example-image}
\includegraphics[width=\zz{1}]{example-image}
\includegraphics[width=\zz{0.5}]{example-image}
\end{document}