【问题标题】:auto indenting wrapped Python code in Word在 Word 中自动缩进包装的 Python 代码
【发布时间】:2011-08-10 23:33:58
【问题描述】:

我正在努力使用 Microsoft Word 来正确显示我的 Python 代码,我需要一些帮助。

我正在尝试将大量 Python 脚本粘贴到 Microsoft Word 中,其中包含围绕 sn-ps 编写的文档文本。其中一些 Python sn-ps 是几行代码,另一些则超过一页。由于该文档现在大约有 500 页长,因此整个文档中散布着大约 200 个 sn-p 块。

我创建的字体样式设置为 sn-ps。所以我可以一次更改所有字体的字体大小、颜色、样式等。但是我在自动换行方面遇到了很大的问题。 Python 中的长语句被包裹在 word 中,这使得它们难以阅读,因为缩进丢失了。我能够使用“悬挂缩进”成功缩进 1 级换行。但是我不能对 2 级或 3 级缩进做任何事情,因为嵌套的东西会进一步缩进。

示例(我使用点而不是空格,因为它会不断删除它们)

This is a statement
This is another statement
if (condition):
.........This is a third statement
.........This is a fourth statement
.........for loop : 
..................This is a fifth statement
..................This is a sixth statement
..................if (condition):
...........................This is a seventh statement

想象一下,每条语句都相当长,并被换行到单词页的下一行。我明白了

This is a statement
This is another statement
if (condition):
.........This is a third     
statement
.........This is a fourth     
statement
.........for loop:
.................This is
a fifth statement
.................This is a
sixth statement 

如何在 word 中解决这个问题?悬挂缩进将修复 1 级缩进(if 条件中的语句),但不能修复 2 级缩进(for 循环中的语句)

注意:我想在 word 中使用某种选项、插件或宏。我无法使用代码编辑器并以 rtf 或其他格式复制和粘贴代码。即使我这样做了 200 次来替换我所有的代码 sn-ps,当我更改文档中的字体大小时,一切都会再次混乱。另一种选择是一些 IDE,它嵌入或链接到 word(无需复制和粘贴)并允许在其自己的环境中更改字体样式和大小,这将在 Word 中的所有出现时自动更新。

如果可以,请提供帮助。我疯狂地搜索,没有找到任何有用的东西......

【问题讨论】:

  • 我不确定我是否理解格式化为 HTML(通过在线格式化工具)然后粘贴到 Word 中的缺点。之后更改字体大小不会导致任何问题。
  • 如果要格式化代码,请使用 latex 和 lstlistings 包。话是地狱。你现在应该知道了。使用乳胶,您可以更改任何您想要的字体大小,您的代码不会移动。哎呀,你在编程 Python,你为什么还要考虑使用 Word 呢???
  • 好吧,我不知道如何强制 Word 不进行换行,所以我无能为力...但是.. 我只想指出其他事情.. - 为什么不编码使用 PEP8 规则并使您的代码行最长为 79 个字符 - 这应该适合页面并使 Word 远离自动换行
  • nmichaels,我试图坚持使用文字,因为所有其他文本的格式都完全符合我的需要,字体样式都设置好了,索引会自行生成等等,但是如果 lyx 会让任务变得更容易那我就换。我会研究一下lyx,它看起来很免费,而且似乎比学习乳胶更容易。谢谢你。
  • Joris,我也会研究乳胶和 lstlistings。 nmichaels 建议使用 lyx,这样可能会更容易。我从未使用过乳胶。 Word 在所有其他方面都做得很好,非代码文本与字体样式相关联,当更改时会更新整个文档。我想乳胶也可以做到这一点,所以我会按照你的建议尝试一下乳胶。

标签: python ms-word word-wrap auto-indent


【解决方案1】:

您是否尝试过使用 Word 起草纯文本文档?您以后可以随时转换它。

