So binden Sie Grafiken aus dem Unterverzeichnis des Hauptbildordners mithilfe von Unterdateien ein

So binden Sie Grafiken aus dem Unterverzeichnis des Hauptbildordners mithilfe von Unterdateien ein

Da ich noch keine Beiträge kommentieren kann, muss ich diese Frage stellen. Hier ist der Link mit dem Beispiel: (Ich verwende und beziehe mich auf die letzte Antwort von Markellos)

Pfad der Abbildungen in verschiedenen Verzeichnissen mit Unterdatei Latex

Sein Fall:

Main.tex:

\providecommand{\main}{.} 
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{graphicx}

%here is the path
\graphicspath{{\main/images/}{images/}}

\usepackage{subfiles}

\usepackage{blindtext}

\begin{document}

\subfile{\main/chap1/chap1}

\end{document}

kapitel1.tex

\providecommand{\main}{..}
\documentclass[\main/main.tex]{subfiles}

\begin{document}

\begin{figure}[bh]
\centering
\includegraphics[width=4cm]{f1}

\label{fig:img1}
\caption{ShareLaTeX learn logo}
\end{figure}

Hello, here is some text...
\end{document}

Nehmen wir also an, dass mein Hauptbilderverzeichnis „images“ ist und Sie es mit folgendem aufrufen: \includegraphics[width=4cm]{./f1}(zumindest tue ich das)

Aber ich habe in „Images“ auch einen Unterordner namens „ABC“. Wie rufe ich diesen mit \includegraphics auf?

Ich bin nicht sehr gut in Latex und kopiere hauptsächlich Dinge aus Antworten und anderen Vorlagen, um sie nach meinen eigenen Wünschen zu mischen. Ich schreibe gerade meine Abschlussarbeit und werde mehrere andere Unterordner mit Bildern haben (ich mache Histologie). Es wäre also sehr praktisch, sie in einem anderen Ordner als dem Hauptordner „Bilder“ zu sortieren.

Ich habe es versucht \includegraphics{../f1), aber irgendetwas sagt mir, dass ich diese Zeile in main.tex ändern muss, um meine Unterordner einzuschließen:

\graphicspath{{\main/images/}{images/}}

Aber wie?

Br

Antwort1

Verzeihen Sie die Familienanalogie, aber sie kann Ihnen helfen zu verstehen, wie Ihre Verwandten strukturiert sind und wie auf sie verwiesen wird.

Sie sind also ein Ordner, nennen wir Sie Thomas, und Sie haben einen übergeordneten Ordner, nennen wir ihn blindhardt. Sie werden in einem System als /blindhardt/thomas abgelegt, aber zur Selbstreferenz können Sie den Alias ​​verwenden"."

Sie haben Kinder /blindhardt/thomas/janet und /blindhardt/thomas/john.
Sie haben möglicherweise Spitznamen wie preface und chap1,
um die Beziehung Ihres Kindes zu Ihnen anzuzeigen. Sie können ./preface oder ./chap1 sagen
. Für Ihren Vater können Sie .. sagen. Und für Geschwister können sie ../älter oder ../jünger sein.
Ihr Stammbaum kann jetzt sein

/blindhardt/older
           /thomas/
           /thomas/preface
           /thomas/chap1
           /younger

Ok, das ist die grundlegende Theorie Ihrer relativen Pfade. Nun zu Ihrer Antwort.
Ein Teil von Ihnen, Thomas, dem Hüter (der Familienbibel), ist als main.tex bekannt.

Markellos zeigt ordentlichdass, wenn dieser Teil von Ihnen (main.tex) sich identifiziert als

\providecommand{\main}{.}

dann kann jedes ../child/story.tex auf Sie als seinen Anbieter verweisen

\providecommand{\main}{..}   i.e their own parent

auch ihre ergänzende Erklärung

\documentclass[\main/main.tex]{subfiles}

bestätigt, dass sie derselben Untergruppe (Klasse) angehören wie Sie selbst

als Familie stimmen Sie zu, alle Ihre Bildbestände in
/blindhart/irgendwo/vault aufzubewahren, wie auch immer Sie es als Verwalter nennen möchten

