Linux 上的 Latex:新安装 TeX Live 后的路径问题

Linux 上的 Latex:新安装 TeX Live 后的路径问题

更新:在评论中提出的建议和 Andrew Stacey 耐心的指导/诊断下,问题最终通过更正 bashrc 中的错误环境变量得到解决。我并不完全清楚这是否是自始至终唯一的问题,因为我记得即使使用 vanilla bashrc 也无法正常工作,但最终问题似乎在于我对路径的无能,而不是权限方面的一些奇怪问题。


这很可能是这里已经讨论过的问题的重复——事实上,它似乎与“LaTeX 如何查找包文件?“——所以我希望这不是太琐碎的事情。

我刚刚在我的桌面上进行了一次全新安装(Ubuntu 12.04,如果这有区别的话),并从我的备份中恢复文件后,开始重新安装特科利天真的apt-get方法。现在我发现latex 测试.tex受到

这是 pdfTeX,版本 3.1415926-1.40.10(TeX Live 2009/Debian)进入扩展模式(./test.tex LaTeX2e <2009/09/24> Babel 和英语连字模式、usenglishmax、dumylang、nohyphenation,已加载。

!LaTeX 错误:未找到文件“article.cls”。

尽管sudo latex 测试.tex运行正常。我尝试将 bashrc 恢复到之前运行的版本,但无济于事。同样,上述问题 似乎没有解决问题;运行特克斯哈希没有什么区别,清除和重新安装也无济于事。

我想我可以将导出行添加到 bashrc,但由于这在之前安装 TeXLive 时都没有必要,所以我想知道这次我做错了什么。

答案1

这看上去很像权限问题。我在使用 进行安装时遇到过这种情况tlmgr,不过我很惊讶它在使用 完成安装后竟然出现了apt-get

可能的问题

在安装过程中的某个时刻,安装了只有该帐户才能使用的文件root。也就是说,普通用户没有允许读取latex工作所需的文件。

简而言之,UNIX 系统上每个文件和目录都有三组权限(有点像)。这三组权限分别是:owner、、,三个权限分别是、、。要使用文件或目录,您必须具有足够的权限来执行该group活动。适用哪些权限取决于您与该文件(或目录)的关系。对于安装在 TeXLive 安装中的文件,最有可能的情况是您不拥有这些文件(拥有)也不与这些文件位于同一组(可能类似于),因此权限适用于您。如果这样做,则第一个块看起来像。因此,后三个与您有关。您需要的是普通文件、目录和可执行文件的权限。worldreadwriteexecuterootadminworldls -l <file name>-rw-r--r--r--r-x

诊断问题

为了验证这个假设,你需要找到(部分)文件的权限。从评论来看,首先要尝试的是:

ls -l /usr/share/texmf-texlive/tex/latex/base/article.cls

如果运气好的话,下面这个会报错:

cannot access /usr/share/texmf-texlive/tex/latex/base/article.cls: Permission denied

如果是,那就是权限问题。(可能是消息是cannot open directory,并且路径只是给定路径的一部分。)

确保不再发生

当软件安装时,它会尝试尽可能宽容地安装它,以便任何用户都可以使用它。但是,当你在自己的目录中创建一个文件时,想要这种行为:你想要它,这样你就可以使用它,但其他用户却不能使用它。不幸的是,系统无法区分这两种情况,只能看到指令“创建文件/目录”。现在你可以说“创建文件/目录拥有这些权限“但如果用户想要进行本地安装,那么很难覆盖这一点。因此,请求是“创建一个文件/目录并建议这些权限”。然后将“建议”与所谓的匹配umask以获取真正的权限。您可以将视为umask极化器:它只允许某些权限通过。

权限以八进制数形式存储,其中 4 = 读取、2 = 写入、1 = 可执行。安装程序可能会说“这是一个可执行文件,我建议权限为 755”,这意味着每个人都可以读取和执行它,而所有者可以写入它。然后根据 进行检查,umask以查看可以设置哪些权限。普通用户umask是 077。这允许通过所有用户权限,但不允许其他任何权限,因此生成的文件权限为 700。另一方面,系统umask安装的标准是022。这可以防止文件被非所有者写入,但否则允许其他所有内容通过。那么 755 就可以了。

这里可能发生的情况是,umask实际上的 是 077,而不是 022。使用 时有时会发生这种情况,sudo因为从那时起umask就未从其用户设置更改。为了避免再次发生这种情况,该命令umask 022将 更改umask为 022(umask本身显示当前设置),因此可以在安装之前完成此操作,然后在安装之后重置。

(但是,正如我所说的,我对这种情况的发生感到有点惊讶,apt-get因为我希望这种情况能够得到umask解决。 tlmgr不是, 尽管。)

事后修复

删除并重新安装是一种选择,但考虑到 TeXLive 的大小,这有点太麻烦了。更精细一点的是修复权限。

首先要弄清楚问题出在哪里。为此,请从article.cls您拥有的路径开始,找出您首先丢失权限的位置:

ls -l /usr/share/texmf-texlive/tex/latex/base/article.cls
ls -ld /usr/share/texmf-texlive/tex/latex/base
ls -ld /usr/share/texmf-texlive/tex/latex
ls -ld /usr/share/texmf-texlive/tex
ls -ld /usr/share/texmf-texlive
ls -ld /usr/share

(如果你到了最下面那个仍然有问题,那么你就有大的问题。)

很有可能是/usr/share/texmf-texlive。接下来是了解问题的规模:

sudo find /usr/share/texmf-texlive -not -perm -004

texmf-texlive这将为您提供以下所有不可读文件和文件夹的列表。可能只是顶级目录具有错误的权限,如果是这样,请执行以下操作:

  1. 发出小小的“欢呼”声
  2. sudo chmod 755 /usr/share/texmf-texlive

如果列表很短,您可以对每个文件/目录执行类似上述操作。规则是,授予的权限是所有者拥有的权限没有可写的。 chmod可以采用“符号”权限,这样你就不必记住八进制符号(符号在这里实际上更好,因为添加权限很简单)。简而言之:

  1. sudo ls -l <filename>
  2. 检查第一位,它将以drwx-rwx或之一开头-rw-
  3. 如果前两者之一,那么sudo chmod go+rx <filename>
  4. 如果是最后一个,那么sudo chmod go+r <filename>

如果列表很长,逐个检查会很麻烦。幸运的是,find可以遍历文件列表并对每个文件执行命令。我们必须执行两次才能解决这两种情况。

首先,我们检查并将read位添加到所有文件和文件夹中。

sudo find /usr/share/texmf-texlive -not -perm -004 -exec chmod go+r {} ';'

然后,我们检查并将该execute位添加到所有可执行文件和所有文件夹中。

sudo find /usr/share/texmf-texlive -perm +100 -not -perm -001 -exec chmod go+x {} ';'

此时,一切都应该具有正确的权限。

警告

有可能 TeXLive 树中有一些文件不适合所有人读取,或者有一些可执行文件不适合 root 以外的任何人执行。但是,我对此表示怀疑。

(不幸的是,由于我不能保证我上次的 TL 安装不需要这个权限修复,我不能相信我的安装中的权限都是预期的,所以我无法自己测试。)

答案2

我和 Yemon Choi(以及 Loop Space)有相同的诊断和解决方案,但TEXINPUTS定义方式错误。我的.pam_environment阅读

TEXINPUTS=.:/home/faan/fnielsen/sty

在末尾添加冒号

TEXINPUTS=.:/home/faan/fnielsen/sty:

纠正了问题。

相关内容