von KurtZwiebel » Sa 10. Dez 2022, 18:14
Ich habe folgendes Problem: Ich versuche derzeit, eine Dokumentenklasse zu schreiben. Das .tex soll beim Kompilieren zusätzlich weitere .tex-Dateien erzeugen, was mit dem \write -Befehl erreicht wird. Dabei funktioniert allerdings ein selbst definiertes Kommando mit einer \ForEachX-Loop aus dem forarray Paket, das erkennen soll, in welcher Liste ein Wort ist nicht mehr und gibt die Fehlermeldung:
! Use of \ForEachX@arg doesn't match its definition
und eine ganze Reihe anderer Fehler aus.
Für die Ausführbarkeit des Minimalbeispiels verwende ich die Dokumentenklasse article und definiere die fraglichen Befehle im Kopf. Allerdings ist meine .cls-Datei ISO-kodiert und die übliche Kodierung einer .tex-Datei ist utf8.
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{ifthen}
\usepackage{forarray}
\def\eins#1{\gdef\Eins{#1}}
\def\zwei#1{\gdef\Zwei{#1}}
\newcounter{Listenabfrage}
\gdef\IteminListe#1{%
\setcounter{Listenabfrage}{0}%
\ForEachX{,}%
{\ifthenelse{\equal{#1}{\thislevelitem}}%
{Item in Liste 1.%
\stepcounter{Listenabfrage}
\ExitForEach}{}}
{\Eins}
\ifnum\value{Listenabfrage}=0
\ForEachX{,}%
{Item in Liste 2.
\stepcounter{Listenabfrage}
\ExitForEach}%
{\Zwei}%
\else
\fi}
\gdef\meinBefehl#1{%
Fülltext blablabla. \IteminListe{#1}
\immediate\write\filehandleone{\expanded\IteminListe{#1}}
}
\eins{Wort,nocheinWort,weiteresWort}
\zwei{bla,bli,blub}
\newwrite\filehandleone
\immediate\openout\filehandleone=\jobname-Extradatei.tex
\begin{document}
\meinBefehl{bla}
\end{document}
\immediate\closeout\filehandleone
In dem Moment, in dem die ganze Sache mit der Extradatei weggelassen wird, verschwinden auch die Fehler. Allerdings tauchen die gleichen Fehler wieder auf, wenn \meinBefehl in einem \ifthenelse-Statement verwendet wird und ein Abgleichen des Ergebnisses mit gewünschten Ergebnissen mit einem \if oder\ifx-Statement funktioniert nicht. Auch das temporäre Speichern des Ergebnisses von \meinBefehl mit \edef scheint nicht möglich zu sein.
Gibt es eine Möglichkeit, das zum Funktionieren zu bringen?
Ich habe folgendes Problem: Ich versuche derzeit, eine Dokumentenklasse zu schreiben. Das .tex soll beim Kompilieren zusätzlich weitere .tex-Dateien erzeugen, was mit dem \write -Befehl erreicht wird. Dabei funktioniert allerdings ein selbst definiertes Kommando mit einer \ForEachX-Loop aus dem forarray Paket, das erkennen soll, in welcher Liste ein Wort ist nicht mehr und gibt die Fehlermeldung:
! Use of \ForEachX@arg doesn't match its definition
und eine ganze Reihe anderer Fehler aus.
Für die Ausführbarkeit des Minimalbeispiels verwende ich die Dokumentenklasse article und definiere die fraglichen Befehle im Kopf. Allerdings ist meine .cls-Datei ISO-kodiert und die übliche Kodierung einer .tex-Datei ist utf8.
[code]
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{ifthen}
\usepackage{forarray}
\def\eins#1{\gdef\Eins{#1}}
\def\zwei#1{\gdef\Zwei{#1}}
\newcounter{Listenabfrage}
\gdef\IteminListe#1{%
\setcounter{Listenabfrage}{0}%
\ForEachX{,}%
{\ifthenelse{\equal{#1}{\thislevelitem}}%
{Item in Liste 1.%
\stepcounter{Listenabfrage}
\ExitForEach}{}}
{\Eins}
\ifnum\value{Listenabfrage}=0
\ForEachX{,}%
{Item in Liste 2.
\stepcounter{Listenabfrage}
\ExitForEach}%
{\Zwei}%
\else
\fi}
\gdef\meinBefehl#1{%
Fülltext blablabla. \IteminListe{#1}
\immediate\write\filehandleone{\expanded\IteminListe{#1}}
}
\eins{Wort,nocheinWort,weiteresWort}
\zwei{bla,bli,blub}
\newwrite\filehandleone
\immediate\openout\filehandleone=\jobname-Extradatei.tex
\begin{document}
\meinBefehl{bla}
\end{document}
\immediate\closeout\filehandleone
[/code]
In dem Moment, in dem die ganze Sache mit der Extradatei weggelassen wird, verschwinden auch die Fehler. Allerdings tauchen die gleichen Fehler wieder auf, wenn \meinBefehl in einem \ifthenelse-Statement verwendet wird und ein Abgleichen des Ergebnisses mit gewünschten Ergebnissen mit einem \if oder\ifx-Statement funktioniert nicht. Auch das temporäre Speichern des Ergebnisses von \meinBefehl mit \edef scheint nicht möglich zu sein.
Gibt es eine Möglichkeit, das zum Funktionieren zu bringen?