![moodle.sty 不会将 tikz 图形插入 xml 输出文件](https://linux22.com/image/428346/moodle.sty%20%E4%B8%8D%E4%BC%9A%E5%B0%86%20tikz%20%E5%9B%BE%E5%BD%A2%E6%8F%92%E5%85%A5%20xml%20%E8%BE%93%E5%87%BA%E6%96%87%E4%BB%B6.png)
我想生成要导入到 Moodle 平台的测验。测验包括 tikz 绘图。
我在 Windows 10 上使用带有 TeX Live 2020/W32TeX 的 moodle 2021/01/04 57334 v0.8 包。当我运行 pdflatex 时,会生成 .pdf 和 .xml 文件而没有任何错误消息,但 base64 编码的图像不包含在 xml 输出文件中。moodle.sty 所需的所有命令都已安装(ghostscript、imagemagick 和 optipng)。所有 tikz 输出文件(..-tikztemp-1.pdf、..-tikztemp-1.png、..-tikztemp-1、..-tikztemp-1.aux、..-tikztemp-1.dpth、..-tikztemp-1.log、..-tikztemp-1.md5)都在输入 .tex 文件的目录中生成。文件 ..-tikztemp-1 包含应插入 xml 文件的编码图像。手动将 ..-tikztemp-1 的内容复制到 xml 文件中会生成一个可成功导入 Moodle 平台的 xml 文件。
这是一个示例文件.tex
\documentclass[12pt]{article}
\usepackage[section,tikz]{moodle}
\usepackage{amsmath,amssymb,esint}
\usepackage[american,siunitx,smartlabels,EFvoltages]{circuitikz}
\begin{document}
\begin{quiz}[points=10,penalty=0.5]{Trial}
\begin{shortanswer}[points=30]{EC-P001}
For the electric circuit below, obtain the equivalent resistance at the terminals a-b.
\begin{center}\begin{tikzpicture}\draw
(0,3) node[left]{a} to[R, l^=\SI{25}{\ohm}, o-] ++(3,0)
to[R, l^=\SI{10}{\ohm}] ++(3,0)
to[R, l^=\SI{20}{\ohm}] ++(3,0) -- ++(1,0)
to[R, l^=\SI{15}{\ohm}] ++(0,-3)
to[short, -o] (0,0) node[left]{b}
(3,3) to[short, *-] ++(0,1.5)
to[R, l^=\SI{30}{\ohm}] ++(6,0)
to[short, -*] ++(0,-1.5)
(6,3) to[R, l^=\SI{5}{\ohm}, *-*] ++(0,-3)
;\end{tikzpicture}
\end{center}
\item 36.25 Ohm
\end{shortanswer}
\end{quiz}
\end{document}
我运行pdflatex.exe -synctex=1 -shell-escape -interaction=nonstopmode
。pdflatex 的相关输出是
...
===== 'mode=convert with system call': Invoking 'pdflatex -shell-escape -halt-o
n-error -interaction=batchmode -jobname "file-tikztemp-1" "\def\tikzexternalrealjob{file}\input{file}"' ========
runsystem(pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname
"file-tikztemp-1" "\def\tikzexternalrealjob{file}\input{file}")...executed.
\openout5 = `file.auxlock'.
<file-tikztemp-1.pdf, id=29, 331.72932pt x 158.65575pt>
File: file-tikztemp-1.pdf Graphic file (type pdf)
<use file-tikztemp-1.pdf>
Package pdftex.def Info: file-tikztemp-1.pdf used on input line 97.
(pdftex.def) Requested size: 331.72852pt x 158.65535pt.
moodle.sty: Converting picture 'file-tikztemp-1.pdf' to PNG...
runsystem(gswin64c.exe -dBATCH -dNOPAUSE -sDEVICE=pngalpha -sOutputFile=file-tikztemp-1.png -r150 file-tikztemp-1.pdf)...executed.
moodle.sty: Optimizing 'file-tikztemp-1.png'...
runsystem("C:\Portable Program Files\OptiPNG\optipng.exe" file-tikztemp-1.png)...executed.
moodle.sty: Converting 'file-tikztemp-1.png' to base64...
runsystem(certutil -encode "file-tikztemp-1.png" tmp.b64 && findstr /vbc:"---" tmp.b64 > "file-tikztemp-1" && del tmp.b64")...executed.
moodle.sty: Reading base64 file 'file-tikztemp-1.enc'...
moodle.sty: base64 data saved.
\openout5 = `file.auxlock'.
...
但是在 xml 输出文件中不包含解码的 base64 图像,我只得到应该插入图像的以下位置:
... <IMG SRC="data:image/png;base64,"> ...
谢谢
答案1
尝试执行以下操作:将您的发行版文件moodle.sty
与测试文件一起复制到当前目录中。
编辑该文件,在第 3330 行左右,你会发现:
\def\cmdline{\baselxiv\otherspace -encode "#1#2"\otherspace tmp.b64 && findstr /vbc:"---" tmp.b64 > "#1" && del tmp.b64"}%
尝试将其更改为:
\def\cmdline{\baselxiv\otherspace -encode "#1#2"\otherspace tmp.b64 && findstr /vbc:"---" tmp.b64 > "#1.enc" && del tmp.b64"}%
(注意添加的.enc
)并重试。
这已经被报告为一个错误:https://framagit.org/mattgk/moodle/-/issues/81