我想对行进行编号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}