/blindhart/thomas/images

% hier ist der Tresorpfad für Sie ./images und die nächste Generation {\main\images/}

\graphicspath{{images/}{\main/images/}}

OK, soweit nichts Neues. Nehmen wir an, Sie bewahren in diesem Tresor einen Ordner (ABC) auf.
Sowohl Sie als auch Ihre Kinder müssen nun über einen Querverweis verfügen.

 \graphicspath{{images/}{\main/images/}{images/ABC/}{\main/images/ABC/}}

Jetzt ist es egal, ob pic1.png oder fig1.pdf entweder in main/images oder /images/ABC ist,
alle Ihre unmittelbaren Dateien können es finden mit

\includegraphics[width=4cm]{pic1}

Main.tex (nur eine Zeile geändert)

\providecommand{\main}{.} 
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{graphicx}

%here is the NEW path
\graphicspath{{images/}{\main/images/}{images/ABC/}{\main/images/ABC/}}

\usepackage{subfiles}
\usepackage{blindtext}
\begin{document}
\subfile{\main/chap1/chap1}
\end{document}

chap1.tex (keine Änderung, außer einer breiteren Akzeptanz)

\providecommand{\main}{..}
\documentclass[\main/main.tex]{subfiles}
\begin{document}
\begin{figure}[bh]
\centering
% f1 can be any accepted image (png pdf etc.) beware if there are two in different locations then the order WILL become important.
% it can be in ./f1.png it may be in ../images/f1.pdf or even ../images/ABC/f1.eps
\includegraphics[width=4cm]{f1}
\label{fig:img1}
\caption{ShareLaTeX learn logo}
\end{figure}
Hello, here is some text...
\end{document}  

Natürlich können /older und seine /children dem gleichen Muster folgen, aber wenn Sie alle auf das Familienwappen in /blindhardt/images zugreifen möchten, fügen Sie viele weitere verschachtelte relative Ebenen hinzu, und es kann einfacher sein, eine absolute Adresse für solche Masterbilder anzugeben, sodass Sie und Ihre Geschwister hinzufügen können

\graphicspath{{c:\familydocs\blindhardt\images/}{images/}{\main/images/}{images/ABC/}{\main/images/ABC/}}  

Es gibt Möglichkeiten, Leerzeichen in das obige einzufügen, aber für die größtmögliche Kompatibilität schlage ich vor, keine einzufügen

All das oben Genannte basiert auf der Formulierung Ihrer Frage, allerdings kann jede Tex-Datei selbst die öffentliche Bibliothek besuchen.

Es gibt eine Standardbibliothek in Ihrem${TEXMFHOME}/tex/generic/images

Über die Variable können Sie auch eine Abfolge von Projektkollektiven benennen, TEXINPUTS=".:.//:c:\road\to\nowhere: "die Sie, wenn Sie sich auskennen, vor jedem Projektdurchlauf anders definieren können.

Beachten Sie das spezielle Token .//, das ALLE Unterverzeichnisse bedeutet

SehenEingebundene Bilder automatisch lokalisierenUndKapitelordner umbenennen und effizient auf Bilder verweisen

Antwort2

Willkommen bei tex.SE

Für ein größeres Projekt habe ich vor einiger Zeit etwas codiert, das Ihnen vielleicht helfen könnte.

Die Grundidee besteht darin, am Anfang und Ende einen Hook einzufügen \inputund \includeden Grafikpfad automatisch anzupassen. Da \subfileverwendet \input, sollte es auch funktionieren.

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{graphicx}
\usepackage{blindtext}

% use parent management with current source file 
\usepackage{subfiles} 
\usepackage{filehook} 
\usepackage[parent]{currfile} 

