mdframed 与 tikz 方法:将行号放在框架之外

mdframed 与 tikz 方法:将行号放在框架之外

我想对行进行编号mdframed环境,行号显示在框架左侧,框架之外。

\documentclass{article}
\usepackage[framemethod=latex]{mdframed}

\newdimen\linenumbersep

\newcommand{\linenumber}[1]{%
  \linenumbersep 4pt%
  \advance\linenumbersep\mdflength{innerleftmargin}%
  \advance\linenumbersep\mdflength{innerlinewidth}%
  \advance\linenumbersep\mdflength{middlelinewidth}%
  \advance\linenumbersep\mdflength{outerlinewidth}%
  \advance\linenumbersep\mdflength{linewidth}%
  \makebox[0pt][r]{{\rmfamily\tiny#1}\hspace*{\linenumbersep}}}

\begin{document}

\ttfamily

\begin{mdframed}
\linenumber{1}(define fact\\
\linenumber{2}  (lambda (n)\\
\linenumber{3}  (if (= n 0)\\
\linenumber{4}  1\\
\linenumber{5}  (* n (fact (- n 1))))))
\end{mdframed}

\end{document}

排版完本文档后,我得到

在此处输入图片描述

正如预期的那样。但是当该tikz方法用于通过更改源文档的第二行来绘制框架时

\usepackage[framemethod=tikz]{mdframed}

行号不再可见,给出

在此处输入图片描述

是否可以使用该tikz方法使该示例起作用?

我想在我正在编写的包中使用类似的东西,以便借助 Pygments 排版程序列表。行号将自动生成。

答案1

mdframed 在框架处剪辑了框。但我不知道这是有意为之还是一个错误。

2017年编辑:

问题似乎已经解决。不再需要补丁。

\documentclass{article}
\usepackage[framemethod=tikz]{mdframed}


\newdimen\linenumbersep

\newcommand{\linenumber}[1]{%
  \linenumbersep 4pt%
  \advance\linenumbersep\mdflength{innerleftmargin}%
  \advance\linenumbersep\mdflength{innerlinewidth}%
  \advance\linenumbersep\mdflength{middlelinewidth}%
  \advance\linenumbersep\mdflength{outerlinewidth}%
  \advance\linenumbersep\mdflength{linewidth}%
  \makebox[0pt][r]{{\rmfamily\tiny#1}\hspace*{\linenumbersep}}}

\begin{document}

\ttfamily


\begin{mdframed}
\linenumber{1}(define fact\\
\linenumber{2}  (lambda (n)\\
\linenumber{3}  (if (= n 0)\\
\linenumber{4}  1\\
\linenumber{5}  (* n (fact (- n 1))))))
\end{mdframed}

\makeatletter
\renewrobustcmd*\mdf@tikzbox@tfl[1]{%three or four borders
    \path(0,0)rectangle(\mdfboundingboxwidth,\mdfboundingboxheight);% replace \clip by \path
    \begin{scope}[mdfcorners]%
       \clip[preaction=mdfouterline]%
            [postaction=mdfbackground]%
            [postaction=mdfinnerline]#1;%
    \end{scope}%
    \path[mdfmiddleline,mdfcorners]#1;
  }%

\begin{mdframed}
\linenumber{1}(define fact\\
\linenumber{2}  (lambda (n)\\
\linenumber{3}  (if (= n 0)\\
\linenumber{4}  1\\
\linenumber{5}  (* n (fact (- n 1))))))
\end{mdframed}    

\end{document}

代码输出

相关内容