由于 \include{directory/file.text} 导致本地编译出现问题,但在浏览器中可以运行

由于 \include{directory/file.text} 导致本地编译出现问题,但在浏览器中可以运行

我正在努力在 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,但都不起作用,出现相同的错误:

Atom LaTex 编译器错误输出的屏幕截图...错误与 TexMaker 相同

这是日志中的错误:

./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 专家是否可以进一步评论,但目前我已经让它工作了。

相关内容