从Mathematica导出自定义格式的表达式

Tim*_*imo 7 formatting wolfram-mathematica fortran77

如何让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.
...
Run Code Online (Sandbox Code Playgroud)

但得到这个:

MM11 = FortranForm[mH1^2 + (g2^2*v1^2)/2 - ...
Run Code Online (Sandbox Code Playgroud)

或这个:

MM11 = mH1**2 + (g2**2*v1**2)/2. - (g2**2*
 (v1**2/2. - ((v2*Cos(phi2) - (0,1)*v2*Sin(phi2))*
...
Run Code Online (Sandbox Code Playgroud)

Pil*_*lsy 8

这是一项令人惊讶的鲜为人知的Splice功能.首先,使用扩展名制作模板文件".mf",如下所示:

file = "test.mf";

out = OpenWrite[file];

WriteString[out, "MH1 = <* form *>"];

Close[out];
Run Code Online (Sandbox Code Playgroud)

现在,当您使用时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;
Run Code Online (Sandbox Code Playgroud)

并打电话

Splice["test.mf", PageWidth -> 72];
Run Code Online (Sandbox Code Playgroud)

这将自动推断您想要FortranForm从文件扩展名输出,并允许您设置PageWidth为一个选项,您将在自动生成的文件中获得相当不错的结果"test.f"(请注意新的扩展名):

MH1 =         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
Run Code Online (Sandbox Code Playgroud)

查看文档以Splice获取更多选项(更改输出文件的名称等).