生成不带空格的字符串(用于文件名)

生成不带空格的字符串(用于文件名)

我的情况是这样的。我在某些宏定义中有一个字符串,它将用作文件名。在创建文件之前,我想从该名称中删除所有空格。我尝试了以下类似方法。

\documentclass{article}

\usepackage{xstring}

\def\namewithspaces{A Name With Space}

\newtoks\tempstring
\def\createfilewithoutspaceinname#1{\tempstring=\expandafter{\StrDel{#1}{ }.lst}
  \typeout{\the\tempstring}
  \newwrite\fl
  \openout\fl=\the\tempstring}

\begin{document}

\createfilewithoutspaceinname{\namewithspaces}

\end{document}

我预计文件名应该是这样的,ANameWithSpace.lst但实际上并非如此。

从添加的命令可以看出\typeout,的值为\tempstring

\let \@xs@assign \@xs@expand@and@assign \@xs@StrSubstitute@ {\namewithspaces }{ }{}.lst

看起来我错过了一些扩展。

答案1

在我看来,\tempstring应该是一个宏,它用作的最后一个可选参数,\StrDel并且这个宏应该被输入到\openout\tl

我还建议不要\newwrite每次\createfilenamewithspaceinname都使用(除非文件已关闭等或在组中)

\documentclass{article}

\usepackage{xstring}

\def\namewithspaces{A Name With Space}

\newwrite\fl%

\def\tempstring{}
\def\createfilewithoutspaceinname#1{%
  \expandarg\StrDel{#1.lst}{ }[\tempstring]
  \typeout{tempstring is \tempstring}
  \immediate\openout\fl=\tempstring
}

\begin{document}


\createfilewithoutspaceinname{\namewithspaces}

\immediate\write\fl{\string Hello World}

\immediate\closeout\fl

\end{document}

答案2

xstring命令大多不能通过扩展来工作。latex 格式包含一个可扩展的命令来删除空格。

\documentclass{article}



\def\namewithspaces{A Name With Space}

\makeatletter
\def\createfilewithoutspaceinname#1{%
\typeout{\expandafter\zap@space#1 \@empty}}
\makeatother

\begin{document}

\createfilewithoutspaceinname{\namewithspaces}

\end{document}

导致消息

ANameWithSpace

在控制台上

相关内容