protect befehl bei \section bzw. wie schütze ich \section?

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: protect befehl bei \section bzw. wie schütze ich \section?

von aasaa00 » Do 4. Apr 2019, 23:27

Manchmal konzentriert man sich auf einen Punkt zu stark und vergisst das offensichtliche:

Die Endlosschleife wurde nicht durch \section, sondern durch einen \index-Befehl in \chapter ausgelöst. Da sich nur in diesem Kapitel der Name einer Person auffindet, hatte ich den \index-Befehl in die Kapitelüberschrift eingefügt. Seitdem ich diesen Befehl gelöscht habe, klappt alles wunderbar. Wenn man den \index-Befehl in einem \section-Befehl setzt, wird dieser Fehler komischerweise nicht angezeigt.
Sei's drum, Problem gelöst und vielen Dank für die hilfreichen Beiträge!

von aasaa00 » Do 4. Apr 2019, 22:40

Danke für den Hinweis. Zum Problem: Ich habe mehrere Chapter, die ich durch \include in das Hauptdokument eingebunden sind. Beim letzten Chapter ist die genannte Fehlermeldung plötzlich aufgeteilt, obwohl es sich um copy+paste handelt. In dem genannten Chapter steht wirklich nur:
\chapter{Die Briefe des ...}


\section{Brief XY...}

Text xyz

So beginne ich auch alle anderen Chapter und da ist es kein Fehler - nur in diesem Chapter gibt es eine Fehlermeldung. Wenn ich aber in dem besagten Chapter den Befehl \section lösche, verschwindet die Fehlermeldung und das Dokument wird fehlerlos (also ohne Fehlermeldung) erstellt.
Es muss also von diesem \section-Befehl herkommen. Ich habe jetzt den Problem-chapter vor den funktionierenden Chaptern gestellt, aber die Fehlermeldung bleibt, d.h. es kann nicht von einem Chapter kommen, der vorher auftritt;
Ich gehe das Latex-Dokument durch und versuche ein MWE zu erstellen; aber ich verstehe nicht, wie ein identischer Befehl in unterschiedlichen Kapiteln mit der gleichen Umgebung in einem Chapter eine Fehlermeldung verursacht, aber in den anderen einwandfrei funktioniert.

von Gast » Do 4. Apr 2019, 17:35

Höchstwahrscheinlich tut es nichts zur Sache, aber mit dem Paket setspace ist onehalfspacing eine Umgebung, die obendrein zusätzlich (zu der eh impliziten, wenn es denn als Umgebung genutzt wird) noch eine Gruppe öffnet. Daher verursacht der Aufruf von \onehalfspacing, der schon einen kleinen Syntax-Abuse beinhaltet, dann auch eine nicht geschlossene Gruppe:
(\end occurred inside a group at level 1)

### semi simple group (level 1) entered at line 7 (\begingroup)
### bottom level
Wahrscheinlich möchtest Du eigenlich den Befehl \onehalfspacing (mit ing). Der Produziert diese Probleme nämlich nicht.

Ansonsten wird mir zumindest aus dem bis jetzt gezeigten Code absolut nicht klar, wie das Problem bei Dir auftritt. Ich bin mir auch nicht ganz sicher, ob Dein Problem überhaupt ist, dass \section nicht geschützt ist, da es bei normalem Gebrauch eigentlich nicht geschützt werden müsste. Deine Fehlermeldung ist ja auch nur eine gute alte Endlosschleife, die TeX dann irgendwann aus Speicherproblemen abbrechen muss.

Der LaTeX Kern hat \def\@unexpandable@protect{\noexpand\protect\noexpand} und nutzt diese Definition für \protect z.B. in \protected@edef. Eventuell ist da etwas in die falsche Ecke gerutscht. Was kann ich Dir ohne Minimalbeispiel, das den Fehler reproduziert, aber beim besten Willen nicht sagen. Nach meiner Erfahrung ist es aber bei solchen Fehlern fast immer möglich, mit etwas Arbeit auch große Dokumente auf ein einfaches Minimalbeispiel herunterzubrechen, das das Problem reproduziert. Die Halbierungssuche, bei der Du immer die Hälfte Deines Dokuments löschst/auskommentierst und überprüfst, ob der Fehler noch da ist, kann auch sehr große Dokument recht schnell herunterbrechen.

Wann genau tritt der Fehler denn auf? Bei allen \sections? Nur bei einer? Geht der Fehler weg, wenn Du das vorheriger Kapitel auskommentierst? Hast Du vielleicht am Ende des Kapitels vor dem problematischen Befehl besonderen Code stehen?

von aasaa00 » Do 4. Apr 2019, 17:10

Anonymous hat geschrieben:Man muss fragile Befehle nur in bestimmten Situationen, beispielsweise innerhalb eines moving arguments schützen. \section müsste also nur geschützt werden, wenn es beispielsweise selbst im Argument eines \section-Befehls stehen würde. Die reine Anzahl an Befehlen hat dagegen eher keinen Einfluss (außer eventuell, wenn Du eine sehr, sehr große Zahl an \section-Befehlen nacheinander stehen hast, ohne Text dazwischen).

Daher: Mach ein Minimalbeispiel nach der verlinkten Anleitung. Dann sollte sich der Fehler eingrenzen und das Problem lösen lassen.
Danke für die Erklärung. Damit scheidet die reine Anzahl als Grund aus, da nach dem \section Befehl stets Text folgt. Ich verstehe dann aber nicht die Fehlermeldung: ("tex capacity exceeded, sorry [input stack size=50000] --\protect ->\noexpand \protect"). Ich weiß, dass man das \section in meinem MWE eigentlich nicht schützen bräuchte; aber das Beispiel ist (beinahe) originalgetreu wiedergegeben und der \section-Befehl wird mir als Fehler angezeigt: Ich frage mich daher wie man den \section Befehl in meinem Beispiel schützen könnte?

