Seite 1 von 1

Verzeichnis wird nicht geschrieben

Verfasst: So 11. Okt 2015, 17:42
von kannstmasehn
Moin,

folgendes Problem:

Ich möchte Tabellen-, Abbildungs- und Symbolverzeichnisse ausgeben. Komischerweise funktionierte das bis heute Mittag auch alles, jetzt geht es nicht mehr, dass alle drei Typen ausgegeben werden. Ich bekomme die Fehlermeldung "! No room for a new \write ."

Ich habe meine Arbeit auf folgendes Minimalbeispiel gekürzt (Ich weiß es ist sehr lang, aber wenn ich noch mehr rausnehme, dann kommt die Fehlermeldung nicht mehr):
\documentclass[12pt,a4paper,twoside,openright,BCOR=20mm,listof=totoc,bibliography=totoc,
numbers=noenddot,appendixprefix=true,titlepage]{scrreprt}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}


%% ========== Links innerhalb des Dokumentes 
\usepackage[
	pdftex=true, 
	colorlinks=true,
 	breaklinks=false,
	citecolor=black,
	linkcolor=black,	
	menucolor=black,	
	urlcolor=black
]{hyperref}

%% ========== Tabellen
\usepackage{multirow}		%Mehrere Zeilen
\usepackage{booktabs}		%Neue Tabellenbefehle (Toprule, Midrule, Bottomrule)
\usepackage{rotating}		%Rotation innerhalb einer Zelle
\newcommand\tabrotate[1]{\begin{turn}{90}#1\end{turn}}
\usepackage{colortbl}		% für die Hintergrundfarbe einzelner Zellen in Tabellen
\definecolor{dunkelgrau}{rgb}{0.8,0.8,0.8}
\definecolor{hellgrau}{rgb}{0.95,0.95,0.95}
\usepackage{varwidth}
\newcommand\tabvarwidth[2][3cm]{\begin{varwidth}[b]{#1}\centering\hspace{0pt}\ignorespaces#2\end{varwidth}}
\usepackage{csvsimple}



%% ========== Glossar
\usepackage{longtable}
\usepackage[
nonumberlist, %keine Seitenzahlen anzeigen
acronym,      %ein Abkürzungsverzeichnis erstellen
%toc,          %Einträge im Inhaltsverzeichnis
%section,      %im Inhaltsverzeichnis auf section-Ebene erscheinen
sanitize={symbol=false} %
]
{glossaries}
  
\renewcommand*{\glspostdescription}{}
  
%%Neuer Eintragstyp
\newglossary[fog]{formelgr}{foi}{foo}{Formelzeichengr} 
\newglossary[fogq]{formella}{foii}{fooo}{Formelzeichenla}
\newglossary[fogqg]{formelma}{foiii}{foooo}{Formelzeichenma}
\newglossary[fogqa]{formelzei}{foiia}{foooa}{Formelzeichenzei}
 
%Ein neuer Verzeichnisstil der auch die Einheit mit ausgibt
\newglossarystyle{mytab}{%  
 % Verzeichnis wird ein 'longtable'  mit 5 Spalten
 \renewenvironment{theglossary}%  
  {\begin{longtable}[l]{lllp{\glspagelistwidth}}}%  
  {\end{longtable}}%  
 % Kopf der Tabelle
 \renewcommand*{\glossaryheader}{%  
	\bfseries Symbol 
  & \bfseries Einheit 
  & \bfseries Bedeutung 
  \\\endhead}%  
 % Kein Abstand zwischen Gruppen 
  \renewcommand*{\glsgroupheading}[1]{}% 
    %    
  \renewcommand*{\glossaryentryfield}[5]{%  
 %   \glsentryitem{##1}% Entry number if required  
    \glstarget
    {##3}{##4}% Name 
        & \glsentryuseri{##1}%Einheit
    & ##3% Description  
    \\% end of row  
  }% 
  % The command \glsgroupskip specifies what to do between glossary groups.
  % Glossary styles must redefine this command. (Note that \glsgroupskip 
  % only occurs between groups, not at the start or end of the glossary.)
  \renewcommand*{\glsgroupskip}{\relax}
}
\makeglossaries
\newglossarystyle{mytab2}{%  
 % Verzeichnis wird ein 'longtable'  mit 5 Spalten
 \renewenvironment{theglossary}%  
  {\begin{longtable}[l]{llp{\glspagelistwidth}}}%  
  {\end{longtable}}%  
 % Kopf der Tabelle
 \renewcommand*{\glossaryheader}{%  
	\bfseries Symbol 
  & \bfseries Bedeutung 
  \\\endhead}%  
 % Kein Abstand zwischen Gruppen 
  \renewcommand*{\glsgroupheading}[1]{}% 
    %    
  \renewcommand*{\glossaryentryfield}[5]{%  
 %   \glsentryitem{##1}% Entry number if required  
    \glstarget
    {##3}{##4}% Name 
%        & \glsentryuseri{##1}%Einheit
    & ##3% Description  
    \\% end of row  
  }% 
  % The command \glsgroupskip specifies what to do between glossary groups.
  % Glossary styles must redefine this command. (Note that \glsgroupskip 
  % only occurs between groups, not at the start or end of the glossary.)
  \renewcommand*{\glsgroupskip}{\relax}
}
\makeglossaries


%% ========== Literaturverzeichnis
\usepackage[sorting=none, backend=biber,citestyle=numeric-comp,bibstyle=numeric-comp, bibwarn=true, bibencoding=utf8]{biblatex}
\usepackage[babel,german=quotes]{csquotes}
\addbibresource{docs/0sonstiges/0Literatur/Inhalt.bib}
\usepackage[german=quotes]{csquotes}
\DeclareNameFormat{author}{%
   \usebibmacro{name:last-first}{#1}{#3}{#5}{#7}%
   \usebibmacro{name:andothers}}
\DefineBibliographyStrings{ngerman}{
   andothers = {{et\,al\adddot}},            
}    
\renewcommand*{\mkbibnamelast}[1]{\textsc{#1}}  

\usepackage{tikz}

\begin{document}
\tableofcontents

\listoftables
\listoffigures
\glsaddall   %% Alle Symbole ausgeben
\addchap{Symbolverzeichnis}
{
\setglossarysection{section} 
\printglossary[title=Griechische Symbole,type=formelgr, style=mytab]
\vspace{2.5cm}
\printglossary[title=Lateinische Symbole,type=formella, style=mytab]
\vspace{1cm}
\printglossary[title=Matrizen und Vektoren,type=formelma, style=mytab2]
\vspace{1cm}
\printglossary[title=Formelzeichen,type=formelzei, style=mytab2]
}
\newpage
\glstoctrue
\printglossary[type=\acronymtype,style=long,title=Abkürzungsverzeichnis]

\end{document}
Wenn ich nun z.B. "Links innerhalb des Dokumentes" oder "Tabellen" in der Präambel auskommentiere, funktioniert alles wieder. Liegt es evtl. daran, dass ein Speicher überfüllt wird? Wenn ich einen großen Block in der Präambel rauskürze, funktioniert das Ausgeben wieder und es kommt keine Fehlermeldung. Woran kann das denn liegen? Und wie kann ich das beseitigen?


Ergänzung:

Wenn ich "\tableofcontents" auskommentiere, funktioniert alles wieder vollständig. Komisch...


Danke im Voraus.

Verfasst: So 11. Okt 2015, 19:22
von Noch so einer
Die Anzahl an Dateien, die TeX gleichzeitig zum Schreiben offen haben kann, ist schlicht beschränkt und mit den vielen Dateien, mit denen Du arbeitest, hast Du diese Zahl überschritten.

Du kannst Dir durch laden des experimentellen KOMA-Script-Pakets scrwfile vorübergehend etwas Luft verschaffen. Aber, wenn Du weiter so exzessiv mit Glossaren umgehst, wird auch das nicht weit reichen. Außerdem gibt es keine Garantie, dass dieses Paket immer verwendet werden kann.

Verfasst: So 11. Okt 2015, 19:46
von kannstmasehn
Noch so einer hat geschrieben:Die Anzahl an Dateien, die TeX gleichzeitig zum Schreiben offen haben kann, ist schlicht beschränkt und mit den vielen Dateien, mit denen Du arbeitest, hast Du diese Zahl überschritten.

Du kannst Dir durch laden des experimentellen KOMA-Script-Pakets scrwfile vorübergehend etwas Luft verschaffen. Aber, wenn Du weiter so exzessiv mit Glossaren umgehst, wird auch das nicht weit reichen. Außerdem gibt es keine Garantie, dass dieses Paket immer verwendet werden kann.
Ah verstehe. Danke dir. Hast mir das Wochenende gerettet! Habe ein Verzeichnis rausgenommen und nu läuft es wieder.

Ist das noch ein Relikt aus Zeiten, als die Computer nicht so Leistungsstark waren? Ich musste schon bei tikz oder pgfplot den main memory anheben, weil der zu niedrig war.

Verfasst: Mo 12. Okt 2015, 08:13
von Noch so einer
In TeX haben Register Nummern. Das gilt auch für die Handles für Dateien. Damals, in den 70ern und 80ern, als TeX entstanden ist, war es schon recht großzügig, in TeX 16 davon zum gleichzeitigen Lesen und 16 davon zum gleichzeitigen Schreiben vorzusehen. Selbst bei dem später erschienenen DOS 3.11 waren so viele Handles in der Voreinstellung nicht vorgesehen.

Weniger gut, war die Entscheidung, dass alle nicht geöffneten Dateien bzw. alle Dateien außerhalb der Nummern 0 bis 15 für Ausgaben auf das Terminal zur Verfügung stehen. Irgendwann wurde dann auch noch das \write18-Feature erfunden, mit dem man Systemaufrufe tätigen kann.

Das macht es recht schwer, die Zahl der verfügbaren, gleichzeitig offenen Dateien zu erhöhen. Allerdings kann man auch darüber streiten, ob man wirklich so viele Dateien gleichzeitig offen haben muss. Das Paket scrwfile ändert beispielsweise LaTeX so, dass es für die Verzeichnisse, die ohnehin über den Umweg der aux-Datei arbeiten und die deshalb die eigentlichen Dateien erst innerhalb von \end{document} schreiben, diese nicht die ganze Zeit geöffnet sind. Das Paket splitidx bietet diverse Index-Dateien, schreibt in der Voreinstellung aber nur eine Datei mit dem "Rohindex", die dann von dem Programm splitindex in einzelne Dateien aufgeteilt wird. glossaries verwendet aber leider für jeden Glossar eine eigene Datei, die auch während des gesamten LaTeX-Laufs offen sein muss.

Trotzdem kann man bei LuaTeX über die Lua-Seite theoretisch beliebig viele Dateien offen haben. Man kann diese nur nicht mir TeXs \write ansprechen, sondern eben nur per Lua. Ebenso beseitigt LuaTeX die Speicherbeschränkungen beispielsweise bezüglich main memory. Das macht es sogar transparent, man muss dafür also gar nicht auf die Lua-Seite von LuaTeX zurückgreifen. Gerade bei Verwendung von pgf/tikz und damit auch pgfplot lohnt es, lualatex statt pdflatex zu verwenden. Einige Features stehen auch nur damit zur Verfügung.