我正在寻找一个可以在我的 GNU/Linux 服务器上运行的 LaTeX 编辑器,并允许实时协作以及在线编译和预览。
到目前为止我已经尝试过:
- 飞拉泰克斯:编辑功能正常,但 PDF 预览无法使用(错误报告)
- Cloud9 IDE:工作正常,但我无法获得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
这似乎就是这样一个解决方案: