![Lyx 与 \graphicspath 搭配使用效果不佳,而 LaTeX 与 \graphicspath 搭配使用效果良好。可能有错误吗?](https://linux22.com/image/446727/Lyx%20%E4%B8%8E%20%5Cgraphicspath%20%E6%90%AD%E9%85%8D%E4%BD%BF%E7%94%A8%E6%95%88%E6%9E%9C%E4%B8%8D%E4%BD%B3%EF%BC%8C%E8%80%8C%20LaTeX%20%E4%B8%8E%20%5Cgraphicspath%20%E6%90%AD%E9%85%8D%E4%BD%BF%E7%94%A8%E6%95%88%E6%9E%9C%E8%89%AF%E5%A5%BD%E3%80%82%E5%8F%AF%E8%83%BD%E6%9C%89%E9%94%99%E8%AF%AF%E5%90%97%EF%BC%9F.png)
考虑以下 MWE:我有
- 一个 LyX 文件
/home/user/latex_files/main.lyx
,我用它\graphicspath{{./img/}}
来设置我想要包含在文件中的所有图像的(相对)路径 - 一个 TeX
/home/user/latex_files/test.tex
- 以及 中的一个图像文件
/home/user/latex_files/img/a.jpg
。
我的问题是 LyX 无法将我的文件编译为 pdf,因为我得到了LaTeX 错误:未找到文件“a”。
然而,当我从 LyX 中取出代码并粘贴时没有任何变化放入 tex 文件并使用 Texmaker 进行编译,编译没有任何问题。这是怎么回事?
我也尝试在 中使用绝对路径\graphicspath
:结果相同!tex 文件可以编译,lyx 文件不能,并给出相同的错误消息。
如果我放弃使用\graphicspath
并在 tex 文件和 lyx 文件中指定路径\includegraphics
,则可以完美编译,正如预期的那样;所以问题似乎在于 LyX 如何处理\graphicspath
。
这令人沮丧因为我有很多图片文件,所以我需要手动设置图片文件的文件夹。如果我在每个\includegraphics
命令中分别设置图片文件的文件夹,并且由于某种原因我需要更改图片文件夹的名称,那么如果我必须浏览整个代码来更改每个出现的每个名称,那将是一场噩梦\includegraphics
。我相信其他用户也非常希望这种方法能够奏效,因为它简化了在文件夹结构发生变化时保持代码更新的过程。
我开始怀疑这种行为可能是一个长期存在的错误,因为在这个8年前的问题中基本上提到了相同的问题。他的解决方法是使用绝对路径,但这对我来说不起作用。
编辑:这是一个错误https://www.lyx.org/trac/ticket/8895但该问题已解决。我添加了更多票,希望开发人员能够宽容并修复 LyX 处理此问题的部分或全部问题。
最糟糕的是,LyX 无法优雅地失败:如果有人导入 LaTeX 文件或决定使用,\graphicspath
LyX 不会发出任何警报,表示它无法处理该命令。
这是 LyX 文件的代码:我已将 LyX 中的所有内容设置为“类默认”,然后打开“代码预览”窗格,选择“完整源代码”并从那里复制。然后,我将同一源代码复制到 中text.tex
,编译没有问题。
% Preview source code
%% LyX 2.3.4.2 created this file. For more info, see http://www.lyx.org/.
%% Do not edit unless you really know what you are doing.
\documentclass[english]{article}
\usepackage[latin9]{inputenc}
\usepackage{geometry}
\geometry{verbose}
\usepackage{mathtools}
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{amssymb}
\makeatletter
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Textclass specific LaTeX commands.
\newlength{\lyxlabelwidth} % auxiliary length
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% User specified LaTeX commands.
\usepackage{graphicx}
\graphicspath{{./img/}}
\makeatother
\usepackage{babel}
\begin{document}
asd
\includegraphics{a} % This needs to be added using "evil red code", because
% adding it using Insert -> Graphics insert the command with weird, additional parameters.
\end{document}
顺便说一句,我正在使用 Ubuntu 20.04.3 LTS 和 LyX 2.3.4.2(对于我的发行版来说,这是最新版本)。
答案1
有必要了解的是:
Lyx 不会编译工作目录的文件,而是将使用过的文件复制到临时目录中
/tmp/lyx_tmpdir.ezqVeYKSCOmQ
...另一方面,LyX 不知道也无法控制您手动在 LaTeX 序言中输入的内容(用
Document
→Settings
→添加的部分LaTeX preamble
)。在选择图像的对话框中 (
Insert
→Graphics...
) 必须设置路径。否则,由于找不到图像,Lyx 会插入选项draft
到图像中,因此您必须在发现时将图像包含在 ERT(邪恶的红色文本)中...但首先也在\usepackage{graphicx}
手册 LaTeX 序言中,因为对于 LyX 来说,文档中没有图像,所以显然没有理由加载“graphicx”。而且,由于这种方式对于 LyX 来说没有图像,它们被复制到临时目录,因此查看 PDF(Ctrl+R)仍然失败。
然而,可行的是导出到 LaTeX(→→
File
到工作目录,然后在外部进行编译,因为在那个地方路径是正确的。Export
LaTeX (pdflatex)
话虽如此,对于使用所见即所得编辑器的人来说,这种情况很痛苦。在我看来,最好还是忘掉它\graphicpath
,享受编辑器中的图像预览,如果有一天图像的路径需要更改,搜索和替换.lyx 文件中过时的路径比使用 LyX 编辑它来修改前言更快。