phpbb и LaTex

LaTex — наиболее популярный набор макрорасширений (или макропакет) системы компьютерной вёрстки TeX, который облегчает набор сложных документов (wiki). Сейчас нас интересует применение LaTex’a для написания формул и интеграция его в phpbb.
Задача эта не настолько страшная, как может показаться.

Базовая установка
Инструкция по установке состоит всего из трех шагов.
1. Создаем в папке include Вашего форума файл phpbb-latex.php. В него записываем следующее:

<?php
/**
 * LaTeX Plugin for phpBB - by Hui Chen
 * --------------------------------------------------------------------
 * @author Hui Chen <usa.chen@gmail.com> http://huichen.org
 * @version v0.1
 * @package phpbb-latex
 */
$latex_server="http://tex.72pines.org/latex.php?latex=";
preg_match_all("#\[tex.*?\](.*?)\[/tex.*?\]#si",$message,$tex_matches);
for ($i=0; $i < count($tex_matches[0]); $i++) {
	$pos = strpos($message, $tex_matches[0][$i]);
	$latex_formula = html_entity_decode($tex_matches[1][$i]);
	$alt_latex_formula = htmlentities($latex_formula, ENT_QUOTES);
	$alt_latex_formula = str_replace("\r","&#13;",$alt_latex_formula);
	$alt_latex_formula = str_replace("\n","&#10;",$alt_latex_formula);
	$url=$latex_server.'$'.urlencode($latex_formula).'$';
	$message = substr_replace($message, "<img src=\"".$url."\" title='".$alt_latex_formula."' alt='".$alt_latex_formula."' class=\"latex\">",$pos,strlen($tex_matches[0][$i]));
}
?>

2. В файле bbcode.php находим функцию bbcode_second_pass и в конце нее дописываем

include("PATH_TO_FORUM/includes/phpbb-latex.php");

PATH_TO_FORUM — это полный путь до папки includes.
3. Теперь надо как-то указать пользователям, что они могут использовать синтаксис LaTex. Идем в админку Вашего форума в раздел «Сообщения«. Выбираем пункт «BBcodes» и жмем «Добавить bbcode«.
latex
В поле «Подсказка» можете написать что-нибуть свое. Остальные поля должны быть заполнены как на рисунке.

Теперь открывает любую тему и жмем «Ответить«. В форме ответа должна добавиться кнопка «tex» (как на рисунке):
latex

Ленивый на этом остановится. Казалось бы задача решена и формулы можно использовать. Но ведь не каждый человек легко напишет такое:

 \frac{1}{\sigma\sqrt{2\pi}}\exp\left(-\frac{(x-\mu)^2}{2\sigma^2}\right)

что бы получить:
latex 3
Хм… И что же делать? А почему бы не поставить дополнительно редактор для формул? («А так можно?», «А такой есть?», «А это же наверно сложно?»). Ответы — да, можно. Да, есть. Нет, не сложно.

И так: LaTeX Equation Editor. Много писать о нем не буду (на официальном сайте информации достаточно). Скажу только, что он поддерживается IE, FireFox, Opera, Chrome, Safari.
Установка редактора очень простая. Так же три этапа (описание на базе темы prosilver):
1. Открываем папку styles/ТЕКУЩАЯ_ТЕМА/template/. Находим файл overall_header.html. Перед {META} пишем:

&lt;script type="text/javascript" src="http://latex.codecogs.com/editor.js"&gt;&lt;/script&gt;

2. В той же папке находим файл posting_editor.html (имя может отличаться — нам нужен файл, в котором находится форма добавления/редактирования сообщений). Где-то в начале (или где Вам будет удобнее) пишем такой фрагмент:

<a href="javascript:OpenLatexEditor('testbox','html','')">Запустить редактор формул</a>

Этот фрагмент создает ссылку, при нажатии на которую откроется редактор (откроется в новом окне).
latex 3
3. Что бы изменения вступили в силу, надо очистить кеш форума (главная страница админ. раздела, внизу).
Вот и все. Удобный редактор готов.

, , , ,

