我正在创建一个包含特殊日期和背景图像的表格,例如这个。
我希望实现流程自动化,并且创建具有不同高度但使用相同背景图像的表格。我的解决方案是将长图像放在 内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 thick
是2pt
(一半在内,一半在外)。我添加了不透明度只是为了降低图像的色调。
\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}