\makeatletter
% Define a new stack by letting it to \@empty 
\newcommand\newStack[1]{\global\let#1\@empty} 
% add element to stack (top): \addStack{<stack>}{<element>} 
\newcommand{\addStack}[2]{\def\ele@ment{{#2} }\xdef#1{\ele@ment #1}} 
% add element to stack (bottom) \revaddStack{<stack>}{<element>} 
\newcommand{\revaddStack}[2]{\def\ele@ment{{#2} }\xdef#1{#1 \ele@ment}} 
% remove from stack
\long\def\pop@#1 #2\@nil#3{\def\popedStackElement{#1}%
  \def#3{#2}}% remaining list 
% stack name #1 
\newcommand\popStack[1]{\let\popedStackElement\@empty% 
  \ifx #1\@empty\message{LaTeX warning: you are trying to remove an element from the empty stack \noexpand#1 on input line \the\inputlineno}\else\expandafter\pop@#1\@nil#1\fi} 
% whipe stack 
\newcommand\cleanStack[1]{\global\let#1\@empty} 

%%% enhanced graphicspath management 
% idea: everytime \includegraphics is called from a file of a (larger) project the graphics file is searched 
%       in a specific folder relative to that one the actual tex source code resides in. 
%       In addition generally valid paths can be defined. 
% idea taken from https://tex.stackexchange.com/questions/45946/stack-datastructure-using-latex ;
% uservariant and autovariant of graphicspath stack 
\newStack{\GrapPa@user} 
\newStack{\GrapPa@auto} 
% activate stack as graphicspath 
% def hook for entering file: add path and update graphicspath 
\newcommand{\grappa@start@hook}{%
  \ifcurrfiledir\@empty{}{\addStack{\GrapPa@auto}{\currfiledir\graphicsfolder}}\update@grappa} 
% def hook for leaving file: remove path and update graphicspath 
\newcommand{\grappa@end@hook}{%
  \ifcurrfiledir\@empty{}{\popStack{\GrapPa@auto}}\update@grappa}
% activate stack as graphicspath 
\newcommand{\update@grappa}{\xdef\GrapPa@temp{{\GrapPa@user \GrapPa@auto}}\expandafter\graphicspath\GrapPa@temp} 
%
% user space graphicspath stack: 
\newcommand{\newaddgraphicspath}[1]{\addStack{\GrapPa@user}{#1}\update@grappa} 
\newcommand{\removelastgraphicspath}{\popStack{\GrapPa@user}\update@grappa} 
\newcommand{\showgraphicspath}{\message{user: \show\GrapPa@user\space - auto: \show\GrapPa@auto}} 
% define default graphics folder name
\newcommand{\graphicsfolder}{images/}
% now register for linking to filehook 
\AtBeginDocument{%
  \AtBeginOfInputs{\grappa@start@hook}%
  \AtBeginOfIncludes{\grappa@start@hook}%
  \AtEndOfInputs{\grappa@end@hook}%
  \AtEndOfIncludes{\grappa@end@hook}} 
%%% enhanced graphicspath management
\makeatother

\newaddgraphicspath{./\graphicsfolder} 

\begin{document}
\subfile{./chap1/chap1}
\end{document}

Damit können \inputs und \includes verschachtelt werden und die Grafikdateien werden in den Ordner geladen, der \graphicsfolderrelativ zum Verzeichnis angegeben wird, in dem sich die Tex-Datei befindet.

Wenn Sie zusätzliche globale Pfade haben, können Sie diese durch Aufrufen hinzufügen \newaddgraphicspath. Die Verwendung \removelastgraphicspathist jedoch schwierig und Sie sollten sie vermeiden, es sei denn, Sie wissen, was Sie tun.

Durch den Aufruf \showgraphicspatherhalten Sie die aktuelle Pfadliste, die im Logfile und in der Konsole gesucht wurde.

Im Vergleich zudiese großartige und einfache AntwortDiese Lösung bietet die Funktion, dass, wenn das Bild nicht auf derselben Ebene gefunden wird, auch alle Ebenen darüber durchsucht werden. Wenn Sie also Bilder im Bildordner auf der ersten Ebene ablegen, erhalten Sie Zugriff auf alle nachfolgenden Ebenen in diesem Zweig. Damit können Sie beispielsweise verschiedene Markierungen zu verschiedenen Teilen und Ebenen hinzufügen, ohne tief verschachtelte Bilddateien kopieren oder Makros ändern zu müssen.

verwandte Informationen