【讨论】:

  • jathanism,我不明白你的意思。我的印象是纯文本文档没有适当的格式。无论哪种方式,我都必须为所有 sn-ps 手动执行所有级别 1、2、3 缩进。然后,如果我稍后更改字体大小/样式,所有缩进可能会得到我稍后将不得不更改字体大小和样式,无论是纯文本还是 .docx 和代码缩进可能不会保持不变当这件事发生时。此外,大多数非代码文本已经被输入并且被格式化并且表现良好。感谢您的建议。
【解决方案2】:

在支持 Python 的代码编辑器中编写代码并突出显示语法。保存您的 sn-ps。截屏。将它们粘贴到 MS Word 中。根据需要调整和裁剪图像。

现在您所要做的就是在图像周围的文字环绕方面与 MS Word 进行斗争,这是一场您甚至可能获胜的斗争。

【讨论】:

  • MadKeithV,我避免使用图像,因为我们在 500 页的 word 文档中讨论了超过 200 个 sn-ps。这将有很多图像/屏幕截图可供使用。此外,我将无法更改屏幕截图中的字体大小。谢谢你的建议。
【解决方案3】:

使用docutils

与其对抗 MS-Word(和其他所见即所得的编辑器),不如使用 docutils 容易得多。

  1. 以近似纯文本的形式编写文档。您将使用非常简单和轻量级的 RST 标记。

  2. 运行rst2html.py 转换以从您的源代码创建漂亮的 HTML 页面。

  3. 运行rst2latex.py 转换以从您的源代码创建 LaTeX。有多种工具可以从 LaTeX 生成 PDF。

在这种情况下,代码 sn-ps 每次都能完美处理。没有工作。

如果你要写一些非常大而复杂的东西,你应该使用Sphinx。它是 docutils 的扩展,具有更酷的代码 sn-ps 标记功能。

【讨论】:

  • 斯洛特,谢谢。我以前从未使用过 docutils 或 latex,但您描述的过程听起来很简单。然而,我文档中的非代码文本格式非常好,并且所有内容都与字体样式相关联,甚至是许多句子中的单个单词,所以如果我从纯文本重新开始并阅读所有 500 页,我可能会丢失所有这些工作再次 :( .. 我会研究 RST 标记,也许可以保留一些非代码格式?我也会根据你的建议考虑 sphinx。谢谢。
  • @Gary:所有的非代码格式都可以保留。如果它需要太多的扩展类,请将此视为您过度设计文档的标志。但 Sphinx 使用丰富的语义标记,您可以计算出从标记到演示字体和样式的映射。
  • SLott,很高兴知道这一点。我肯定会在周末或下周试一试。非常感谢。会告诉你进展如何。
【解决方案4】:

1) 遵循 PEP-8 建议并保持行数

2) 使用等宽字体

3) 保持足够小的字体大小以提供每行 80-95 个字符。

【讨论】:

  • 我在 2 年前发布了这个问题,但从未选择过正确的答案(我不知道 StackOverflow 的礼仪)。所以我现在选择这个,因为这就是我最终要做的。我基本上只是将我的所有陈述保持在 80 个字符以内,并且复制和粘贴到 word 中似乎还可以。请注意,我花了很多时间检查我的所有脚本,像这样重新格式化它们并重新运行它们以测试我是否引入了任何错误:)
【解决方案5】:

我不使用 word,但在 LibreOffice 中,您可以只使用段落格式 - 为每个缩进级别创建新的段落样式(pycodepycode_indent1...)。将您想要的所有格式(单行距、无段落间距等)放在顶级样式中,并使缩进样式将其用作父样式。然后只需为每个子样式添加适当的缩进即可。这与没有项目符号的多深度项目符号列表基本相同。然后为每一行选择适当的缩进段落样式(提示:您可以在 LibreOffice 中使用 ctrl+鼠标选择多个不连续的行)。

当然,这样一来,您必须逐行执行,这可能会让人很头疼。但如果只是一些有问题的 sn-ps 可能会起作用。

【讨论】:

    猜你喜欢
    • 2018-04-26
    • 1970-01-01
    • 2016-06-02
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多