从外部程序输入到 tikz 作为带有多个参数的 LaTeX 命令

从外部程序输入到 tikz 作为带有多个参数的 LaTeX 命令

我需要一个\myprogram带有 3 个可选参数和 1 个强制参数的命令。使用 pdfLateX --shell-escape 时, \myprogram 应该调用

echo '(#1,#2) parabola (#3,#4)'

echo此处代表自己的外部程序的替代品)并且应该与\drawtikz 的命令结合使用,以便

\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}

相关内容