从文件中输入数字

从文件中输入数字

我需要将数字放入 Latex 中的文本中。我知道的唯一可能性是使用\input。所以我将每个数字放在其自己的文件中。例如,文件foo.dat包含6.062843465325870040e-01(我检查了尾随空格)。

出现的第一个问题是,latex 显然在 后面加了一个空格\inputMy number is \input{foo.dat}.因此

My number is 6.062843465325870040e-01 .

请注意点之前的不需要的空格.


下一个问题是,我显然想要格式正确的数字。所以我使用siunits' \num。但\num{\input{foo.dat}}会产生错误。

我该如何解决这个问题,或者有没有更好的解决方案(不生成正确格式的乳胶代码作为文件)。


我考虑过https://stackoverflow.com/questions/29078107/insert-values-from-a-file-in-a-latex-document到目前为止我的解决方案。

答案1

\unskip是你的朋友。

% arara: pdflatex
\RequirePackage{filecontents}
\begin{filecontents*}{foo.dat}
  6.062843465325870040e-01
\end{filecontents*}

\documentclass{article}

\begin{document}
My number is
  \textit{\input{foo.dat}\unskip}.
\end{document}

对于使用,siunitx您可能需要使用以下catchfile包:

% arara: pdflatex
\begin{filecontents*}{foo.dat}
  6.062843465325870040e-01
\end{filecontents*}

\documentclass{article}
\usepackage{siunitx}
\usepackage{catchfile}

\begin{document}
My number is
  \CatchFileDef{\foonum}{foo.dat}{}%
  \num\foonum.
\end{document}

输出

如果您必须经常执行此操作,将此过程包装到宏中可能会很有用。

% arara: pdflatex
\begin{filecontents*}{foo.dat}
  6.062843465325870040e-01
\end{filecontents*}

\documentclass{article}
\usepackage{siunitx}
\usepackage{catchfile}

\newcommand*\OutputFileNum[2][\num]{%
  \CatchFileDef{\tempnum}{#2}{}%
  #1{\tempnum}%
}

\begin{document}
My number is \OutputFileNum{foo.dat}.
\end{document}

答案2

你写了:

我需要在 Latex 中将数字输入到文本中。我知道的唯一可能性是使用\input。所以我将每个数字都放在自己的文件中。

另一个解决方案是定义宏,例如,名为 、\numA\numB,如下所示

\newcommand\numA{6.062843465325870040e-01}
\newcommand\numB{3.141592653589793238e-00}

在序言中,并在正文中使用它们,如下所示:

My first number is \numA.

如果要应用某些格式,例如使用“千位分隔符”,请加载siunitx包并写入

My second number is \num{\numB}.

完整的 MWE (最小工作示例):

在此处输入图片描述

\documentclass{article}
\usepackage{siunitx} % for '\num' macro
\newcommand\numA{6.062843465325870040e-01}
\newcommand\numB{3.141592653589793238}
\begin{document}
My first number is \numA.

My second number is \num{\numB}.
\end{document}

答案3

存储数字(在单个文件中任意数量)和检索单个数字的简单方法是通过 LaTeX + R 集成knitr。更好的是,您可以在同一个文档中使用这些数字进行任何数学运算。如果您不知道我在说什么,只需安装工作室R,将下面两个文件保存在同一个测试目录中,test.Rnw用 Rstudio 打开并点击“编译 PDF”。

测试文件

3.037494573458934585e-04
6.062843465325870040e-01
9.331454567567567675e-05

测试.Rnw

\documentclass{article}
\begin{document}
<<loaddata,echo=F,comment="">>=
mynumbers <-read.csv(file="test.dat",header=F)
x <- formatC(mynumbers$V1[2], format = "e", digits = 18)
@
My first  number is \Sexpr{mynumbers$V1[1]}.\par
My second number is \Sexpr{mynumbers$V1[2]}.\par 
My third  number is \Sexpr{mynumbers$V1[3]}.\par 
\bigskip
<<changeoptions,echo=F>>=
options(scipen=2,digits=19)
@
My second number roughly is \Sexpr{round(mynumbers$V1[2],2)}, 
more precisely  \Sexpr{round(mynumbers$V1[2],5)}.\par
My second number is \Sexpr{mynumbers$V1[2]}.\par
My second number is \Sexpr{x}.\par 
\end{document}

结果:

平均能量损失

相关内容