2012-04-11 67 views
4

[增订]转换乳胶标记为HTML

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

我想用这个preg_replace做什么是转换一些TeX标签,以便它们不会被TeX2Word触摸,那么我将能够在InDesign中运行脚本来改变类HTML标签到InDesign文本框架,脚注,变量等。

[/更新]

我有一些文本乳胶标记:

$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>

所以我代替它已经试过一个jillion不同的版本:

$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成阵列,这样我就可以用这个<em>Vivamus</em>

取代像\textit{Vivamus}东西任何指导都会受到欢迎和赞赏!

+1

你有没有考虑过使用LaTeX专用的HTML转换器?我确信这样的事情已经存在,并且可以帮助您避免实现自己的基于正则表达式的LaTeX格式化(这几乎肯定会不完整)。 – 2012-04-11 04:04:41

+0

我看过,我的问题是,我找到的那些都没有允许自定义标记标记。我有大约5000页的LaTeX书籍,里面充满了定制的LaTeX标签。 :-( – 2012-04-11 14:26:30

+0

另一件事是,我的所有文件都是“纯文本”,没有任何公式,我发现的大多数转换器都集中在数学公式上 – 2012-04-11 14:40:33

回答

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

这看起来不错!但是就像你对长输入所说的一样,我的一些文件非常大... – 2012-04-17 02:13:11

+0

我会继续接受这个,因为它真的回答了我问,尽管这不是我正在寻找的东西,但我可能会使用一些概念,这是一个很好的答案 - 谢谢!@kuba – 2012-04-19 15:04:02

0

很肯定这一个涵盖您的问题相当不错http://www.linuxjournal.com/article/7870

+0

这似乎主要是为了渲染数学公式,但我会看看我能用它做什么... – 2012-04-12 14:45:57

+0

该线程用于将数学方程转换为图像。:-( – 2012-04-12 17:20:14

+0

太糟糕了:(对不起) – 2012-04-13 06:24:44

0

正如上文所述,您可以使用专用的LaTeX到HTML转换器,如:SimpleTex4ht

+0

工作得很好,那个问题是我没有想要将整个文档转换为HTML – 2012-04-16 17:40:08