Невозможно записать в файл и ввести то же самое

Невозможно записать в файл и ввести то же самое
\documentclass{minimal}
\usepackage{etoolbox}

\newwrite\tempfile

\makeatletter
\let\features\@gobble
\makeatother
\newcommand{\feature}[1]{%
  \expandafter\def\expandafter\features\expandafter{\features,#1}%
}

\newcommand{\newText}[1]{\expandafter\newcommand\csname features#1\endcsname{}}

\newcommand{\addText}[2]{%
 \expandafter\ifdefempty\expandafter{\csname features#1\endcsname}
 {\expandafter\appto\csname features#1\endcsname{#2}}
 {\expandafter\appto\csname features#1\endcsname{,#2}}%
}

\def\lstText#1{\csname features#1\endcsname}

\makeatletter
\newcommand{\outText}[1]{%
 \immediate\openout\tempfile=\jobname_#1.tex
 \immediate\write\tempfile{\lstText{#1}}
 \immediate\closeout\tempfile
}
\makeatother

\makeatletter
\let\inputIFE\@input
\makeatother

\begin{document}

\inputIFE{test_A}

\newText{A}
\addText{A}{One}
\addText{A}{Two}
\addText{A}{Three

Birds and \textbf{bears}
}
\addText{A}{Four}
\lstText{A}
\outText{A}

\end{document}

решение1

Вам не нужно полное расширение \featuresA.

\documentclass{article}
\usepackage{etoolbox}

\newwrite\tempfile

\newcommand{\newText}[1]{\expandafter\newcommand\csname features#1\endcsname{}}
\newcommand{\addText}[2]{%
 \ifcsempty{features#1}{\csappto{features#1}{#2}}{\csappto{features#1}{,#2}}%
}
\providecommand{\expandtwice}{\unexpanded\expandafter\expandafter\expandafter}

\newcommand{\outText}[1]{%
 \immediate\openout\tempfile=\jobname_#1.tex
 \immediate\write\tempfile{\expandtwice{\csname features#1\endcsname}}%
 \immediate\closeout\tempfile
}

\newcommand\lstText[1]{\csname features#1\endcsname}

\makeatletter
\let\inputIFE\@input
\makeatother

\begin{document}

With \verb|\inputIFE|

\inputIFE{\jobname_A}

\newText{A}
\addText{A}{One}
\addText{A}{Two}
\addText{A}{Three

Birds and \textbf{bears}
}
\addText{A}{Four}

\bigskip

With \verb|\lstText|

\lstText{A}

\outText{A}

\end{document}

введите описание изображения здесь

Альтернативная реализация с expl3:

\documentclass{article}

\ExplSyntaxOn

\iow_new:N \g_example_out_iow

\NewDocumentCommand{\newText}{m}
  {
    \clist_clear_new:c { l_example_#1_clist }
  }
\NewDocumentCommand{\addText}{m +m}
  {
    \clist_put_right:cn { l_example_#1_clist } { #2 }
  }

\NewDocumentCommand{\outText}{m}
  {
    \iow_open:Nn \g_example_out_iow { \c_sys_jobname_str #1 }
    \iow_now:Nx \g_example_out_iow
      {
        \exp_not:v { l_example_#1_clist }
      }
  }

\NewDocumentCommand\lstText{m}
  {
    \clist_use:cn { l_example_#1_clist } { , }
  }

\ExplSyntaxOff

\makeatletter
\let\inputIFE\@input
\makeatother

\begin{document}

With \verb|\inputIFE|

\inputIFE{\jobname_A}

\newText{A}
\addText{A}{One}
\addText{A}{Two}
\addText{A}{Three

Birds and \textbf{bears}
}
\addText{A}{Four}

\bigskip

With \verb|\lstText|

\lstText{A}

\outText{A}

\end{document}

решение2

Компиляция вашего примера приводит к undefined control sequence: \@nilошибке. \writeнесет в себе \edef-подобное расширение. Ошибка возникает из-за полного расширения \textbf. Поэтому следует уделить некоторое внимание расширению.

Предположим, вы хотите записать результат одношагового расширения команды в \features<#1>файл , попробуйте сделать следующее:\jobname_#1.tex\outText

\newcommand{\outText}[1]{%
  \immediate\openout\tempfile=\jobname_#1.tex
  % write out content of \feature<#1>
  \immediate\write\tempfile{%
    \expandafter\expandafter\expandafter\unexpanded
    \expandafter\expandafter\expandafter{\csname features#1\endcsname}}%
  \immediate\closeout\tempfile
}

Связанный контент