将 LaTeX 标记转换为 HTML

问题描述 投票:0回答:3

[已更新]

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

我想要用这个

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

[/更新]

我有一些带有 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>

这样的东西

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

php latex cpu-word preg-replace adobe-indesign
3个回答
3
投票

如果您仍然想自己进行转换,您可以使用多次传递字符串来完成转换,首先替换内部元素:

$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 格式。此外,对于较长的输入,它会变得非常无效。


0
投票

如上所述,您可以使用专用的 LaTeX 到 HTMl 转换器,例如:SimpleTex4ht


0
投票

试试这个https://github.com/Pavel852/latex

在 php 中将 Latex 转换为 html

© www.soinside.com 2019 - 2024. All rights reserved.