2012-04-11 87 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