Kann man im Dokument Abfragen ob ein Input aktiv ist ? Thema ist als GELÖST markiert

Fragen und Probleme, die nicht den obigen Kategorien zugeordnet werden können


Martin.r

Kann man im Dokument Abfragen ob ein Input aktiv ist ?

Beitrag von Martin.r »

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

Gast

Beitrag von Gast »

Was verstehst du unter einem aktiven Input oder einem aktiven Dokument?

Hilft dir vielleicht \BeforeFile oder \AfterFile von scrlfile weiter.

Martin.r

Beitrag von Martin.r »

Aktiv wäre bei mir:

\input { }


und nicht aktiv mit:

%\input{}

Benutzeravatar
Stefan Kottwitz
Admin
Admin
Beiträge: 2500
Registriert: Di 8. Jul 2008, 00:39
Kontaktdaten:

Beitrag von Stefan Kottwitz »

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
Zuletzt geändert von Stefan Kottwitz am Mo 9. Jan 2017, 09:15, insgesamt 1-mal geändert.

Forum ;-)

Beitrag von Forum ;-) »

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.

Benutzeravatar
Johannes_B
Moderator
Moderator
Beiträge: 5079
Registriert: Do 1. Nov 2012, 14:55
Kontaktdaten:

Beitrag von Johannes_B »

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.

Gast

Beitrag von Gast »

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:
\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}
Wer obigen Code nicht versteht oder keine Ahnung hat, welche Konsequenzen der Trick mit \AtBeginDocument haben könnte, sollte die Finger davon lassen!

Antworten