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

请求修改Perl函数以处理含复杂LaTeX命令的嵌套分数替换

优化Perl的LaTeX嵌套分数处理函数

问题症结

原有process_latex函数依赖简单字符串匹配,无法识别分子/分母中嵌套的括号、LaTeX命令(如\textbf)或空括号,导致无法正确解析\frac{ \frac{1\frac{2}{3}}{4} a{} }{ b{} }这类复杂表达式。

解决方案:递归平衡括号匹配

利用Perl的递归正则特性,精准匹配嵌套的括号结构,确保正确识别每个\frac的分子和分母范围,即使其中包含其他LaTeX命令或多层嵌套。

优化后的代码实现

sub process_latex {
    my ($text) = @_;
    
    # 定义递归正则,匹配嵌套平衡的{}内容
    my $balanced_braces = qr/
        \{
        (?:
            [^{}]+
            |
            (??{ $balanced_braces })
        )*
        \}
    /x;
    
    # 递归替换所有\frac表达式,优先处理内层嵌套
    while ($text =~ s/\\frac($balanced_braces)($balanced_braces)/replace_frac($1, $2)/e) {
        # 循环直到无匹配项
    }
    
    return $text;
}

sub replace_frac {
    my ($num_braces, $den_braces) = @_;
    # 剥离外层括号,提取分子分母内容
    my $numerator = substr($num_braces, 1, -1);
    my $denominator = substr($den_braces, 1, -1);
    
    # 递归处理分子分母内部的嵌套分数
    $numerator = process_latex($numerator);
    $denominator = process_latex($denominator);
    
    # 替换为目标LaTeX片段,可根据需求调整格式
    # 示例1:保持标准\frac结构
    return "\\frac{$numerator}{$denominator}";
    # 示例2:转换为加粗的\dfrac
    # return "\\dfrac{\\textbf{$numerator}}{\\textbf{$denominator}}";
}

代码说明

  1. 平衡括号正则:$balanced_braces通过递归逻辑,准确识别任意深度的嵌套{},不受内部LaTeX命令或空括号干扰。
  2. 递归替换逻辑:从最内层的\frac开始处理,逐层向外覆盖,确保所有嵌套结构都被正确解析。
  3. 可定制输出:replace_frac函数可根据需求生成不同样式的LaTeX代码,比如添加格式命令、转换分数类型等。

测试效果

输入:

\frac{ \frac{1\frac{2}{3}}{4} a{} }{ b{} }

采用示例1的输出(保持标准结构):

\frac{ \frac{1\frac{2}{3}}{4} a{} }{ b{} }

(注:此处函数作用是确保复杂嵌套结构被正确解析,若原始输入为非标准格式,可转换为标准LaTeX结构)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 13:12:56