Wie gibt man eine Warnung aus, wenn in TikZ etwas abgeschnitten wird?

Wie gibt man eine Warnung aus, wenn in TikZ etwas abgeschnitten wird?

Wie der Titel schon sagt, würde ich gerne wissen, ob es möglich ist, eine LaTeX-Warnung auszugeben, wenn etwas in einem abgeschnitten wurde tikzpicture. Und wenn ja, wie würde ich das erreichen?

Mein Anwendungsfall ist, dass ich an einem kleinen Satz von Makros zum Erstellen von Zeichnungen arbeite und eine Warnung möchte, wenn ich etwas außerhalb eines bestimmten definierten Zeichenbereichs gezeichnet habe. Ich verwende Clipping in der Zeichnung, um zu verhindern, dass etwas außerhalb des Bereichs gezeichnet wird. Dadurch wird verhindert, dass das Seitenlayout durcheinander gerät, aber der Benutzer hat keine Ahnung, dass etwas nicht tatsächlich auf die Seite gesetzt wurde (abgesehen von der manuellen Überprüfung der Ausgabe). Es wäre schön, den Benutzer in meinem speziellen Anwendungsfall zu warnen.

Im Idealfall würde diese Warnung aktiviert, indem clip warneiner scopeUmgebung oder dem Clip \pathselbst beispielsweise ein Stil zugewiesen wird.

Hier ist ein MWE als Ausgangspunkt und zu Testzwecken:

\documentclass{article}
\usepackage{tikz}
\tikzset{x=1em,y=1em}

\tikzset{
  clip warn/.style = {
    % insert magic code here
  },
}

\begin{document}

This diagram should not produce a warning: 
  \tikz{\path[clip] (0,0) rectangle (1,1); \draw (0.25,0.25) -- (0.75,0.75)}

This diagram should produce a warning: 
  \tikz{\path[clip] (0,0) rectangle (1,1); \draw (-0.25,0.25) -- (0.25,0.75)}

\end{document}

Bildbeschreibung hier eingeben

Antwort1

Revision. Dies ist ein Snippet, das die Schnittpunkte mit dem Begrenzungsrahmen berechnet und eine Warnung ausgibt, wenn es einen gibt. (Wenn Sie einen Pfad haben, der vollständig außerhalb des Begrenzungsrahmens liegt, wird natürlich keine Warnung ausgegeben.) In dieser Version muss man \IssueWarningsam Ende des Bildes/der Bilder platzieren, und ich habe keine Ahnung, warum execute at end picture={\IssueWarning}das fehlschlägt. Für jede Information hierzu bin ich sehr dankbar.

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{intersections}
\tikzset{x=1em,y=1em}
\newcounter{Paths}
\makeatletter% from https://tex.stackexchange.com/a/5354/121799
\tikzset{nomorepostaction/.code=\let\tikz@postactions\pgfutil@empty
\stepcounter{Paths}}
\newcommand\CheckIfPathExists[1]{
\pgfutil@ifundefined{tikz@intersect@path@name@#1}{\global\def\myPathExists{0}}{\global\def\myPathExists{1}}
}
\makeatother
\newcommand{\IssueWarnings}{\CheckIfPathExists{clip}
\ifnum\myPathExists=1
\xdef\CurrentPaths{\thePaths}
  \foreach \i in {2,...,\CurrentPaths}
  {\fill [name intersections={of=clip and path\i, name=i, total=\t}]
    %[red, opacity=0.5, every node/.style={above left, black, opacity=1}]
 \pgfextra{\xdef\Warn{\t}};
    }
    \ifnum\Warn>0\typeout{Warning: some paths got clipped}\fi
\else
\typeout{clip path not found}
\fi
}

\tikzset{
  clip warn/.style = {clip,name path=clip},
  every picture/.style={%
    execute at begin picture={\setcounter{Paths}{0}},
    execute at end picture={%
%   \IssueWarnings %<- doesn't work and I dunno why
    },
    },
 every path/.style={postaction={nomorepostaction,draw,
    name path=path\thePaths}}}
\begin{document}

This diagram should not produce a warning: 
  \tikz{\path[clip warn] (0,0) rectangle (1,1); 
  \draw (0.25,0.25) -- (0.25,0.75);
  \IssueWarnings
}

This diagram should produce a warning:%\typeout{checking second picture}
  \tikz{\path[clip warn] (0,0) rectangle (1,1); 
  \draw (-0.25,0.25) -- (0.25,0.75);
  \IssueWarnings
}

\end{document}

verwandte Informationen