导入包和 graphicspath 不能一起工作

导入包和 graphicspath 不能一起工作

你好,我尝试使用包import中的命令import来避免与导入文件中的相对路径冲突。但是,这似乎不适用于\graphicspaths

这是我的目录结构

folder/
   a5version/
       a5version.tex
   source/
       master.tex
       chapters/
          chapter1.tex
       images/
          buw.pdf

那么 a5version.tex 看起来像

\documentclass{article}
\usepackage{import}
\import{./../source/}{master.tex}

master.tex 看起来像

\usepackage[utf8]{inputenc}
\usepackage{graphics}
\graphicspath{{./images/}}
 
\begin{document}
\chapter{chapter 1}
\input{./chapters/chapter1.tex}
\end{document}

chapter1.tex 看起来像

This is the first chapter. Here is a graphic:
\includegraphics{buw.pdf}

当我尝试编译时a5version.tex出现以下错误:

ERROR: Package pdftex.def Error: File `buw.pdf' not found: using draft setting.

有办法解决这个问题吗?我的意思是,我显然可以不使用\graphicspath而使用includegraphics{./images/buw.pdf},但这有点不方便。

答案1

代替

\graphicspath{{./images/}}

经过

\makeatletter
\graphicspath{{\import@path/images/}}
\makeatother

您必须确保master.tex始终是\imported,而不仅仅是\input,否则\import@path将无法定义。

答案2

OP 在评论中提到原始文件也应该可以单独编译。在这种情况下,软件包subfiles可能有助于隐藏一些机制。

% a5version/a5version.tex
\PassOptionsToClass{a5paper}{book}
\documentclass[../source/master]{subfiles} % get preamble from ../source/masters.tex
% ... additional settings for a5version.tex ...
\begin{document}
\subfile{../source/master}% import contents of document, skipping its preamble
\end{document}

% source/master.tex
\documentclass{book}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
\usepackage{subfiles}
% subfiles package has to be loaded before \graphicspath
\graphicspath{{images/}}% graphics path relative to this file
\begin{document}
\chapter{chapter 1}
\input{./chapters/chapter1.tex}% input path relative to this file
\end{document}

答案3

在另一条评论中,Nathanael 询问了以下情况的解决方案:文档应使用另一个文档类进行排版,但其他方面保持不变。如果两个版本位于同一个文件夹中,则

% a5version.tex
\documentclass[a5paper]{scrbook}
\newcommand\skipdocumentclass[2][]{\let\documentclass\origdocumentclass}
\let\origdocumentclass\documentclass
\let\documentclass\skipdocumentclass
% ... additional definitions for a5version
\input{master}

应该可以解决问题。如果主文档在其他地方,并且本身输入/包含/导入其他文件,则需要类似

% a5version/a5version.tex
\documentclass[a5paper]{scrbook}
\RequirePackage{import}
\newcommand\skipdocumentclass[2][]{\let\documentclass\origdocumentclass}
\let\origdocumentclass\documentclass
\let\documentclass\skipdocumentclass
% ... additional definitions for a5version
\import{../source}{master}

如果主文档使用并且与其克隆不在同一文件夹中,则在 之前的序言中\graphicspath加载包。subfiles\graphicspath

% source/master.tex
\documentclass...
...
\usepackage{subfiles}
...
\graphicspath{..}

subfiles包重新定义,\graphicspath以便添加\import@path,这确保路径规范是相对于的文件夹进行解释master.tex,而不是相对于 latex 命令中的文件的文件夹进行解释。

相关内容