![由于 \include{directory/file.text} 导致本地编译出现问题,但在浏览器中可以运行](https://linux22.com/image/373745/%E7%94%B1%E4%BA%8E%20%5Cinclude%7Bdirectory%2Ffile.text%7D%20%E5%AF%BC%E8%87%B4%E6%9C%AC%E5%9C%B0%E7%BC%96%E8%AF%91%E5%87%BA%E7%8E%B0%E9%97%AE%E9%A2%98%EF%BC%8C%E4%BD%86%E5%9C%A8%E6%B5%8F%E8%A7%88%E5%99%A8%E4%B8%AD%E5%8F%AF%E4%BB%A5%E8%BF%90%E8%A1%8C.png)
我正在努力在 TexMaker 或 Atom 中本地编译文件,但该文件可以在 ShareLatex.com(我最初创建它的地方)上很好地编译。
我的文件格式是...
\documentclass{article}
%\documentclass[draft]{article}
\usepackage[utf8]{inputenc}
\usepackage[style=authoryear, uniquename=false, sorting=nyvt, backend=biber, doi=false, isbn=false, maxcitenames=2]{biblatex}
\usepackage{graphicx}
\usepackage{rotating}
\newcommand*{\bibtitle}{References}
\renewcommand*{\bibfont}{\raggedright\small}
\usepackage[english]{babel}
\usepackage[autostyle, english = american]{csquotes}
\MakeOuterQuote{"}
\addbibresource{references.bib}
\usepackage[singlelinecheck=false]{caption}
\usepackage{glossaries}
\makeglossaries
\input{glossary}
\title{TITLE OF DOC}}
\author{MY NAME}
\date{DATE RIGHT NOW}
\begin{document}
\maketitle
\textbf{Abstract:} Some stuff about the doc.
\clearpage
\tableofcontents
\clearpage
\include{sections/outline}
\include{sections/introduction}
\include{sections/extended_info}
\include{sections/first_bits}
\input{sections/not_done_yet}
\input{sections/also_not_done_yet}
\input{sections/this_will_be_the_conclusion}
\clearpage
\printglossary[style=long]
\clearpage
\setlength{\baselineskip}{0pt} % JEM: Single-space References
{\renewcommand*\MakeUppercase[1]{#1}%
\printbibliography[heading=bibintoc,title={\bibtitle}]}
\end{document}
因此,基本上,所有内容都可以在 SharLatex.com 上顺利编译,但在我的本地机器上(同时安装有 TexMaker 和 Atom 插件)却失败了,因为:
I can't write on file 'sections/outline.aux'
这会导致致命的错误。
现在,我知道也许我应该使用\input
而不是\include
(虽然我不知道为什么!),您可能想知道为什么某些文档部分使用一个而不是另一个......但这是因为它导致在\clearpages
之后\include
而不是\input
(我希望那些最后的输入部分都在一页上,因为它们目前只是空标题)。
现在,我会将其全部更改为\input
(并且文档确实会编译),但这会导致我的图像在所有部分之后都进入文档的末尾,并且没有清晰的页面,而这都是我不想要的混乱!
那么,有什么方法可以让我保留\include
和\input
命令的当前状态(实际上,保留所有状态),但添加一些内容以使其正确编译?还是我做了一些我不明白的非常非常错误的事情?
任何帮助都值得感激(对 LaTeX 来说相对较新)...
编辑
尝试将目录和内容 chmod 改为 666 和 777,但都不起作用,出现相同的错误:
这是日志中的错误:
./main.tex:61: I can't write on file `sections/outline.aux'.
\@include ...\immediate \openout \@partaux #1.aux
\immediate \write \@partau...
l.61 \include{sections/outline}
(Press Enter to retry, or Control-D to exit; default file extension is `.tex')
Please type another output file name
./main.tex:61: Emergency stop.
\@include ...\immediate \openout \@partaux #1.aux
\immediate \write \@partau...
l.61 \include{sections/outline}
*** (job aborted, file error in nonstop mode)
编辑2
我意识到这有点死胡同,但即使我对整个项目文件夹执行 chmod -R 777 操作,它也不会起作用……但如果我将文件放在主目录中(并更改代码路径),它就可以正常工作并进行编译,因此肯定是权限问题……我快要疯了,想弄明白问题出在哪里。使用 Linux Mint。
编辑3
如果我切换到使用 Atom 的 latex 包中的 Javascript DiCy 构建器,那么它可以很好地编译(而不是使用 latexmk)...因此,我认为这可能与 latexmk 的配置有关...是否可能存在与 MiKTeX 的 openout_any=a 类似的问题?如果是这样,是否有可以在 latexmk 中更改的设置来阻止这种情况发生并允许一切顺利编译?
答案1
\include
使用而不是 并没有错\input
:这是非常好的做法(但请注意, 总是会开始一个新页面,因此在 之前\include
不需要)。\clearpage
\include
然而,的重点在于它涉及一种为每个包含的文件\include
编写单独文件的机制。这样做的目的是,如果您决定只排版文档的一部分(使用) ,LaTeX 仍然可以使用您未排版部分的文件。这意味着 LaTeX 需要能够将文件写入每个包含文件的目录中。.aux
\includeonly{}
.aux
.aux
您的错误消息表明这是不可能的,可能是因为包含文件所在的目录无法被 LaTex 写入。请确保包含的文件位于.tex
该目录中,并且目录权限设置为允许编译器写入它们。
答案2
经过大量的深思熟虑、反复检查和尝试各种方法后,问题似乎不仅仅是(正如 Paul Stanley 正确指出的那样)“LaTeX 需要能够将 .aux 文件写入每个包含文件的目录中”,而且还需要能够找到并写入任何构建目录(如果您正在使用)。因此,您不仅需要包含内容子目录的权限,还需要镜像结构和构建文件(例如 .aux 文件)的权限。
因此,如果您要构建到单独的目录中(例如,将构建文件分开),那么您还需要在那里拥有相同的 .tex 文件子目录。
即,如果我将子部分放在“sections”文件夹中(例如 outline.aux),我还需要确保在 build 文件夹中创建了一个空目录(例如 build/sections)。否则它无法将 .aux 文件放在目录中。
换句话说,至少对于那些使用 Atom 和 latexmk 或 TexMaker 和 latexmk 的人来说(这里的问题似乎是 latexmk,因为 DiCy 可以很好地处理构建目录,并且不需要创建这些目录),您需要确保在任何构建子目录中镜像/创建目录。
找出答案的过程很痛苦,但事实就是如此。我想知道 latexmk 专家是否可以进一步评论,但目前我已经让它工作了。