我猜想这是以前在线程中完成的,但是我只花了两个小时阅读各种线程,却无法解决一个非常基本的问题。
长话短说:我正在尝试在网络浏览器中为作业生成器创建动态方程式/图表。到目前为止,我一直在使用MathJax并将其用于事物的方程式方面。这很简单,因为我只需要包含一行Javascript代码,然后开始编写代码就很好了:
<script type="text/x-mathjax-config">
MathJax.Hub.Config({tex2jax: {inlineMath: [['|','|'], ['\\
(','\\)']]}});
</script>
<script type="text/javascript"
src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX- AMS-MML_HTMLorMML">
</script>
<?
$x = rand(2,5);
echo "x|^2| = ".pow($x,2).", so x = |\pm|$x";
?>
Run Code Online (Sandbox Code Playgroud)
并将其正确地转换为浏览器上的方程式。
现在,我的目标是做类似的事情,TikZ因此我可以使用以下代码动态创建三角形等:
<?
$vertex1 = rand(2,5);
$vertex2 = rand(2,5);
?>
\documentclass[12pt, border=5mm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw (0,0) node[anchor=north]{$A$}
-- (<? echo $vertex1; ?>,0) node[anchor=north]{$C$}
-- (<? echo $vertex1; ?>,<? echo $vertex2; ?>) node[anchor=south]{$B$}
-- cycle;
\end{tikzpicture}
\end{document}
Run Code Online (Sandbox Code Playgroud)
所以我的第一个问题,我认为回答“否”,但无论如何都值得检查-是否有一种简单的方法可以TikZ像MathJax一样调用Javascript?因为那太神奇了。
如果没有,我怎么能到达可以实际使用的TikZ地方HTML/Javascript?我相信有些网站会显示TikZ代码,但是我找不到关于此的任何文档(所有内容都假设我使用的LaTeX程序可以TikZ通过简单的\usepackage{tikz}调用进行召唤,我认为MathJax不能做到)。
现在,我正在通过MAMP在Macbook的本地主机上运行脚本,但最终我想将其移动到实际的Web服务器上-但是如果需要在根目录下安装它,我可以研究一下那。只是需要一些清楚的解释,因为我真的是LaTeX技术方面的新手。
小智 6
是的,您可以通过https://github.com/kisonecat/tikzjax在JavaScript中运行TikZ 并获取SVG输出。加载适当的CSS和JavaScript后,它将转换为
<script type="text/tikz">
\begin{tikzpicture}
\draw (0,0) circle (1in);
\end{tikzpicture}
</script>
Run Code Online (Sandbox Code Playgroud)
进入预期的SVG。
TikZJax通过实际在浏览器中运行TeX本身来工作。使用web2js,e-TeX的Pascal源码被编译为WebAssembly。在节点下运行,将加载乳胶格式(不包含所有连字符数据),并且
\documentclass[margin=0pt]{standalone}
\def\pgfsysdriver{pgfsys-ximera.def}
\usepackage{tikz}
Run Code Online (Sandbox Code Playgroud)
被执行。然后内存被转储;通过在浏览器中重新加载转储的内存,可以非常快地到达已加载TikZ的地步。(这相当于玩virtex和initex游戏,但在浏览器中。)通过将SVG驱动程序与dvi2html一起用于PGF ,DVI输出将转换为SVG。
所有这些实际上都发生在浏览器中!如果您访问http://tikzjax.com/并打开Web控制台,则会看到熟悉的输出
This is e-TeX, Version 3.14159265-2.6 (preloaded format=latex 2019.2.22)
Run Code Online (Sandbox Code Playgroud)