5

[更新しました]

これが私の仕事です–カスタムビルドされたLaTeXファイルの束をInDesignに変換します。したがって、現在の方法は次のとおりです。カスタムLaTeXコードをより一般的なTeXコードに変更するPHPスクリプトを介して.texファイルを実行し、TeX2Wordを使用してそれらを.docファイルに変換し、それらをInDesignに配置します。

これでやりたいpreg_replaceのは、いくつかのTeXタグを変換して、TeX2Wordに触れないようにすることです。そうすれば、HTMLのようなタグをInDesignテキストフレームに変更するスクリプトを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>

どんなガイダンスも大歓迎です!

4

2 に答える 2

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 形式全体を正しく解析することはできません。また、入力が長いと非常に効果がなくなります。

于 2012-04-16T18:08:37.820 に答える
0

上で提案したように、 SimpleTex4htなどの専用のLaTeXからHTM1へのコンバーターを使用できます。

于 2012-04-16T08:38:26.807 に答える