我想重新定义\input
命令,以便它也将输入文件嵌入到生成的文件中pdf
。到目前为止,我使用了这个问题中的代码(在文档上标记输入的开始位置以及文件名):
\documentclass{article}
\usepackage{embedfile}
\usepackage{pgfplots}
\usepackage{letltxmacro}
\makeatletter
\LetLtxMacro\latex@iinput\@iinput
\renewcommand{\@iinput}[1]{%
\latex@iinput{#1}%
\embedfile[desc=input file]{#1}%
}
\makeatother
\begin{document}
\input{input-prova.tex}
\begin{tikzpicture}
\begin{axis}
\addplot {x};
\end{axis}
\end{tikzpicture}
\end{document}
这有效,但它有一个问题:当我使用其他包时,我对包源代码中存在的命令的pgfplots
重新定义\input
也会影响到我最终嵌入的所有这些文件。\input
pdf
第二个问题是,当我尝试以这种方式向该命令添加参数时:
\makeatletter
\LetLtxMacro\latex@iinput\@iinput
\renewcommand{\@iinput}[2][input file]{%
\latex@iinput{#2}%
\embedfile[desc=#1]{#2}%
}
\makeatother
\begin{document}
\input[file description]{input-prova.tex}
\end{docmuent}
我收到一个错误...
我知道这两个问题都可以通过定义我自己的命令来解决:
\newcommand{\myinput}[2][input file]{%
\input{#2}%
\embedfile[desc=#1]{#2}%
}
但我想知道是否有一种不改变命令名称的方法\input
。
答案1
您不想修改内部命令,而是想修改用户级别的命令。
\makeatletter
\let\latex@input\input
\newcommand\red@input[2][input file]{%
\embedfile[desc={#1}]{#2}\latex@input{#2}%
}
\AtBeginDocument{\let\input\red@input}
\makeatother
这将确保只有\input
后面的命令\begin{document}
才会导致源的嵌入。但是,某些包可能会\input
在运行时使用,并且这些文件也会被嵌入。直接使用内部命令的命令\@iinput
不会导致嵌入。
另外,更改记录命令的语法并不是最好的方法,因此我会使用新命令:
\newcommand{\sourceinput}[2][input file]{%
\embedfile[desc={#1}]{#2}\input{#2}%
}
并用于\sourceinput
我真正想要嵌入的文件。