我正在从磁盘读取几个 txt 文件,我想对它们进行一些简单的计算,并能够将它们打印在页面上。
基本上我有:
\newcommand\getinput[2]{
\immediate\write18{do-some-things > input.txt}
\input{input.txt}}
现在我想要使用该输入进行简单的添加,如下所示:
\newcounter{mycounter}
My Input: \getinput
\addtocounter{mycounter}{\getinput}
My Sum: \themycounter
答案1
如果要直接将其用于计数器,则需要通过扩展来实现,因此不能使用\write
。相反,可以利用现代引擎的管道输入功能。使用一个工作示例echo
\documentclass{article}
\makeatletter
\newcommand\getinput{\@@input|"echo 1"}
\makeatother
\begin{document}
\newcounter{mycounter}
My Input: \getinput
\addtocounter{mycounter}{\getinput}
My Sum: \themycounter
\end{document}
在这里,我们需要原始的“原始”行为\input
,因此需要使用它的 LaTeX 名称\@@input
。
如果您对两步流程感到满意,即首先保存信息然后使用它,那么您可以使用更强大的expl3
包装器来实现相同的想法。
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand \saveinput { m m }
{ \sys_get_shell:nnN {#1} { } #2 }
\ExplSyntaxOff
\begin{document}
\newcounter{mycounter}
\saveinput{echo 1}\savedinput
My Input: \savedinput
\addtocounter{mycounter}{\savedinput}
My Sum: \themycounter
\end{document}
答案2
\documentclass{article}
\usepackage{readarray}
\newcounter{tmpcnt}
\newwrite\notesfile
\newcommand\getinput[1]{
\immediate\openout\notesfile=input.txt
\immediate\write\notesfile{\the\numexpr#1+\thetmpcnt\relax}
\immediate\closeout\notesfile
\readdef{input.txt}\inputvar
\inputvar
}
\begin{document}
\setcounter{tmpcnt}{5}
\getinput{3}
\addtocounter{tmpcnt}{\inputvar}
\getinput{4}
\getinput{-2}
\end{document}