如何使用 TikZ 设置圆角图像的实际宽度?

如何使用 TikZ 设置圆角图像的实际宽度?

这个问题与带圆角的 LaTeX 照片。假设我想在边注中放置一个圆角图像,因此图像适合\linewidth边注的。如果我使用该问题答案中提出的技术,适合的\linewidth不是图像,而是图像加上白色边框以产生圆角。

带有三幅图像的 MWE。第一幅,很普通。第二幅使用了 @PeterGrill 的方法。第三幅是我想要得到的,我使用了\hspace\vspace并进行了一些计算以适合图像。但我不知道这个解决方案是否会有问题,因为我正在将 TikZ 图片扩展到 marginpar 之外。我想要一个仅限 TikZ 的解决方案。这样会更好,不是吗?

\documentclass[twoside,a4paper]{tufte-handout}

\usepackage{blindtext}
\usepackage{tikz}
\usepackage{graphicx}
\usepackage{calc}
\newcommand*{\ClipSep}{0.4cm}%

\begin{document}
\marginnote{\includegraphics[width=\linewidth]{frog.jpg}
%\raggedright \blindtext
}

\marginnote{
\begin{center}
\begin{tikzpicture}
\node [inner sep=0pt] at (0,0) {\includegraphics[width=\linewidth]{frog.jpg}};
\draw [white, rounded corners=\ClipSep, line width=\ClipSep] 
    (current bounding box.north west) -- 
    (current bounding box.north east) --
    (current bounding box.south east) --
    (current bounding box.south west) -- cycle
    ;
\end{tikzpicture}
\end{center}

\raggedright \blindtext}

\marginnote{
\begin{center}
\hspace*{-\ClipSep}\begin{tikzpicture}
\node [inner sep=0pt] at (0,0) {\includegraphics[width=\linewidth + \ClipSep]{frog.jpg}};
\draw [white, rounded corners=\ClipSep, line width=\ClipSep] 
    (current bounding box.north west) -- 
    (current bounding box.north east) --
    (current bounding box.south east) --
    (current bounding box.south west) -- cycle
    ;
\end{tikzpicture}
\end{center}
\vspace*{-\ClipSep}
\raggedright \blindtext}

\Blindtext

\end{document}

MWE 的结果

答案1

我为没有提供 TikZ 专属解决方案向 OP 表示歉意,但已经有三个不错的 TikZ 专属答案,这个问题的未来读者可能会根据该tcolorbox软件包(实际上是基于 TikZ)使用我的答案。使用当前版本3.30 (2014/11/17),一个真正短的可以使用宏给出答案\tcbincludegraphics。它将众所周知的包装\includegraphicstcolorbox;因此,可以使用圆角。

完整的解决方案文本为:

\documentclass[twoside,a4paper]{tufte-handout}

\usepackage{blindtext}
\usepackage{tikz}
\usepackage[skins]{tcolorbox}
\newcommand*{\ClipSep}{0.4cm}%

\begin{document}

\marginnote{\tcbincludegraphics[blank,arc=\ClipSep]{frog.jpg}
  \blindtext}

\Blindtext

\end{document}

在此处输入图片描述

答案2

怎么样path picture?然后剪辑就完成了。但是,您必须先获取图像的高度,我将其放入一个临时框中。将minimum widthminimum height键分别设置为\wd\tmpbox和可能更有效\ht\tmpbox+\dp\tmpbox,但我只使用了\phantom

\documentclass[twoside,a4paper]{tufte-handout}
\usepackage{blindtext}
\usepackage{tikz}
\newcommand*{\ClipSep}{0.4cm}%
\newbox\tmpbox
\begin{document}
\marginnote{%
  \setbox\tmpbox=\hbox{\includegraphics[width=\linewidth]{example-image}}%
  \tikz\node [draw=white, 
    inner sep=0pt, outer sep=0pt, rounded corners=\ClipSep,
    path picture={\node at (path picture bounding box.center) {\box\tmpbox};}] 
      {\phantom{\copy\tmpbox}};
  \raggedright \blindtext}

\Blindtext

\end{document}

仅显示部分输出:

在此处输入图片描述

答案3

这是一个解决方案(包含双重图片):

\documentclass[twoside,a4paper]{tufte-handout}
\usepackage{blindtext}
\usepackage{tikz}
\usepackage{graphicx}
\usepackage{calc}
\newcommand*{\ClipSep}{0.4cm}%
\begin{document}
\marginnote{%
  \begin{tikzpicture}
    \node [inner sep=0pt,draw=white](a) {\includegraphics[width=\linewidth]{example-image}};
    \filldraw[white,line width=0pt](a.south west) rectangle (a.north east);
    \clip[rounded corners=\ClipSep] (a.south west) rectangle (a.north east);
    \node [inner sep=0pt](a) {\includegraphics[width=\linewidth]{example-image}};
  \end{tikzpicture}
  \raggedright \blindtext}

\Blindtext

\end{document}

在此处输入图片描述

答案4

这是另一个使用boxand 的答案tikz。为了使其看起来不同,我使用了宏\myclippedpic

\documentclass[twoside,a4paper]{tufte-handout}
\usepackage{blindtext}
\usepackage{tikz}
\newcommand*{\ClipSep}{0.4cm}%
\newbox\tmpbox
\newcommand{\myclippedpic}[1]{%
\setbox\tmpbox=\hbox{\includegraphics[width=\linewidth]{#1}}%
  \begin{tikzpicture}
    \clip[rounded corners=\ClipSep] (0,0) rectangle (\wd\tmpbox,\ht\tmpbox);
    \node [inner sep=0pt] at (current bounding box.center) {\includegraphics[width=\linewidth]{#1}};
  \end{tikzpicture}
  }
\begin{document}
\marginnote{%
  \myclippedpic{example-image}
  \raggedright \blindtext}

\Blindtext

\end{document} 

在此处输入图片描述

相关内容