想法是这样的。我希望我的学生有一个带有可填写字段的 PDF,并且会根据他们输入的数据在同一个 PDF 中绘制一个(简单的)图形。比如说,他们会输入要绘制的圆的半径。我想如果我在 Latex 中创建 PDF,也许这是可能的,因为在 PDF 中创建动画等复杂的事情。你们觉得呢?这可能吗?还有其他我不知道的“编程”PDF 的环境吗?谢谢!
答案1
PDF 可能不是适合此目的的格式,但 SVG 肯定是。图形对象可使用 JavaScript 编写脚本。
使用以下方式编译 TeX 输入
latex example
latex example
dvisvgm --bbox=papersize --font-format=woff2 --zoom=-1 example
example.tex
:
\documentclass[aspectratio=169]{beamer}
\usefonttheme{serif}
\usepackage{atbegshi}
\AtBeginShipout{\AtBeginShipoutUpperLeft{%
\special{dvisvgm:rawdef
<script type="text/javascript">
<![CDATA[ function $(id){return document.getElementById(id.toString().trim());}; ]]>
</script>
}}}
\begin{document}
\begin{frame}[t]{Interactive graphics}
Enter $x, y, R$:
\special{dvisvgm:raw
<foreignObject transform='translate({?x},{?(y-14)})' width='100' height='20'>
<input type='text' id='myInput' value='-140,-80,20'
style='font-size: 10px; padding: 0; border-radius:0'
xmlns='http://www.w3.org/1999/xhtml'/>
</foreignObject>
}\hspace{110bp}
\special{dvisvgm:raw
<foreignObject transform='translate({?x},{?(y-16)})' width='128' height='34'>
<input id="mySubmit" type='submit' value='Draw circle'
onclick='
[x,y,R]=$("myInput").value.toString().split(",");
$("myCircle").setAttribute("cx", x);
$("myCircle").setAttribute("cy", y);
$("myCircle").setAttribute("r", R);
'
xmlns='http://www.w3.org/1999/xhtml'/>
</foreignObject>
}\\[0.3\textheight]
\makebox[\linewidth]{%
\special{dvisvgm:raw
<g transform='translate({?x},{?y})scale(1,-1)'>
<circle id="myCircle" cx="-140" cy="-80" r="20" stroke="black" stroke-width="3" fill="red"/>
<circle fill="black" r="3"/>
</g>
}\makebox[0pt][l]{$\;(0,0)$}}
\end{frame}
\end{document}