gpt4 book ai didi

php - 将 LaTeX 标记转换为 HTML

转载 作者:可可西里 更新时间:2023-10-31 23:23:52 24 4
gpt4 key购买 nike

[更新]

这是我的任务 – 将一堆自定义的 LaTeX 文件转换为 InDesign。所以我目前的方法是:通过将自定义 LaTeX 代码更改为更通用的 TeX 代码的 PHP 脚本运行 .tex 文件,然后我使用 TeX2Word 将它们转换为 .doc 文件,然后将它们放入 InDesign 中。

我想用这个 preg_replace 做什么是转换一些 TeX 标签,这样它们就不会被 TeX2Word 触及,然后我将能够在 InDesign 中运行一个脚本,将类似 HTML 的标签更改为 InDesign 文本框架、脚注、变量等。

[/UPDATED]

我有一些带有 LaTeX 标记的文本:

$newphrase = "\blockquote{\hspace*{.5em}Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Integer posuere erat a ante venenatis dapibus posuere
velit aliquet. Aenean lacinia bibendum nulla sed consectetur. Aenean
eu leo quam. Pellentesque ornare sem lacinia quam venenatis
vestibulum. Sed posuere consectetur est at lobortis. \note{Integer
posuere erat a ante venenatis dapibus posuere velit aliquet.
\textit{Vivamus} sagittis lacus vel augue laoreet rutrum faucibus
dolor auctor.}}";

我想做的是删除 \blockquote{...}并将其替换为 <div>...</div>

所以我已经尝试了无数种不同的版本:

$regex = "#(blockquote){(.*)(})#";
$replace = "<div>$2</div>";
$newphrase = preg_replace($regex,$replace,$newphrase);

这是输出

\<div>\hspace*{.5em</div>Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Integer posuere erat a ante venenatis dapibus posuere
velit aliquet. Aenean lacinia bibendum nulla sed consectetur. Aenean
eu leo quam. Pellentesque ornare sem lacinia quam venenatis
vestibulum. Sed posuere consectetur est at lobortis. \note{Integer
posuere erat a ante venenatis dapibus posuere velit aliquet.
\textit{Vivamus} sagittis lacus vel augue laoreet rutrum faucibus
dolor auctor.}}";

它的第一个问题是它替换了 \blockquote{ 中的所有内容到第一个} .当我想让它忽略下一个 }如果有另一个{在初始 \blockquote{ 之后.

我遇到的下一个问题是 \我似乎无法逃避它!我试过了 \\ , /\\/ , \\\ , /\\\/ , [\] , [\\] .什么都不管用!我敢肯定这是因为我不明白它应该如何工作。

最后,这就是我想要的结果:

<div>\hspace*{.5em}Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Integer posuere erat a ante venenatis dapibus posuere
velit aliquet. Aenean lacinia bibendum nulla sed consectetur. Aenean
eu leo quam. Pellentesque ornare sem lacinia quam venenatis
vestibulum. Sed posuere consectetur est at lobortis. \note{Integer
posuere erat a ante venenatis dapibus posuere velit aliquet.
\textit{Vivamus} sagittis lacus vel augue laoreet rutrum faucibus
dolor auctor.}</div>";

我打算制作 $regex & $replace到数组中,所以我可以替换像 \textit{Vivamus} 这样的东西有了这个<em>Vivamus</em>

任何指导都将受到欢迎和赞赏!

最佳答案

如果您仍然想自己进行转换,您可以多次遍历字符串,首先替换内部元素:

$t = '\blockquote{\hspace*{.5em}Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Integer posuere erat a ante venenatis dapibus posuere
velit aliquet. Aenean lacinia bibendum nulla sed consectetur. Aenean
eu leo quam. Pellentesque ornare sem lacinia quam venenatis
vestibulum. Sed posuere consectetur est at lobortis. \note{Integer
posuere erat a ante venenatis dapibus posuere velit aliquet.
\textit{Vivamus} sagittis lacus vel augue laoreet rutrum faucibus
dolor auctor.}}';

function hspace($m) { return "<br />"; }
function textit($m) { return "<i>" . $m[1] . "</i>"; }
function note($m) { return "<b>" . $m[1] . "</b>"; }
function blockquote($m) { return "<quote>" . $m[1] . "</quote>"; }

while (true) {
$newt = $t;
$newt = preg_replace_callback("/\\\\hspace\\*\\{([^{}]*?)\\}/", "hspace", $newt);
$newt = preg_replace_callback("/\\\\textit\\{([^{}]*?)\\}/", "textit", $newt);
$newt = preg_replace_callback("/\\\\note\\{([^{}]*?)\\}/", "note", $newt);
$newt = preg_replace_callback("/\\\\blockquote{([^{}]*?)\\}/", "blockquote", $newt);

if ($newt == $t) break;
$t = $newt;
}

echo $t;

当然,这可能适用于简单的示例,但您不能使用此方法正确解析整个 TeX 格式。此外,对于较长的输入,它变得非常无效。

关于php - 将 LaTeX 标记转换为 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10099490/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com