Seite 1 von 1

Kann man im Dokument Abfragen ob ein Input aktiv ist ?

Verfasst: Mo 9. Jan 2017, 09:05
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

Verfasst: Mo 9. Jan 2017, 09:09
von Gast
Was verstehst du unter einem aktiven Input oder einem aktiven Dokument?

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

Verfasst: Mo 9. Jan 2017, 09:12
von Martin.r
Aktiv wäre bei mir:

\input { }


und nicht aktiv mit:

%\input{}

Verfasst: Mo 9. Jan 2017, 09:13
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

Verfasst: Mo 9. Jan 2017, 09:14
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.

Verfasst: Mo 9. Jan 2017, 09:22
von Johannes_B
Bitte erstell keine Vorlage für andere.

Verfasst: Mo 9. Jan 2017, 10:00
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!