更新:在评论中提出的建议和 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 安装中的文件,最有可能的情况是您不拥有这些文件(拥有)也不与这些文件位于同一组(可能类似于),因此权限适用于您。如果这样做,则第一个块看起来像。因此,后三个与您有关。您需要的是普通文件、目录和可执行文件的权限。world
read
write
execute
root
admin
world
ls -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
这将为您提供以下所有不可读文件和文件夹的列表。可能只是顶级目录具有错误的权限,如果是这样,请执行以下操作:
- 发出小小的“欢呼”声
sudo chmod 755 /usr/share/texmf-texlive
如果列表很短,您可以对每个文件/目录执行类似上述操作。规则是,授予的权限是所有者拥有的权限没有可写的。 chmod
可以采用“符号”权限,这样你就不必记住八进制符号(符号在这里实际上更好,因为添加权限很简单)。简而言之:
- 做
sudo ls -l <filename>
- 检查第一位,它将以
drwx
、-rwx
或之一开头-rw-
- 如果前两者之一,那么
sudo chmod go+rx <filename>
- 如果是最后一个,那么
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:
纠正了问题。