文本周围的文件图标(折角矩形)框架

文本周围的文件图标(折角矩形)框架

我想用“文件图标框”来显示代码列表。像这样: 带有“文件图标框”的源代码

我知道列表允许矩形框架的包。我感兴趣的是框架的具体形状。我认为这与源代码无关。如果没有现成的,我不怕编写一些代码来实现这一点。

答案1

我将定义自己的列表环境(\lstnewenvironment),它使用 TikZ 在列表周围绘制框:

\documentclass{article}

\usepackage{listings}
\usepackage{tikz}

\newlength{\cornerlength}
\setlength{\cornerlength}{1cm}

\tikzset{listingborder/.style={thick}}

\makeatletter
\lstnewenvironment{mylisting}[1][]{%
    \lstset{#1}%
    \setbox0\hbox\bgroup\color@setgroup
}{%
    \color@endgroup\egroup
    \begin{tikzpicture}
    \node (L) [text width=\linewidth] {%
        \usebox{0}%
    };
    \draw [listingborder]
           (L.north west)
        -- ([xshift=-\cornerlength]L.north east)
        -- ([yshift=-\cornerlength]L.north east)
        -- (L.south east)
        -- (L.south west)
        -- cycle;
    \draw [listingborder]
           ([yshift=-\cornerlength]L.north east)
        -| ([xshift=-\cornerlength]L.north east);
    \end{tikzpicture}%
}
\makeatother

\begin{document}

\begin{mylisting}[language=tex,basicstyle=\ttfamily]
\lstnewenvironment{mylisting}[1][]{%
    \lstset{#1}%
    \setbox0\hbox\bgroup\color@setgroup
}{%
    \color@endgroup\egroup
    \begin{tikzpicture}
    \node (L) [text width=\linewidth] {%
        \usebox{0}%
    };
    \draw [listingborder]
           (L.north west)
        -- ([xshift=-\cornerlength]L.north east)
        -- ([yshift=-\cornerlength]L.north east)
        -- (L.south east)
        -- (L.south west)
        -- cycle;
    \draw [listingborder]
           ([yshift=-\cornerlength]L.north east)
        -| ([xshift=-\cornerlength]L.north east);
    \end{tikzpicture}%
}
\end{mylisting}

\end{document}

结果

您仍然需要在底部添加波浪线。另请注意,通常您可以将节点包裹在环境内容周围,用\node {..};和替换\node \bgroup\egroup;但是,这对环境不起作用listings。很可能是一些逐字技巧导致了问题。(这很有趣,因为逐字应该在 TikZ 节点内工作)

相关内容