基于 Web 的自托管协作式 LaTeX 编辑器

基于 Web 的自托管协作式 LaTeX 编辑器

我正在寻找一个可以在我的 GNU/Linux 服务器上运行的 LaTeX 编辑器,并允许实时协作以及在线编译和预览。

到目前为止我已经尝试过:

所以我的问题是:有人可以推荐一个真正有效的编辑器吗,或者有人知道如何解决我在使用 FlyLaTeX 和 Cloud9 IDE 时遇到的问题。

编辑:我给 FlyLaTeX 的开发人员写了一封电子邮件,他解释说 FlyLaTeX 目前不支持其他 LaTeX 软件包。所以 FlyLaTeX 目前不是一个选择。

我偶然发现以太TeX,基于 etherpad lite。我会尝试一下这个。

答案1

您可以使用 CoCalc Docker 镜像作为非常易于安装的免费开源自托管协作式基于 Web 的 LaTeX 编辑器。请参阅https://github.com/sagemathinc/cocalc-docker。要测试感觉如何,请访问https://cocalc.com,创建一个项目,单击 +New,创建一个 LaTeX 文件,然后测试编辑。这是一个功能齐全的 latex 编辑器,具有正向和反向搜索功能(双击右侧的预览可转到左侧的相应点等)。您可以在左侧拆分编辑器窗格,以便同时查看文档中的两个点。有语法突出显示、代码折叠,TimeTravel 按钮可让您查看文档的每个过去版本(看看为什么它突然无法编译!)。使用另一个浏览器(或帐户)登录以测试实时协作编辑。

在此处输入图片描述

我最初编写这个协作式 LaTeX 编辑器是为了支持写书http://wstein.org/rh/与 Barry Mazur 合作,但 Harald Schilly 等人多年来对其进行了极大改进。

由于我是 SageMath 的创始人,因此 CoCalc 中的 LaTeX 编辑器也完全支持鼠尾草开箱即用,更一般地说,您可以完全自定义编译管道的任何内容。

答案2

“自托管协作式基于 Web 的 LaTeX 编辑器” 的另一种解决方案是分享乳胶。他们有一个主页,您可以在其中使用他们的系统,但您也可以将其托管在自己的服务器上。以下是代码链接: https://github.com/sharelatex/sharelatex

答案3

一种可能的解决方案是使用任何在线/自托管协作工具(Cloud 9/Collide 等)对 .tex 文件进行编辑,然后使用小型 php 或 bash 脚本通过单击按钮通过 PHP/Shell 处理 TeX 文件。

也许可以使用像这样的 PHP:

private function runXeLaTeX($dir = '/tmp', $fileToUse, $noPDF = FALSE) {
        $descriptorspec = array(
                0 => array("pipe", "r"),  // stdin is a pipe that the child will read from
                1 => array("pipe", "w"),  // stdout is a pipe that the child will write to
                2 => array("file", $dir."/error-output.txt", "a") // stderr is a file to write to
        );

        $cwd = $dir;
//      $env = array('some_option' => 'aeiou');

        if ($noPDF) {
            $process = proc_open('/usr/texbin/xelatex -no-pdf '.$fileToUse.'.tex', $descriptorspec, $pipes, $cwd);
        }
        else {
            $process = proc_open('/usr/texbin/xdvipdfmx -vv '.$fileToUse.'.xdv', $descriptorspec, $pipes, $cwd);
        }

        if (is_resource($process)) {
            // $pipes now looks like this:
            // 0 => writeable handle connected to child stdin
            // 1 => readable handle connected to child stdout
            // Any error output will be appended to /tmp/error-output.txt

            fwrite($pipes[0], '<?php print_r($_ENV); ?>');
            fclose($pipes[0]);

//          echo stream_get_contents($pipes[1]);
            fclose($pipes[1]);

            // It is important that you close any pipes before calling
            // proc_close in order to avoid a deadlock
            $return_value = proc_close($process);
        }
        return $return_value;
    }

答案4

这似乎就是这样一个解决方案:

使用 Etherpad 和 LaTeX 进行协作写作

相关内容