我有一个问题想要解决,也许你可以帮助我。
当我编译 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
,所以我会使用不同的名字。
\iow_new:N
应该在外面\Write
无需在里面设置函数
\Write
\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 将