You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写Bash脚本替换.tex文件中#标记为对应pycode块编号

解决方案:替换LaTeX文件中pycode块关联的#标记

你可以用Python写一个简单的脚本实现需求,核心逻辑就是逐行扫描文件,跟踪当前pycode块的编号,把对应范围内的#替换成编号。以下是完整实现:

import re

def process_tex_file(input_path, output_path):
    current_block_num = 0
    with open(input_path, 'r', encoding='utf-8') as infile, open(output_path, 'w', encoding='utf-8') as outfile:
        for line in infile:
            # 检测到新的pycode块,递增编号
            if r'\begin{pycode}' in line:
                current_block_num += 1
            # 替换当前行所有的#为当前块编号
            if current_block_num > 0:
                modified_line = re.sub(r'#', str(current_block_num), line)
            else:
                modified_line = line
            outfile.write(modified_line)

# 调用函数处理a.tex,输出到output.tex
process_tex_file('a.tex', 'output.tex')

关键逻辑说明

  • 初始化current_block_num为0,未进入任何pycode块时不替换#
  • 每遇到一行包含\begin{pycode},就把块编号加1
  • 只要块编号大于0(即已经遇到至少一个pycode块),就用正则把当前行里所有的#替换成当前的块编号
  • 逐行处理并写入新文件,保留原文件的格式和换行

测试示例

把你提供的示例内容保存为a.tex,运行脚本后,output.tex的内容会和你期望的输出完全一致:

\begin{pycode}
Some text right here, let's say Text 1A: like: There are 1cat and 1dog.
\end{pycode}
Some text right here, let's say Text 1B: like: One day the 1dog tried to run away.

\begin{pycode}
Some text right here, let's say Text 2A: like: There are 2cat and 2dog and 2pig.
\end{pycode}
Some text right here, let's say Text 2B: like: There is 2something here.

这个脚本会正确处理pycode块内、块后到下一个pycode块前的所有#标记,完全符合你的需求。

内容的提问来源于stack exchange,提问作者Nam Phan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 02:40:27