将 \input 转换为数字

将 \input 转换为数字

我正在从磁盘读取几个 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}

在此处输入图片描述

相关内容