【发布时间】:2018-01-28 22:47:50
【问题描述】:
我正在使用 R 中的 LaTex 文档,我需要将 {#1 \over #2} 更改为 \frac{#1}{#2}。
使用简单的表达式,例如:
{1\over 2}{x^2+y^2\over \lambda}
我可以使用 stringr::str_replace() 或 gsub 基本函数和正则表达式 \\{([\\^a-z0-9\\\\\\s\\+\\-\\*/\(\)]+)\\s*\\\\over\\s*([\\^a-z0-9\\\\\\s\\+\\-\\*/\(\)]+)\\} 来做到这一点(我想必须有更好的方法来做到这一点。我尝试使用 \\{(.+)\\s*\\\\over\\s*(.*)\\} 但它捕获的比我想要的要多.)
但是当我使用以下表达式时:
{e^{2c} \over x-1}{2yz\over 1+x^{2} }
或更复杂的表达式:
\\item $Dom\\left(Q\\right)\\ne {\\rm R}^{2} $ y uno de los puntos no pertenecientes al dominio es $\\left({1\\over 2} ,{1\\over 2} \right).$
上述正则表达式失败。
是否有一个正则表达式可以捕获所有替代方案?谢谢
【问题讨论】:
-
我会为此删除正则表达式,而是在字符串中找到
\over的位置,然后将除第一个{之外的所有内容用于#1以及除最后一个}之外的所有内容为#2。然后构建替换字符串。 -
paste("\\frac", gsub("\\\\over", "}{", x, perl=TRUE))似乎可以工作,但肯定会很容易坏 -
您可能需要考虑使用 TeXCheckR 包中的 extract_LaTeX_argument()。
-
@user20650 有趣的解决方案 确实它运行良好,但如果我们只使用我上面放置的示例。但是这些示例在较长的表达式中,例如
\item $\left(K,\left({c\over \lambda K^{\alpha } } \right)^{{1\over \beta } } \right).$并且在那里它失败了。 -
@Hugh 我不知道那个包的存在。我会看看。谢谢