PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Error: can be used only in preamble.



marxlechen
27-10-2013, 21:04
Bei folgendem Programm (das einen befehl enthält, der ein neues tex-dokument erstellt in das ein übergebenes bild geschrieben wird und auch nach diesem benannt wird) bekomme ich leider die fehlermeldung Error: can be used only in preamble.
weiß jemand warum?

zum ausprobieren müsst ihr natürlich selbst ein eigenes bild hernehmen....


\documentclass{article}
\usepackage{scrlfile}

\makeatletter
\newcommand*\bilderpreamble{
\documentclass[border=1mm]{standalone}^^J
\usepackage{graphicx}^^J
\usepackage{xcolor}^^J
}
\makeatother

\newcommand{\test}[1]
{
\newwrite\bilderfile
\AtBeginDocument{%
\openout\bilderfile #1-Stahlbaukalender.tex
\write\bilderfile{\expandafter\detokenize\expandaf ter{\bilderpreamble}}%
\write\bilderfile{%
\string\begin{document}^^J%
\string\input{#1.pdf_tex}}%
\AfterReadingMainAux{%
\immediate\write\bilderfile{\string\end{document}} %
\immediate\closeout\bilderfile
}%
}
}

%\test{sd_023_DE}

\begin{document}
\test{sd_023_DE}
\end{document}

vielen lieben dank... max

marxlechen
27-10-2013, 21:30
ich habe den fehler behoben: mit \noexpand. doch warum geht es nun plötzlich. da bin ich schon neugierig, weil ich versteh nicht wirklich was ich da gemacht haben....

nun schaut es so aus:



\documentclass{article}
\usepackage{scrlfile}

\makeatletter
\newcommand*\bilderpreamble{
\documentclass[border=1mm]{standalone}^^J
\usepackage{graphicx}^^J
\usepackage{xcolor}^^J
}
\makeatother

\makeatletter
\newcommand{\test}[1]
{
\newwrite\bilderfile
\noexpand\AtBeginDocument{%
\openout\bilderfile #1-Stahlbaukalender.tex
\write\bilderfile{\expandafter\detokenize\expandaf ter{\bilderpreamble}}%
\write\bilderfile{%
%\string\makeatletter^^J%
%
%\string\makeatother^^J%
\string\begin{document}^^J%
\string\input{#1.pdf_tex}}%
\AfterReadingMainAux{%
\immediate\write\bilderfile{\string\end{document}} %
\immediate\closeout\bilderfile
}%
}
}
\makeatother
%\test{sd_023_DE}

\begin{document}
\test{sd_023_DE}
\end{document}

u_fischer
27-10-2013, 21:41
Mal abgesehen von anderen Problemen wie dem newwrite: Es ist doch sinnlos \AtBeginDocument in einem Befehl zu benutzen, der nach \begin{document} ausgeführt wird.

marxlechen
27-10-2013, 21:59
Es ist doch sinnlos \AtBeginDocument in einem Befehl zu benutzen, der nach \begin{document} ausgeführt wird.

ich versteh nicht ganz was du meinst... aber das leigt wohl an mir. ich hab mir des alles eher zusammengeschustert ohne es wirklich zu verstehen. :)