我需要将数字放入 Latex 中的文本中。我知道的唯一可能性是使用\input
。所以我将每个数字放在其自己的文件中。例如,文件foo.dat
包含6.062843465325870040e-01
(我检查了尾随空格)。
出现的第一个问题是,latex 显然在 后面加了一个空格\input
。My 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}
结果: