你好,我尝试使用包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
始终是\import
ed,而不仅仅是\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 命令中的文件的文件夹进行解释。