如何使用 \immediate\write18 在 .txt 文件中输出新行

如何使用 \immediate\write18 在 .txt 文件中输出新行

我正在尝试foobar.txt使用创建一个文本文件\immediate\write18,但无法弄清楚如何正确获取\n以便 Unix 将这些行放在新行上。下面的 MWE 在输出文件中生成一行:

\n \n ---------\n Foo:foo \n Foo:foo \n 酒吧:酒吧 \n

我想要的输出文件中有几行空白行,后面跟着:

---------

福:福

酒吧:酒吧

附加问题:

  • 这似乎总是附加到文件中,而我认为正常的 Unix 方式是单次>覆盖文件,而两次>>附加到文件。如果文件已经存在,我该如何让它覆盖文件。或者这是禁止这样做的安全功能。

笔记:

  • 冒号后面的值不是固定的,而是在编译时构建的。否则,一个简单的cat解决方案就可以奏效了。

代码:

\documentclass{article}

\begin{document}
    \immediate\write18{%
    echo "         \string\n" >  foobar.txt%
    echo "         \string\n" >> foobar.txt%
    echo "---------\string\n" >> foobar.txt%
    echo "Foo: foo \string\n" >> foobar.txt%
    echo "Foo: foo \string\n" >> foobar.txt%
    echo "Bar: bar \string\n" >> foobar.txt%
    }
\end{document}

答案1

只需连接echo命令:

\documentclass{article}

\begin{document}
    \immediate\write18{%
    echo "" >  foobar.txt;
    echo "" >> foobar.txt;
    echo "--------" >> foobar.txt;
    echo "Foo: foo" >> foobar.txt;
    echo "Foo: foo" >> foobar.txt;
    echo "Bar: bar" >> foobar.txt
    }
\end{document}

如果noclobber设置了该变量,shell 将拒绝使用输出重定向命令覆盖现有文件。因此,如果在被调用命令 shell 的环境中设置了该变量,则第一个命令echo "" > foobar.txt将不会成功。

但是使用标准流写入将获得相同的结果:

\newwrite\foobar
\immediate\openout\foobar=foobar.txt
\immediate\write\foobar{}
\immediate\write\foobar{}
\immediate\write\foobar{--------}
\immediate\write\foobar{Foo: foo}
\immediate\write\foobar{Foo: foo}
\immediate\write\foobar{Foo: bar}
\immediate\closeout\foobar

相关内容