我需要一个\myprogram
带有 3 个可选参数和 1 个强制参数的命令。使用 pdfLateX --shell-escape 时, \myprogram
应该调用
echo '(#1,#2) parabola (#3,#4)'
(echo
此处代表自己的外部程序的替代品)并且应该与\draw
tikz 的命令结合使用,以便
\tikz \draw \myprogram[-1][-1][1]{2};
输出结果与
\tikz \draw (-1,-1) parabola (1,2);
我已经有一个有效的解决方案,只用 1 个参数(在给出的帮助下这里):
\documentclass{article}
\usepackage{tikz}
\makeatletter\let\zz\@@input\makeatother
\providecommand{\myprogram}[1]{\zz|"echo '(0,0) parabola (1,#1)'" }
\begin{document}
\tikz \draw \myprogram{2};
\end{document}
另外,我已经有一个针对 LuaLaTeX 的具有多个参数的有效解决方案(使用 tex.sprint 而不是 echo 来模拟我的外部程序):
\documentclass{article}
\usepackage{tikz,xparse}
\DeclareExpandableDocumentCommand{\xmyprogram}{O{0} O{0} O{1} m}{\directlua{tex.sprint('(#1,#2) parabola (#3,#4)')}}
\providecommand\myprogram{\romannumeral`\^^@\xmyprogram}
\begin{document}
\tikz \draw \myprogram[-1][-1][1]{2};
\end{document}
答案1
结合现有的两个部分,即可得到可行的 pdfLaTeX shell-escape 解决方案:
\documentclass{article}
\usepackage{tikz,xparse}
\makeatletter\let\zz\@@input\makeatother
\DeclareExpandableDocumentCommand{\xmyprogram}{O{0} O{0} O{1} m}{%
\zz|"echo '(#1,#2) parabola (#3,#4)'"
}
\providecommand\myprogram{\romannumeral`\^^@\xmyprogram}
\begin{document}
\tikz \draw \myprogram[-1][-1][1]{2};
\end{document}