我想定义一个命令“\foo”,它输出 shell 命令的结果,例如:
\newcommand{\foo}[1]{\input{|"#1"}}
这是可行的,除非我尝试在 \includegraphics 上下文中使用此命令:
\includegraphics{\foo{command attr1 attr2}}
在哪里命令是一个输出文件名的 shell 命令。例如,使用命令:“echo im”和 im.png 同一目录中的图像,我收到此错误:
! Undefined control sequence.
\filename@simple ...#2\\}\fi \edef \filename@base
{#1}
l.14 \includegraphics{\foo{echo im}}
答案1
如果您通过将 shell 命令移到图形包含之前来使文件名解析器更容易一些(我当时并没有计划使它工作:-),它就会起作用:
\documentclass{article}
\usepackage{graphicx}
\makeatletter
\long\def\eatspace#1 {#1}
\def\foo#1{\edef\result{\expandafter\eatspace\@@input|"#1;echo \string\\noexpand"}}
\makeatletter
\begin{document}
\foo{echo ug}
\includegraphics{\result}
\end{document}
然后
pdflatex --shell-escape gr44
报告:
...
<ug.png, id=1, 264.23718pt x 288.3272pt> <use ug.png> [1{/usr/local/texlive/20
13/texmf-var/fonts/map/pdftex/updmap/pdftex.map} <./ug.png>] (./gr44.aux) )</us
r/local/texlive/2013/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb>
Output written on gr44.pdf (1 page, 9920 bytes).
Transcript written on gr44.log.
显示图片已包含在内