我想裁剪图像,但我不想定义裁剪多少,而是要保留多少。我的想法是,如果我有一个命令 \pic{lines=5,path=picture.jpg},我只想显示图片的底部(或顶部)部分,这部分的高度应为 5\baselineskip。宽度应保持不变。我想在多列环境中使用它。现在我尝试了以下操作:
\documentclass{scrbook}
\usepackage[Export]{adjustbox}
\usepackage{multicol}
\usepackage{graphicx}
\usepackage{calc}
\RequirePackage{expl3}
\RequirePackage{xparse}
\ExplSyntaxOn
\keys_define:nn {pic}
{
path .tl_set:N = \l_path,
lines .fp_set:N = \l_lines,
}
\DeclareDocumentCommand\pic{m}{
\group_begin:
\IfNoValueF {#1} { \keys_set:nn {pic} {#1} }
\fp_set:Nn \l_lineheight {\fp_eval:n {\baselineskip*\fp_use:N \l_lines }}
\newlength{\help}
\setlength{\help}{\heightof{\includegraphics{\l_path}}}
\fp_set:Nn \l_picheight {\help}
\fp_compare:nNnTF {\l_lineheight}<{\l_picheight}
{
\fp_set:Nn \l_help {\fp_eval:n {\l_picheight-\l_lineheight}}
\noindent\includegraphics[trim=0 0 0 \l_help,clip]{\l_path}
}
{
\noindent\includegraphics{\l_path}
}
\group_end:
}
\ExplSyntaxOff
\begin{document}
\begin{multicols}{2}
Some Text
\pic{lines=5,path={example.jpg}}
\end{multicols}
\end{document}
这有效,但前提是我知道要修剪多少。此外,出于我不知道的原因,它还会修剪顶部和右侧。这个条件是必要的,因为如果 lines*\baselineskip 超出了图片的高度,我稍后会做其他事情。
答案1
\includegraphics[trim=0 0 0 \l_help,clip]{\l_path}
问题已结束:我找到了一个将外部ExplySyntaxOn/Off
放入额外命令的解决方案。