von aasaa00 » Do 4. Apr 2019, 16:52

Wie gesagt, ich habe zig Kapitel mit dem Befehl "\section" in meinem Dokument, aber in einem chapter wird er mir als Fehler angelastet ("tex capacity exceeded, sorry [input stack size=50000] --\protect ->\noexpand \protect").

Obwohl ich weiß, dass das MWE (mit \section-Einstellungen) hier funktioniert, wird es vielleicht jetzt deutlicher:
\RequirePackage[patch]{kvoptions} 
\documentclass[openany]{book}

\usepackage[a4paper,left=2.5cm,right=2.5cm,top=2.5cm,bottom=2cm]{geometry}

\usepackage{setspace}
\onehalfspace
%\usepackage[style=authoryear, backend=biber]{biblatex} 
% [style=iest] authoryear=Angenedt 2002
% Festlegung Art der Zitierung - Havardmethode: Abkuerzung Autor + Jahr
%\bibliographystyle{alphadin}

\makeatletter %Abstände Text zu section
\renewcommand\section{\@startsection 
   {section}{1}{0mm}%         % name, ebene, einzug 
   {4\baselineskip}%            % vor-abstand 
   {2\baselineskip}%            % nach-abstand 
   {\bfseries\Large}%      % layout 
   } 
\makeatother 
\makeatletter %Abstände Text zu subsection
\renewcommand\subsection{\@startsection 
   {subsection}{2}{0mm}%      % name, ebene, einzug 
   {4\baselineskip}%            % vor-abstand 
   {2\baselineskip}%            % nach-abstand 
   {\bfseries\large}%           % layout 
   } 
\makeatother 
\makeatletter %Abstände Text zu subsection
\renewcommand\subsubsection{\@startsection 
   {subsubsection}{2}{0mm}%      % name, ebene, einzug 
   {3\baselineskip}%            % vor-abstand 
   {1\baselineskip}%            % nach-abstand 
   {\bfseries\large}%           % layout 
   } 
\makeatother

\makeatletter% siehe De-TeX-FAQ 
\g@addto@macro\quotation{\setstretch{1}\noindent\ignorespaces} 
\makeatother% siehe \makeatletter 


\renewenvironment{quote}
{\small\list{}{\rightmargin=0.9cm \leftmargin=0.9cm}%
\item\relax}
{\endlist}


\begin{document}


\chapter{Die Briefe}


\section{Brief 1}

Das ist ein Brief...

\end{document}

In einem Unterkapitel ist der \section Befehl genauso angegeben und wird mir als Fehler angegeben, während in den anderen Unterkapiteln derselbe Befehl funktioniert.
Daher meine generelle Frage: Wie kann ich den zerbrechlichen \section-Befehl schützen?

von Gast » Do 4. Apr 2019, 16:48

Man muss fragile Befehle nur in bestimmten Situationen, beispielsweise innerhalb eines moving arguments schützen. \section müsste also nur geschützt werden, wenn es beispielsweise selbst im Argument eines \section-Befehls stehen würde. Die reine Anzahl an Befehlen hat dagegen eher keinen Einfluss (außer eventuell, wenn Du eine sehr, sehr große Zahl an \section-Befehlen nacheinander stehen hast, ohne Text dazwischen).

Daher: Mach ein Minimalbeispiel nach der verlinkten Anleitung. Dann sollte sich der Fehler eingrenzen und das Problem lösen lassen.

von Bartman » Do 4. Apr 2019, 16:29

Vielleicht liegt es am erforderlichen oder optionalen Argument eines Gliederungsbefehls. Näheres lässt sich ohne ein möglichst minimales Beispiel schwer ergründen.

protect befehl bei \section bzw. wie schütze ich \section?

von aasaa00 » Do 4. Apr 2019, 15:06

Hallo, meine Arbeit besteht aus mehreren Kapiteln, die ich durch mehrere \include-Befehle in meine Hauptdatei eingebaut habe.
Nun erhalte ich bei einem dieser Kapitel die Fehlermeldung "tex capacity exceeded, sorry [input stack size=50000] --\protect ->\noexpand \protect". Ich benutze XeLaTeX (wegen der Verwendung mehrerer Sprachen) und konnte den Fehler eingrenzen: Anscheinend ist hängt es mit dem \section bzw- \subsection Befehl zusammen; Wenn ich \section bzw- \subsection weglasse, werden keine Fehler angezeigt und das Programm erstellt die pdf-Datei.

Ich habe jetzt mehrere Stunden recherchiert und weiß, dass "\section" ein fragiler Befehl ist. Ich verstehe nicht, wie ich es schützen kann, z.B.:

\protect\section{Überschrift XYZ}

hat nicht die Lösung gebracht; das Dokument bricht ab und zeigt mir den gleichen Fehler an. Könnt Ihr mir (immernoch ein Latex-Anfänger) sagen, wie ich diesen \section Befehl schütze?

Ich habe es auch mit dem \usepackage{MakeRobust} und \MakeRobustCommand\section{Überschrift XYZ} versucht - hier wird der Text als Überschrift zwar angezeigt, aber leider nicht formatiert wie die anderen Überschriften mit \section.

Ich habe auf die Erstellung eines MWE verzichtet, weil ich nicht weiß - so verstehe ich die Fehlermeldung - wie die hohe Anzahl der \section-Befehle dargestellt werden kann.

Ich würde mich daher freuen, wenn mir sagen kann, wie ich den \section Befehl schützen kann und was ich beim protect-Befehl falsch mache.

Nach oben