代码清单的背景图片

代码清单的背景图片

我一直在搜索,但找不到使用该listings包为代码列表添加图像背景的任何信息。有办法吗?

答案1

正如 PolGab 所说,总有办法tikz。下面是使用 infamous\tikzmark标记列表的开始和结束,然后添加一个剪裁为列表大小的图像的方法:

在此处输入图片描述

笔记:

问题:

但这存在一些严重的问题:

  • 列表之前需要一个空行(否则结果会令人惊讶)。

  • 不确定为什么需要捏造事实,但他们最终将框架对齐到非常接近选项fram=tb绘制水平线的位置。

代码:

\documentclass{article}
\usepackage{listings}
\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{decorations.pathreplacing}

\newcommand{\tikzmark}[1]{\tikz[overlay,remember picture] \node (#1) {};}

\newcommand*{\AddBackgroundImage}[4][]{%
%\pgfmathsetmacrp{\height}{}%
    \begin{tikzpicture}[overlay,remember picture]
    \coordinate (VCenter) at ($(#2)!0.5!(#3)$);
    \coordinate (Fudge) at (-\pgflinewidth,0);
    \coordinate (VFudge) at (0,\baselineskip);
    %\draw [red, thick,fill=yellow, fill opacity=0.2]% for debugging
    \clip
            ($(#2)+ (Fudge) - 0.50*(VFudge)$) -- 
            ($(#2) + (\linewidth,0) - 0.50*(VFudge)$) -- 
            ($(#3) + (\linewidth,0) + 1.25*(VFudge)$) --
            ($(#3)+ (Fudge) + 1.25*(VFudge)$) -- cycle;
    \path (VCenter) -- ++($(0.5*\linewidth,0)$) 
    node [opacity=0.3, #1] {\includegraphics[width=\linewidth]{#4}};
    \end{tikzpicture}%
}%


\lstset{
    language=C,
    basicstyle=\small\sffamily,
    %frame=tb,
    numbers=left,
    xleftmargin=5.0ex,
    numberstyle=\tiny,
    numbersep=4pt,
    stepnumber=2,
    keywordstyle=\color{blue}\bfseries
    }

\lstset{emph={%  Adjust any special keywords
    printf%
    },emphstyle={\color{red}\bfseries}%
}%


\begin{document}
\noindent
Here is an example of listings with a background image:

\noindent% Line above MUST be blank
\tikzmark{Start}%
\begin{lstlisting}
/* Hello World program */

#include<stdio.h>

struct cpu_info {
    long unsigned utime, ntime, stime, itime;
    long unsigned iowtime, irqtime, sirqtime;
};

main()
{
    printf("Hello World");
}\end{lstlisting}
\tikzmark{End}
\AddBackgroundImage{Start}{End}{images/EiffelWide}%
%
\noindent
Some text afterwards.
\end{document}

相关内容