我想用“文件图标框”来显示代码列表。像这样:
我知道列表允许矩形框架的包。我感兴趣的是框架的具体形状。我认为这与源代码无关。如果没有现成的,我不怕编写一些代码来实现这一点。
答案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 节点内工作)