Cómo /includegraphics desde el subdirectorio de la carpeta de imágenes principal, usando subarchivos

Cómo /includegraphics desde el subdirectorio de la carpeta de imágenes principal, usando subarchivos

Como todavía no puedo comentar publicaciones, tendré que hacer esta pregunta. Aquí está el enlace con el ejemplo: (La última respuesta de markellos es a lo que estoy usando y a lo que me refiero)

ruta de figuras en diferentes directorios con subarchivo látex

Su caso:

Principal.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}

cap1.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}

Entonces, digamos que mi directorio principal de imágenes es 'imágenes', y lo llamas usando: \includegraphics[width=4cm]{./f1}(al menos yo lo hago)

Pero también tengo una subcarpeta dentro de 'imágenes' llamada 'ABC'. ¿Cómo puedo llamar desde allí usando \includegraphics?

No soy muy bueno con el látex y principalmente copio cosas de respuestas y otras plantillas para mezclarlas según mis gustos. Estoy escribiendo mi tesis y tendré varias otras subcarpetas que contienen imágenes (estoy haciendo histología). Por lo tanto, sería muy conveniente ordenarlos en una carpeta diferente a la carpeta principal de 'imágenes'.

Lo intenté \includegraphics{../f1), pero algo me dice que tengo que modificar esta línea en main.tex para incluir mis subcarpetas:

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

¿Pero cómo?

hermano

Respuesta1

Perdone la analogía familiar, pero puede ayudarle a comprender cómo están estructurados sus parientes y cómo se hace referencia a ellos.

Entonces eres una carpeta, te llamaremos Thomas y tienes un padre, llamémoslo blindhardt. Estás ubicado en un sistema como /blindhardt/thomas, pero como referencia personal puedes usar el alias."."

tienes hijos /blindhardt/thomas/janet y /blindhardt/thomas/john
pueden tener apodos como prefacio y capítulo1
para indicar la relación de tu hijo contigo mismo, puedes decir ./prefacio o ./chap1
para tu padre, puedes decir .. y para los hermanos pueden ser ../mayores o ../menores,
ahora su árbol genealógico puede ser

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

Ok, esa es la teoría básica de tus caminos relativos ahora a tu respuesta.
Una parte de ti, Thomas, el custodio (de la biblia familiar), se conoce como main.tex.

markellos se muestra claramenteque si esa parte de ti (main.tex) se identifica como

\providecommand{\main}{.}

entonces cualquier ../child/story.tex puede referirse a usted como su proveedor

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

también su declaración adicional

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

confirma que son del mismo subgrupo (clase) que usted

Como familia, aceptas mantener todos tus activos pictóricos en
/blindhart/somewhere/vault como quieras llamarlo como custodio.

/blindhart/thomas/images

% aquí está la ruta de la bóveda para usted ./images y la próxima generación {\main\images/}

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

OK, nada nuevo hasta ahora, digamos que mantiene una carpeta (ABC) en esa bóveda,
tanto usted como sus hijos necesitarán ahora tener algún índice cruzado.

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

Así que ahora no importa si pic1.png o fig1.pdf está en main/images o /images/ABC,
toda su familia inmediata de archivos puede encontrarlo con

\includegraphics[width=4cm]{pic1}

Main.tex (solo se cambió una línea)

\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 (sin cambios, excepto una aceptación más amplia)

\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}  

Obviamente, /older y sus /children pueden seguir el mismo patrón, pero si todos desean acceder al escudo familiar en /blindhardt/images, entonces deben comenzar a agregar muchas más capas relativas anidadas y puede ser más fácil incluir una dirección absoluta para dichas imágenes maestras. así tú y tus hermanos podrían sumar

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

Hay formas de incluir espacios en lo anterior, pero para lograr la máxima compatibilidad, sugiero que no incluyamos ninguno.

Todo lo anterior se basa en la redacción de su pregunta; sin embargo, cada archivo tex puede visitar la biblioteca pública por sí solo.

Hay una biblioteca predeterminada en su${TEXMFHOME}/tex/generic/images

También puede nominar una secuencia de colectivos de proyecto a través de la TEXINPUTS=".:.//:c:\road\to\nowhere: "variable que, si sabe lo que está haciendo, podría redefinir de manera diferente antes de ejecutar cada proyecto.

TENGA EN CUENTA el token especial .// que significa TODOS los subdirectorios

VerLocalizar automáticamente las imágenes incluidasyCambiar el nombre de la carpeta del capítulo y hacer referencia a las imágenes de manera eficiente

Respuesta2

bienvenido a tex.SE

Para un proyecto más grande, codifiqué algo que podría ayudarte hace un tiempo.

La idea básica es agregar un gancho al principio y al final \inputy \includeadaptar la ruta gráfica automáticamente. Dado que \subfilese usa, \inputtambién debería funcionar.

\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}

Con esto, \inputs y \includes se pueden anidar y los archivos gráficos se cargan en la carpeta especificada por \graphicsfolderrelativa al directorio en el que reside el archivo tex.

Si tiene rutas globales adicionales, puede agregarlas llamando a \newaddgraphicspath. Sin embargo, su uso \removelastgraphicspathes complicado y debes evitarlo a menos que sepas lo que estás haciendo.

La llamada \showgraphicspathle proporciona la lista de rutas reales buscadas en el archivo de registro y en la consola.

Comparado conesta gran y simple respuestaesta solución tiene la característica de que si la imagen no se encuentra en el mismo nivel, también se buscan en todos los niveles superiores, por lo que colocar imágenes en la carpeta de imágenes dentro del primer nivel proporciona acceso a todos los niveles posteriores en esta rama. Al usarlo, puede, por ejemplo, agregar diferentes marcadores a diferentes partes y niveles sin la necesidad de copiar archivos de imagen profundamente anidados o cambiar macros.

información relacionada