如何让Mathematica导出/保存/写入具有正确Fortan77格式的文本文件,即72列和第六列的延续标记?
我正在使用Mathematica生成大而复杂的分析表达式,然后我需要将其插入到预先存在的Fortran77代码中。我使用FortranForm[]
和
SetOptions[$Output, PageWidth -> 72]
但是,我无法弄清楚如何让Mathematica正确输出到文本文件。我想要这样的东西:
MM11 = mH1**2 + (g2**2*v1**2)/2. -
- (g2**2*(v1**2/2. -
- ((v2*Cos(phi2) - (0,1)*v2*Sin(phi2))*
- (v2*Cos(phi2) + (0,1)*v2*Sin(phi2)))/2.))/2.
...
但得到这个:
MM11 = FortranForm[mH1^2 + (g2^2*v1^2)/2 - ...
或者这个:
MM11 = mH1**2 + (g2**2*v1**2)/2. - (g2**2*
(v1**2/2. - ((v2*Cos(phi2) - (0,1)*v2*Sin(phi2))*
...
答案 0 :(得分:8)
这是令人惊讶的鲜为人知的Splice
功能的工作。首先,您创建一个扩展名为".mf"
的模板文件,如下所示:
file = "test.mf";
out = OpenWrite[file];
WriteString[out, "MH1 = <* form *>"];
Close[out];
现在,当您使用Splice
时,Mathematica会自动使用其评估表单替换<*
和*>
分隔符之间的所有内容。所以,如果你设置
form = 4 + b9^2 + c1^5 + c4^5 + h10^4 + j2 + k10^4 + p10^4 + q5^5 +
q8 + s3^3 + s7^2 + t6^3 + u3^2 + u9^3 + x8^4 + z2^3;
并致电
Splice["test.mf", PageWidth -> 72];
会自动推断您希望从文件扩展名输出FortranForm
,并允许您将PageWidth
设置为选项,您将在自动生成的文件中获得相当不错的结果{{1 (注意新的扩展名):
"test.f"
查看Splice
的文档以获取更多选项(更改输出文件的名称等)。