
Como ainda não posso comentar postagens, terei que fazer esta pergunta. Aqui está o link com o exemplo: (A última resposta de markellos é o que estou usando e me referindo)
caminho de figuras em diferentes diretórios com subarquivo latex
Seu 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}
chap1.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}
Então, digamos que meu diretório principal de imagens seja 'imagens', e você chama isso usando: \includegraphics[width=4cm]{./f1}
(pelo menos eu faço)
Mas também tenho uma subpasta dentro de 'imagens' chamada 'ABC'. Como chamar isso usando \includegraphics ?
Não sou muito bom em látex e copio principalmente coisas de respostas e outros modelos para misturar de acordo com meu gosto. Estou escrevendo minha tese e terei várias outras subpastas contendo imagens (estou fazendo histologia). Portanto, seria muito conveniente classificá-los em uma pasta diferente da pasta principal de 'imagens'.
Eu tentei \includegraphics{../f1)
, mas algo me diz que preciso modificar esta linha no main.tex para incluir minhas subpastas:
\graphicspath{{\main/images/}{images/}}
Mas como?
irmão
Responder1
Perdoe a analogia familiar, mas ela pode ajudá-lo a compreender como seus parentes estão estruturados e como são referenciados.
Então você é uma pasta vamos chamá-lo de Thomas e você tem um pai vamos chamá-los de blindhardt você é colocado em um sistema como /blindhardt/thomas mas para referência própria você pode usar o alias"."
você tem filhos /blindhardt/thomas/janet e /blindhardt/thomas/john
eles podem ter apelidos como prefácio e chap1
para indicar a relação de seu filho consigo mesmo, você pode dizer ./prefácio ou ./chap1
para seu pai, você pode dizer .. e para irmãos eles podem ser ../mais velhos ou ../mais novos,
sua árvore genealógica agora pode ser
/blindhardt/older
/thomas/
/thomas/preface
/thomas/chap1
/younger
Ok, essa é a teoria básica de seus caminhos relativos agora para sua resposta.
Uma parte de você, Thomas, o guardião (da Bíblia da família), é conhecido como main.tex
markellos mostra nitidamenteque se essa parte de você (main.tex) se identificar como
\providecommand{\main}{.}
então qualquer ../child/story.tex pode se referir a você como seu provedor
\providecommand{\main}{..} i.e their own parent
também sua declaração adicional
\documentclass[\main/main.tex]{subfiles}
confirma que eles são do mesmo subgrupo (classe) que você
como família, você concorda em manter todos os seus bens pictóricos em
/blindhart/somewhere/vault, mas como guardião você deseja chamá-lo
/blindhart/thomas/images
% aqui está o caminho do cofre para você ./images e a próxima geração {\main\images/}
\graphicspath{{images/}{\main/images/}}
OK, nada de novo até agora, digamos que você mantenha uma pasta (ABC) naquele cofre,
tanto você quanto seus filhos precisarão agora de algum índice cruzado.
\graphicspath{{images/}{\main/images/}{images/ABC/}{\main/images/ABC/}}
Então agora não importa se pic1.png ou fig1.pdf está em main/images ou /images/ABC,
toda a sua família imediata de arquivos pode encontrá-lo
\includegraphics[width=4cm]{pic1}
Main.tex (apenas uma linha alterada)
\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 (sem alteração, exceto uma aceitação mais ampla)
\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 e seus /children podem seguir o mesmo padrão, mas se todos vocês quiserem acessar o brasão da família em /blindhardt/images então vocês começam a adicionar muito mais camadas relativas aninhadas e pode ser mais fácil incluir um endereço absoluto para tais imagens mestres assim você e seus irmãos poderiam adicionar
\graphicspath{{c:\familydocs\blindhardt\images/}{images/}{\main/images/}{images/ABC/}{\main/images/ABC/}}
Existem maneiras de incluir espaços acima, mas para total compatibilidade, sugiro que não incluamos nenhum
Todos os itens acima são baseados no texto da sua pergunta; no entanto, cada arquivo tex pode visitar a biblioteca pública por si só.
Existe uma biblioteca padrão em seu${TEXMFHOME}/tex/generic/images
Você também pode nomear uma sequência de coletivos de projeto por meio da TEXINPUTS=".:.//:c:\road\to\nowhere: "
variável que você poderia, se soubesse o que está fazendo, redefinir de forma diferente antes de cada execução do projeto.
NOTA o token especial .// que significa TODOS os subdiretórios
VerLocalize automaticamente imagens incluídaseRenomeando a pasta do capítulo e referindo-se às imagens de forma eficiente
Responder2
bem vindo ao tex.SE
Para um projeto maior, codifiquei algo que pode ajudá-lo há algum tempo.
A idéia básica é adicionar um gancho no início e no final \input
e \include
adaptar o caminho gráfico automaticamente. Desde \subfile
os usos \input
, deve funcionar também.
\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}
Com isso, \input
s e \include
s podem ser aninhados e os arquivos gráficos são carregados na pasta especificada por \graphicsfolder
relativ ao diretório em que o arquivo tex reside.
Se você tiver caminhos globais adicionais, poderá adicioná-los chamando \newaddgraphicspath
. No entanto, usar \removelastgraphicspath
é complicado e você deve evitá-lo, a menos que saiba o que está fazendo.
A chamada \showgraphicspath
fornece a lista de caminhos reais pesquisada no arquivo de log e no console.
Comparado comesta ótima e simples respostaesta solução tem a característica de que se a imagem não for encontrada no mesmo nível, todos os níveis acima também serão pesquisados - portanto, colocar imagens na pasta imgage dentro do primeiro nível fornece acesso a todos os níveis subsequentes neste ramo. Usando isso, você pode, por exemplo, adicionar marcadores diferentes a diferentes partes e níveis sem a necessidade de copiar arquivos de imagem profundamente aninhados ou alterar macros.