noweave 不尊重缩进

noweave 不尊重缩进

过去,我经常在 Python 项目中使用 noweb,但这次我遇到了奇怪的行为:编织文件中不遵循缩进。这是一个使用 noweb 2(版本noweave.nw,v 1.6 1998/08/17 00:10:34)的最小示例:

Test file. Here is some Python code:

<<main>>=
for i in range(100):
    i += 1
    <<printing>>

@
And some more code:
<<printing>>=
repr(i)

当我将它解开时,我得到了正确的 Python 代码:

for i in range(100):
    i += 1
    repr(i)

当我编织它时,我得到以下 TeX 代码:

\documentclass{article}\usepackage{noweb}\pagestyle{noweb}\noweboptions{}\begin{document}\nwfilename{test.nw}\nwbegindocs{0}Test file. Here is some Python code:% ===> this file was generated automatically by noweave --- better not edit it

\nwenddocs{}\nwbegincode{1}\moddef{main}\endmoddef\nwstartdeflinemarkup\nwenddeflinemarkup
for i in range(100):
    i += 1
    \LA{}printing\RA{}

\nwendcode{}\nwbegindocs{2}\nwdocspar
And some more code:
\nwenddocs{}\nwbegincode{3}\moddef{printing}\endmoddef\nwstartdeflinemarkup\nwenddeflinemarkup
repr(i)

\nwendcode{}\end{document}

看起来还不错(至少与我过去 20 年左右得到的结果没有什么不同),但编译时会产生以下输出:

在此处输入图片描述

其中,for i in range(100):和以下两行之间的缩进已消失。在 Python 中,缩进非常重要,因为它表示代码块嵌套。

有谁知道如何规避这个问题并恢复到 noweave 早期的行为,即尊重缩进(无论我使用制表符还是 4 个空格的字符串)?

答案1

逐字记录模式的管理发生了一些变化。

为了恢复原来的预期行为,你可以在某处添加(可能是在末尾noweb.sty

\let\obeyedspace\@xobeysp

概念证明:

\documentclass{article}
\usepackage{noweb}
\pagestyle{noweb}
\noweboptions{}

\makeatletter
\let\obeyedspace\@xobeysp
\makeatother

\begin{document}
\nwfilename{test.nw}\nwbegindocs{0}

Test file. Here is some Python code:% ===> this file was generated automatically by noweave --- better not edit it

\nwenddocs{}\nwbegincode{1}\moddef{main}\endmoddef\nwstartdeflinemarkup\nwenddeflinemarkup
for i in range(100):
    i += 1
    \LA{}printing\RA{}

\nwendcode{}\nwbegindocs{2}\nwdocspar
And some more code:
\nwenddocs{}\nwbegincode{3}\moddef{printing}\endmoddef\nwstartdeflinemarkup\nwenddeflinemarkup
repr(i)

\nwendcode{}
\end{document}

在此处输入图片描述

相关内容