¿Cómo dar un aviso cuando algo se recorta en TikZ?

¿Cómo dar un aviso cuando algo se recorta en TikZ?

Como dice el título, me gustaría saber si es posible emitir una advertencia LaTeX si algo se recortó en un archivo tikzpicture. Y, si es así, ¿cómo podría lograrlo?

Mi caso de uso es que estoy trabajando en un pequeño conjunto de macros para producir dibujos y me gustaría recibir una advertencia si he dibujado algo fuera de un área de dibujo definida determinada. Utilizo recortes en el dibujo para evitar que se dibuje algo fuera del área. Esto evita que el diseño de la página se estropee, pero el usuario no tiene idea de que algo no se puso realmente en la página (aparte de inspeccionar manualmente la salida). Sería bueno avisar al usuario sobre mi caso de uso particular.

Lo ideal sería habilitar esta advertencia poniendo un estilo, por ejemplo clip warn, en un scopeentorno o en el propio clip \path.

Aquí hay un MWE como punto de partida y con fines de prueba:

\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}

ingrese la descripción de la imagen aquí

Respuesta1

Revisión. Este es un fragmento que calcula las intersecciones con el cuadro delimitador y emite una advertencia si la hay. (Claramente, si tiene una ruta que está completamente fuera del cuadro delimitador, no se emitirá ninguna advertencia). En esta versión, se debe colocar una \IssueWarningsal final de las imágenes y no tengo idea de por qué execute at end picture={\IssueWarning}falla. Cualquier información sobre esto será muy apreciada.

\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}

información relacionada