写入文件命令的完整扩展

写入文件命令的完整扩展

我有一个问题想要解决,也许你可以帮助我。

当我编译 mwe 时发生以下情况:

在 PDF 中你可以看到:(X/A)(Up/Down)

在file.txt中写入:(\frac {a}{x})(\frac {u}{d})

我怎样才能将 PDF 中看到的内容写入文件?

母语:

\documentclass[border=1cm]{standalone}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{expl3,xparse,xstring}

\ExplSyntaxOn
\RenewDocumentCommand{\frac}{mm}{
\IfStrEqCase{#1}{{a}{X}}[Up]
/
\IfStrEqCase{#2}{{x}{A}}[Down]
}

\NewDocumentCommand{\Write}{+m}{
\iow_new:N \tdm_iow
\cs_gset:Npn \my_wrr:x ##1{
 \iow_open:Nn \tdm_iow { file.txt }
 \iow_now:Nx \tdm_iow{##1}
}
\my_wrr:x {#1}
}
\ExplSyntaxOff

\begin{document}
\def\str{(\frac{a}{x})(\frac{u}{d})}
\str
\Write{\str}
\end{document}

感谢您的帮助!

答案1

代替字符串不可扩展的\IfStrEqCase用途解释3可扩展\strcase:nnTF
而不是\RenewDocumentCommand使用\RenewExpandableDocumentCommand

(安装最新的 TeX 后,您既不需要 也不需要\usepackage[utf8]{inputenc}\usepackage{expl3,xparse}

\documentclass[border=1cm]{standalone}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{expl3,xparse}

\ExplSyntaxOn
\RenewExpandableDocumentCommand{\frac}{mm}{
  \str_case:nnTF{#1}{{a}{X}}{}{Up}
  /
  \str_case:nnTF {#2}{{x}{A}}{}{Down}
}

\NewDocumentCommand{\Write}{+m}{
\iow_new:N \tdm_iow
\cs_gset:Npn \my_wrr:x ##1{
 \iow_open:Nn \tdm_iow { file.txt }
 \iow_now:Nx \tdm_iow{##1}
}
\my_wrr:x {#1}
}
\ExplSyntaxOff

\begin{document}
\def\str{(\frac{a}{x})(\frac{u}{d})}
\str
\Write{\str}
\end{document}

在此处输入图片描述

文件.txt

(X/A)(Up/Down)

答案2

我不确定你为什么要重新定义\frac,所以我会使用不同的名字。

  1. \iow_new:N应该在外面\Write

  2. 无需在里面设置函数\Write

  3. \IfStrEq无法完全扩展。

\documentclass{article}
%\usepackage{xparse} % uncomment for older LaTeX

\ExplSyntaxOn
\NewExpandableDocumentCommand{\FRAC}{mm}
  {
    \str_case:nnF { #1 } { {a}{X} } { Up }
    /
    \str_case:nnF { #1 } { {x}{A} } { Down }
  }

\iow_new:N \rodriguez_out_iow

\NewDocumentCommand{\Write}{O{\c_sys_jobname_str.txt}m}
  {
    \rodriguez_write:nn { #1 } { #2 }
  }

\cs_new:Nn \rodriguez_write:nn
  {
    \iow_open:Nn \rodriguez_out_iow { #1 }
    \iow_now:Nx \rodriguez_out_iow { #2 }
  }
\ExplSyntaxOff

\begin{document}

\def\str{(\FRAC{a}{x})(\FRAC{u}{d})}

\str

\Write{\str}

\end{document}

该文件\jobname.txt将包含

(X/Down)(Up/Down)

PDF 将

在此处输入图片描述

相关内容