【问题标题】:Unable to make each sentence to start at a new line in LaTex by AWK/Python无法通过 AWK/Python 使每个句子在 LaTex 中从新行开始
【发布时间】:2010-10-12 19:42:12
【问题描述】:

我在 LaTex 中有一个很长的文档,其中包含段落。段落包含句子,因此没有后续句子从新行开始。

如何使每个后续句子在我的 .tex 文件中从新行开始?

我对这个问题的尝试

我们需要将 \n 放在句子 B 的末尾,其中句子 B 之前有句子 A。

我们不能将\n 放在有\ 标记的情况下。

我看到这个问题可以通过 AWK 和 Python 来解决。

【问题讨论】:

    标签: python latex awk


    【解决方案1】:

    所以您希望 .tex 文件中的每个句子都从新行开始,但不引入额外的段落?对吗?

    也许您可以浏览您的文件,并且每次看到“.”后跟空格和大写字母,插入换行符。

    例如在python中:

    import re
    sentence_end = r'\.\s+([A-Z])'
    
    source = open('myfile.tex')
    dest = open('myfile-out.tex', 'w')
    for line in source:
        dest.write(re.sub(sentence_end, '.\n\g<1>', line))
    

    【讨论】:

      【解决方案2】:

      在每个句点后换行有什么问题?例如:

      awk '{ gsub(/\. +/, ".\n"); print }'
      
      $ echo "abc. 123. xyz." | awk '{ gsub(/\. +/, ".\n"); print }'
      abc.
      123.
      xyz.
      

      【讨论】:

      • @David:我不明白 "gsub(/\. +/, ".\n")" 部分。你能解释一下吗
      • sub 是一个 awk 函数,它接受正则表达式和字符串,并将匹配正则表达式的文本替换为字符串。 'gsub' 中的 'g' 表示“每行替换不止一次”。正则表达式的意思是“匹配一个文字句点后跟一个或多个空格”。有帮助吗?
      【解决方案3】:

      如果我正确阅读了您的问题,您需要的是 \newline 命令。放在每句话之后。 \\ 是一个快捷方式。

      执行此操作的正则表达式类似于

      s/\.  ([A-Z])/.\\newline\1/
      

      【讨论】:

      • 看起来像是 sed 的工作,如果你这么说的话
      猜你喜欢
      • 1970-01-01
      • 2017-06-29
      • 1970-01-01
      • 2015-10-03
      • 2021-08-20
      • 2020-10-06
      • 2019-04-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多