在 tcolorbox 中剪辑背景图片

在 tcolorbox 中剪辑背景图片

我正在创建一个包含特殊日期和背景图像的表格,例如这个

我希望实现流程自动化,并且创建具有不同高度但使用相同背景图像的表格。我的解决方案是将长图像放在 内tcolorbox,其中图像的上部只是均匀的颜色。然后,我希望 tex 根据表格的大小自动裁剪它。我选择的背景图像是这里(正如您所看到的,我只是简单地扩展了原始的较短的图像)。

我的代码如下:

\documentclass{report}
\usepackage[table,dvipsnames]{xcolor}
\usepackage[most]{tcolorbox}
\usepackage{booktabs}

\tcbset{
    bgtable/.style={
        freelance,
        frame code={\draw[ultra thick] (interior.north west) -- (interior.north east);}
        center title,
        fonttitle=\bfseries\sffamily,
        watermark graphics=#1,
        watermark stretch=1.00,
        %watermark zoom=1.0,
        clip lower,
        arc=0pt,
        outer arc=0pt,
        nobeforeafter}
}

\begin{document}

\begin{tcolorbox}[bgtable=Winter_term_card.png]
    \begin{tabular*}{11cm}{c c}
        \multicolumn{2}{c}{\large\textbf{Second Term}} \\
        \textbf{Week 1} & \\
        \midrule{1-2}
        06/01 & \textbf{Wed:} Event 1 blah blah. \\
        \textbf{Week 2} & \\
        \midrule{1-2}
        16/01 & \textbf{Fri:} Event 2 blah blah. \\
        \textbf{Week 3} & \\
        \midrule
        21/01 & \textbf{Mon:} Event 3 blah blah. \\  
        \bottomrule
    \end{tabular*}
    \vspace{2cm}    
\end{tcolorbox}

\end{document}

然而,图像并没有被裁剪。相反,图像缩小并占据了整个空间tcolorbox。结果如下:

在此处输入图片描述

知道该怎么做吗?我就是无法让它工作。

答案1

正如OP提到的,tcolorbox部分Clip Environments提供了一个解决方案。 以下代码只是picturebox第166页中环境的改编。

picturebox有一个强制参数,即背景图像。此图像缩放以覆盖 tcolorbox 宽度,但保持纵横比。如您所见,提供的图像显示了一个几乎均匀的长上部

在此处输入图片描述

因此,我倾向于定义 tcolorbox 的背景,从下到上显示图像,这样很容易观察到更高的框如何包含更大部分的图片但不缩放它。

解决方案使用tcbclipenvironment带有node哪个来includegraphics代替watermark原始代码中提出的选项。

\documentclass[a4paper]{report}
\usepackage[table,dvipsnames]{xcolor}
\usepackage[most]{tcolorbox}
\usepackage{booktabs}
\usepackage{lipsum}
\usepackage[vmargin={1cm,1cm}]{geometry}

\makeatletter
\newtcolorbox{picturebox}[2][]{%
    enhanced,
    frame hidden,
    interior hidden,
    fonttitle=\bfseries,
    sharp corners,
    underlay={%
        \begin{tcbclipinterior}
            \node[anchor=south]
             at (interior.south) {%
                \includegraphics[%
                width=\tcb@width, 
                keepaspectratio]{#2}};
        \end{tcbclipinterior},
        },
    overlay={\draw[ultra thick] (interior.north west)--(interior.north east);},
    #1
}
\makeatother

\begin{document}

\begin{picturebox}{Background.jpg}
\lipsum[1]
\end{picturebox}

\begin{picturebox}{Background.jpg}
\lipsum[1-2]
\end{picturebox}

\begin{picturebox}{Background.jpg}
\lipsum[1-3]
\end{picturebox}

\begin{picturebox}{Background.jpg}
\lipsum[1-8]
\end{picturebox}

\end{document}

在此处输入图片描述

答案2

在某些时候,使用纯 TikZ 会更容易。请注意,默认的inner sep=.333em线条粗细ultra thick2pt(一半在内,一半在外)。我添加了不透明度只是为了降低图像的色调。

\documentclass{report}
\usepackage[table,dvipsnames]{xcolor}
\usepackage[most]{tcolorbox}
\usepackage{booktabs}
\usepackage{environ}
\usepackage{showframe}% debugging tool, MWE only

\usetikzlibrary{backgrounds}

\NewEnviron{mycolorbox}[1]% #1 = image filename (no special characters)
{\par\noindent\tikz{%
  \node[draw,ultra thick,text width={\dimexpr\textwidth-.666em-2pt}]{\BODY};
  \begin{scope}[on background layer]
    \clip (current bounding box.south west) rectangle (current bounding box.north east);
    \node[inner sep=0pt,opacity=0.5] {\includegraphics{#1}};
  \end{scope}
}\par}

\begin{document}

\begin{mycolorbox}{example-image}
    \begin{tabular*}{11cm}{c c}
        \multicolumn{2}{c}{\large\textbf{Second Term}} \\
        \textbf{Week 1} & \\
        \midrule{1-2}
        06/01 & \textbf{Wed:} Event 1 blah blah. \\
        \textbf{Week 2} & \\
        \midrule{1-2}
        16/01 & \textbf{Fri:} Event 2 blah blah. \\
        \textbf{Week 3} & \\
        \midrule
        21/01 & \textbf{Mon:} Event 3 blah blah. \\  
        \bottomrule
    \end{tabular*}
\end{mycolorbox}

\end{document}

演示

相关内容