Kann man im Dokument Abfragen ob ein Input aktiv ist ?
Kann man im Dokument Abfragen ob ein Input aktiv ist ?
Hallo Forum,
Ich bin so ziemlich neu in der Latex Welt, und bräuchte Hilfe.
Ich habe eine Header Datei erstellt wo alle Includes und Inputs eingestellt werden können.
meine Frage wäre jetzt ob es jetzt die Möglichkeit gibt ob ich in einem Dokument abfragen kann ob ein anderes Dokument (/input{}) aktiv ist, so dass dann ein Text angezeigt wird. Und wenn ich das /input{} wieder deaktiviere das der Text nicht mehr angezeigt wird.
Ich hoffe ihr könnt mir helfen
Mit freundlichen Grüßen
Martin
Martin
Ich bin so ziemlich neu in der Latex Welt, und bräuchte Hilfe.
Ich habe eine Header Datei erstellt wo alle Includes und Inputs eingestellt werden können.
meine Frage wäre jetzt ob es jetzt die Möglichkeit gibt ob ich in einem Dokument abfragen kann ob ein anderes Dokument (/input{}) aktiv ist, so dass dann ein Text angezeigt wird. Und wenn ich das /input{} wieder deaktiviere das der Text nicht mehr angezeigt wird.
Ich hoffe ihr könnt mir helfen
Mit freundlichen Grüßen
Martin
Martin
- Stefan Kottwitz
- Admin
- Beiträge: 2547
- Registriert: Di 8. Jul 2008, 00:39
- Kontaktdaten:
Hallo Martin!
Wenn diese Text-Anzeige nur einmalig entschieden wird, reicht es ja, wenn Du ein Makro für den Text definierst. Im Header definierst Du es als leeres Makro mit \newcommand{\meintext}{} und in der Datei, die Du mit \input liest, redefinierst Du es mit \renewcommand für den eigentlichen Text. Später verwendest Du das Makro. So wird der Text nur angezeigt, wenn die Datei geladen wird, sonst er leer.
Ansonsten geht es natürlich auch anders, etwa mit "if". Wie, erst in der Präambel:
\newif\iftext
\textfalse
In der externen Datei:
\texttrue
Später entscheidest Du mit
\iftext
% ist eingebunden, wird angezeigt
\else
% ist nicht eingebunden, wird nicht angezeigt
\fi
[d]etoolbox[/d] bietet eine Alternative mit \newtoggle.
Stefan
Wenn diese Text-Anzeige nur einmalig entschieden wird, reicht es ja, wenn Du ein Makro für den Text definierst. Im Header definierst Du es als leeres Makro mit \newcommand{\meintext}{} und in der Datei, die Du mit \input liest, redefinierst Du es mit \renewcommand für den eigentlichen Text. Später verwendest Du das Makro. So wird der Text nur angezeigt, wenn die Datei geladen wird, sonst er leer.
Ansonsten geht es natürlich auch anders, etwa mit "if". Wie, erst in der Präambel:
\newif\iftext
\textfalse
In der externen Datei:
\texttrue
Später entscheidest Du mit
\iftext
% ist eingebunden, wird angezeigt
\else
% ist nicht eingebunden, wird nicht angezeigt
\fi
[d]etoolbox[/d] bietet eine Alternative mit \newtoggle.
Stefan
Zuletzt geändert von Stefan Kottwitz am Mo 9. Jan 2017, 09:15, insgesamt 1-mal geändert.
Wenn du irgendwo einstellst, welche Dateien geladen werden und welche nicht, kannst du dort dann nicht einfach auch gleich eine Abfragemöglichkeit mit einbauen? Oder suchst du am Ende \@ifpackageloaded aus dem LaTeX-Kern? Bitte halte dich bei Fragen an die wichtigen Hinweise und mach ein aussagekräftiges Minimalbeispiel. Dann können wir uns unzählige Rückfragen sparen und du kommst am Ende meist schneller und frustfreier zu einer Lösung.
- Johannes_B
- Moderator
- Beiträge: 5079
- Registriert: Do 1. Nov 2012, 14:55
- Kontaktdaten:
Bitte erstell keine Vorlage für andere.
TeXwelt - Fragen und Antworten Schaut vorbei und stellt Fragen.
LaTeX-Vorlagen?
Der Weg zum Ziel: Ruhe bewahren und durchatmen, Beiträge und unterstützende Links aufmerksam lesen, Lösungsansätze verstehen und ggf. nachfragen.
LaTeX-Vorlagen?
Der Weg zum Ziel: Ruhe bewahren und durchatmen, Beiträge und unterstützende Links aufmerksam lesen, Lösungsansätze verstehen und ggf. nachfragen.
Wenn das Ziel ist, eine dieser unsäglichen Vorlagen zu erstellen, kann ich Johannes nur beipflichten. Das endet nämlich früher oder später (erfahrungsgemäß eher früher) garantiert wieder in viel Arbeit für uns und viel Frust für die Anwender.
Ansonsten sei eine Möglichkeit über die Dateiliste, die LaTeX anlegt, gezeigt:
Wer obigen Code nicht versteht oder keine Ahnung hat, welche Konsequenzen der Trick mit \AtBeginDocument haben könnte, sollte die Finger davon lassen!
Ansonsten sei eine Möglichkeit über die Dateiliste, die LaTeX anlegt, gezeigt:
\documentclass{article} \makeatletter \AtBeginDocument{% % Wenn \listfiles nicht verwendet wird, ist \@listfiles nicht definiert und % üblicherweise zerstört dann LaTeX die Befehle \@filelist und % \@addtofilelist innerhalb von \begin{document}. Das kann man einfach % verhindern, indem man \@listfiles zumindest auf \relax setzt. \ifx\@listfiles\@undefined\let\@listfiles\relax\fi % Besser wäre vermutlich, an dieser Stelle \listfiles aufzurufen, % schließlich schadet die Liste in der log-Datei nicht, sondern nützt % bei weiteren Fragen sogar. } \newcommand*\IfFileInList[2]{% % Testen, ob #1 in der Liste #2 enthalten ist und dann entweder das nächste % oder übernächste Argument verarbeiten. \protected@edef\reserved@a{\noexpand\in@{#1}{#2}}\reserved@a \ifin@ \expandafter\@firstoftwo \else \expandafter\@secondoftwo \fi } \newcommand*\IfInFileList[1]{% % \IfFileInList auf den Dateinamen aus Argument 1 und die LaTeX-Dateiliste % anwenden. \IfFileInList{#1}{\@filelist}% } \makeatother \begin{filecontents}{\jobname-1.tex} \section{\jobname 1} \blindtext \end{filecontents} \usepackage{blindtext} \begin{document} \input{\jobname-1.tex} \blinddocument \section{Test} \texttt{article.cls} wurde \IfInFileList{article.cls}{}{nicht }geladen. \texttt{blindtext.sty} wurde \IfInFileList{blindtext.sty}{}{nicht }geladen. \texttt{\jobname-1.tex} wurde \IfInFileList{\jobname-1.tex}{}{nicht }geladen. \texttt{\jobname-2.tex} wurde \IfInFileList{\jobname-2.tex}{}{nicht }geladen. \end{document}