我的例子。
需要从字符串“$${{15}\over{4}}$$“获取字符串”${{15}\over{4}}$“。
\documentclass[14pt]{extarticle}
\usepackage{xstring}
\usepackage{amsmath}
\def\f(#1){(#1)^2-5*(#1)+6}
\begin{document}
\section{Problem}
Evaluate $f(x)=\f(x)$ for $x=\frac 1 2$.
\section{Solution}
\immediate\write18{cas "x: 1/2\string$ tex(\f(x))\string$"}
\def\SX{\input{solution}}%This file has a string "$${{15}\over{4}}$$"
\StrGobbleLeft{\SX}{1}[\SX]%It produces an error
\StrGobbleRight{\SX}{1}[\SX]%It produces an error
$f(x)=$\SX
\end{document}
提前致谢。
答案1
使用您的代码,\SX
扩展为\input{solution}
,而不是文件的内容。
有了catchfile
它就可以工作了;你甚至可以忽略这些$
迹象:
\documentclass[14pt]{extarticle}
\usepackage{catchfile}
\usepackage{amsmath}
\def\f(#1){(#1)^2-5*(#1)+6}
\begin{document}
\section{Problem}
Evaluate $f(x)=\f(x)$ for $x=\frac 1 2$.
\section{Solution}
\immediate\write18{cas "x: 1/2\string$ tex(\f(x))\string$"}
%% Read the solution file, ignoring $
\CatchFileDef\SX{solution}{\catcode`\$=9 }
$f(x)=\SX$
\end{document}
如果您想要更完全地控制和使用xstring
,那么您必须使用模式\expandarg
,而不是默认的\fullexpandarg
,因为在加载\over
时不再是(不可扩展的)原语。amsmath
% catch the contents of solution.tex, removing the trailing space
\CatchFileDef\SX{solution}{\endlinechar=-1 }
\expandarg
\StrGobbleLeft{\SX}{2}[\SX]
\StrGobbleRight{\SX}{2}[\SX]
我会删除所有$
符号,因为就间距而言,$f(x)=$$$ 是不正确的。