Como /includegraphics do subdiretório da pasta principal da imagem, usando subarquivos

Como /includegraphics do subdiretório da pasta principal da imagem, usando subarquivos

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 \inpute \includeadaptar o caminho gráfico automaticamente. Desde \subfileos 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, \inputs e \includes podem ser aninhados e os arquivos gráficos são carregados na pasta especificada por \graphicsfolderrelativ 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 \showgraphicspathfornece 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.

informação relacionada