Genau für so etwas ist `\includeonly` da. Du packst einfach den gesamten Anhang in eine eigene Datei, die per `\include` geladen wird. Verwendest Du dann bei einem finalen LaTeX-Lauf einen `\includeonly`-Befehl, der diese Datei nicht enthält, so wird sie zwar nicht geladen, die Links und Querverweise auf diesen Teil und die Verzeichniseinträge bleiben aber erhalten. Noch einfacher geht es ggf. mit [`excludeonly`](https://ctan.org/pkg/excludeonly). Da gibt man dann statt der Dateien, die man haben will, einfach die eine Datei an, die man nicht haben will.
Mit `excludeonly` könnte das beispielsweise so aussehen. Angenommen, wir haben folgende Datei:
\begin{filecontents}{\jobname-anhang.tex}
\appendix
\chapter{Kapitel im Anhang}
\label{cha:app}
\begin{figure}
\centering
\rule{.5\textwidth}{.5\textwidth}
\caption{Ein Quadrat}
\label{fig:square}
\end{figure}
\end{filecontents}
\documentclass{book}
\usepackage{excludeonly}
%\excludeonly{\jobname-anhang}
\usepackage{mwe}
\begin{document}
\tableofcontents
\listoffigures
\chapter{Ein Kapitel}
Siehe auch das Quadrat in Abbildung~\ref{fig:square} in Anhang~\ref{cha:app}.
\include{\jobname-anhang}
\end{document}
Jetzt machen wir zwei LaTeX-Läufe und erhalten als Ergebnis ein siebenseitiges achtseitiges Dokument mit Anhang.
Nun entfernen wir das `%` vor `\excludeonly{\jobname-anhang}` und machen einen weiteren LaTeX-Lauf. Wir erhalten dann ein fünfseitiges Dokument mit vollständigen Verzeichnissen und Verweisen in den Anhang aber eben ohne den Anhang selbst.
Wollte man stattdessen einen Ersatztext, so müsste man in der Tat etwas weiter gehen:
\begin{filecontents}{\jobname-anhang.tex}
\chapter{Kapitel im Anhang}
\label{cha:app}
\begin{figure}
\centering
\rule{.5\textwidth}{.5\textwidth}
\caption{Ein Quadrat}
\label{fig:square}
\end{figure}
\end{filecontents}
\documentclass{book}
\usepackage{mwe}
\newif\ifappendix
\newcommand*{\useappendix}[1]{%
\expandafter\let\expandafter\ifappendix\csname if#1\endcsname
\ifappendix
\newcommand*{\showappendix}{%
\appendix
\input{\jobname-anhang.tex}% Hier genügt \input
}%
\else
\nofiles% aux-Datei und Verzeichnisse nicht mehr verändern
\newcommand*{\showappendix}{%
\appendix
\chapter{Gesperrte Inhalte}
Diese Inhalte sind in der freien Version nicht verfügbar da sie
Firmengeheimnisse beinhalten.
}
\fi
}
\useappendix{true}
\begin{document}
\tableofcontents
\listoffigures
\chapter{Ein Kapitel}
Siehe auch das Quadrat in Abbildung~\ref{fig:square} in Anhang~\ref{cha:app}.
\showappendix
\end{document}
Auch hier macht man zunächst so viele LaTeX-Läufe, bis das Dokument fertig ist. Ganz zum Schluss ändert man dann
\useappendix{true}
in
\useappendix{false}
Und macht einen weiteren LaTeX-Lauf.
Es sei darauf hingewiesen, dass bei beiden Beispielen im Falle der Verwendung von `hyperref` die Links in den Anhang bei der freien Version ins Leere führen. Zwar würde der Kapitel-Link im zweiten Beispiel noch auf die richtige Seiten führen, der Link auf die Abbildung würde dagegen komplett ins Leere gehen (üblicherweise landet man dann wieder am Anfang des Dokuments).