13 комментариев
  1. Глеб Said:

    при попытке вставить include в файл bbcode.php высвечивается ошибка:
    Parse error: syntax error, unexpected T_INCLUDE, expecting T_FUNCTION in /storage/home/srv******/htdocs/forum/includes/bbcode.php on line 136

    В чем может заключаться ошибка?

  2. KronuS Said:

    Вы вставили include в самом конце функции?
    Покажите две строки до include и две после.

  3. Глеб Said:

    }

    // Remove the uid from tags that have not been transformed into HTML
    $message = str_replace(‘:’ . $this->bbcode_uid, », $message);

    }

    /**
    * Init bbcode cache
    *
    * requires: $this->bbcode_bitfield
    * sets: $this->bbcode_cache with bbcode templates needed for bbcode_bitfield
    */
    include(«PATH_TO_FORUM/includes/phpbb-latex.php»);

    function bbcode_cache_init()
    {
    global $user, $phpbb_root_path;

  4. Глеб Said:

    вместо PATH_TO_FORUM = htdocs/forum

  5. KronuS Said:

    Вам необходимо вставить include внутрь функции.
    После
    $message = str_replace(‘:’ . $this->bbcode_uid, ”, $message);
    и перед «}»

  6. Глеб Said:

    Ясно. Сделал. Но теперь выдает:

    [phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 124: Division by zero
    [phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 124: Division by zero
    [phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 124: include(0php�) [function.include]: failed to open stream: No such file or directory
    [phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 124: include(0php�) [function.include]: failed to open stream: No such file or directory
    [phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 124: include() [function.include]: Failed opening ‘0php�’ for inclusion (include_path=’.:/usr/local/share/pear’)
    [phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 124: Division by zero
    [phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 124: Division by zero
    [phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 124: include(0php�) [function.include]: failed to open stream: No such file or directory
    [phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 124: include(0php�) [function.include]: failed to open stream: No such file or directory
    [phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 124: include() [function.include]: Failed opening ‘0php�’ for inclusion (include_path=’.:/usr/local/share/pear’)
    [phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 124: Division by zero
    [phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 124: Division by zero
    [phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 124: include(0php�) [function.include]: failed to open stream: No such file or directory
    [phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 124: include(0php�) [function.include]: failed to open stream: No such file or directory
    [phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 124: include() [function.include]: Failed opening ‘0php�’ for inclusion (include_path=’.:/usr/local/share/pear’)
    [phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 124: Division by zero
    [phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 124: Division by zero
    [phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 124: include(0php�) [function.include]: failed to open stream: No such file or directory
    [phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 124: include(0php�) [function.include]: failed to open stream: No such file or directory
    [phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 124: include() [function.include]: Failed opening ‘0php�’ for inclusion (include_path=’.:/usr/local/share/pear’)

    Мне кажется, я путь непрвильно указываю.

  7. KronuS Said:

    Да.
    Попробуйте указать полный путь.

  8. Глеб Said:

    Спасибо KronuS. У меня, оказывается, кавычки были кривые :))

    Правильный путь: include(«includes/phpbb-latex.php»); вставляется как вы и сказали

    Потрите комментарии, а то я вам все тут засрал

  9. KronuS Said:

    Рад был помочь.
    Посидели, поговорили 🙂

  10. GosEWeetten Said:

    🙂

  11. Андрей Said:

    Добрый день. Спасибо за понятное описание. Сделал все точно. Возникло две проблемы:
    1) в редакторе LaTex все кнопки открываются с абракадаброй вместо подписей (похоже на проблему с кодировкой, но я честно говоря не разбираюсь в этом)
    2) BBcode [teх] не работает. В итоге показывает отдельно символ несуществующей картинки, а за ней аргумент функции которую использовал для проверки.

  12. KronuS Said:

    Андрей, я давно уже не работал ни с phpbb, ни с latex. Увы, помочь не смогу.

  13. Андрей Said:

    Принято. Все равно спасибо.

Оставить комментарий

Top ↑ | Main page | Back