
Я не изучил, как работает расширение TeX за кулисами. Короче говоря, как записать \StrGobbleLeft
вывод во внешний файл?
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{rawdata.txt}
beamerthemeAnnArbor.sty
beamerthemeAntibes.sty
beamerthemeBergen.sty
beamerthemeBerkeley.sty
beamerthemeBerlin.sty
beamerthemeBoadilla.sty
beamerthemeboxes.sty
beamerthemeCambridgeUS.sty
beamerthemeCopenhagen.sty
beamerthemeDarmstadt.sty
beamerthemedefault.sty
beamerthemeDresden.sty
beamerthemeEastLansing.sty
beamerthemeFrankfurt.sty
beamerthemeGoettingen.sty
beamerthemeHannover.sty
beamerthemeIlmenau.sty
beamerthemeJuanLesPins.sty
beamerthemeLuebeck.sty
beamerthemeMadrid.sty
beamerthemeMalmoe.sty
beamerthemeMarburg.sty
beamerthemeMontpellier.sty
beamerthemePaloAlto.sty
beamerthemePittsburgh.sty
beamerthemeRochester.sty
beamerthemeSingapore.sty
beamerthemeSzeged.sty
beamerthemeWarsaw.sty
beamerthemebars.sty
beamerthemeclassic.sty
beamerthemecompatibility.sty
beamerthemelined.sty
beamerthemeplain.sty
beamerthemeshadow.sty
beamerthemesidebar.sty
beamerthemesplit.sty
beamerthemetree.sty
\end{filecontents*}
\usepackage{xstring}
\begin{document}
% writer
\newwrite\writer
\immediate\openout\writer=list.txt\relax
% reader
\newread\reader
\openin\reader=rawdata.txt\relax
\makeatletter
\loop
\read\reader to \x
\unless\ifeof\reader
\filename@parse{\x}
\immediate\write\writer{\StrGobbleLeft{\filename@base}{11}}
\repeat
\makeatother
\closein\reader
\immediate\closeout\writer
\end{document}
решение1
\StrGobbleLeft
не расширяется, поэтому не будет работать внутри \write
. Но пакет xstring
так любезен, что предоставляет необязательный аргумент в конце. Если он присутствует, он принимает имя макроса, в котором хранится результат.
\StrGobbleLeft{\filename@base}{11}[\Result]
\immediate\write\writer{\Result}
решение2
Вам нужен макрос, который работает через расширение, если вы хотите поместить его в запись, например:
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{rawdata.txt}
beamerthemeAnnArbor.sty
beamerthemeAntibes.sty
beamerthemeBergen.sty
beamerthemeBerkeley.sty
beamerthemeBerlin.sty
beamerthemeBoadilla.sty
beamerthemeboxes.sty
beamerthemeCambridgeUS.sty
beamerthemeCopenhagen.sty
beamerthemeDarmstadt.sty
beamerthemedefault.sty
beamerthemeDresden.sty
beamerthemeEastLansing.sty
beamerthemeFrankfurt.sty
beamerthemeGoettingen.sty
beamerthemeHannover.sty
beamerthemeIlmenau.sty
beamerthemeJuanLesPins.sty
beamerthemeLuebeck.sty
beamerthemeMadrid.sty
beamerthemeMalmoe.sty
beamerthemeMarburg.sty
beamerthemeMontpellier.sty
beamerthemePaloAlto.sty
beamerthemePittsburgh.sty
beamerthemeRochester.sty
beamerthemeSingapore.sty
beamerthemeSzeged.sty
beamerthemeWarsaw.sty
beamerthemebars.sty
beamerthemeclassic.sty
beamerthemecompatibility.sty
beamerthemelined.sty
beamerthemeplain.sty
beamerthemeshadow.sty
beamerthemesidebar.sty
beamerthemesplit.sty
beamerthemetree.sty
\end{filecontents*}
\usepackage{xstring}
\begin{document}
% writer
\newwrite\writer
\immediate\openout\writer=list.txt\relax
% reader
\newread\reader
\openin\reader=rawdata.txt\relax
\makeatletter
\loop
\read\reader to \x
\unless\ifeof\reader
\filename@parse{\x}%
\def\zaptheme beamertheme{}%
\immediate\write\writer{\expandafter\zaptheme \filename@base}
\repeat
\makeatother
\closein\reader
\immediate\closeout\writer
\end{document}