有没有办法整理你的LaTeX
项目?错误不断累积,但很难找出哪些包是不必要的/有冲突的包。特别是如果你正在使用模板并在此过程中进行自定义:
\documentclass[
11pt,english, onehalfspacing, nolistspacing, liststotoc, headsepline, oneside, chapterinoneline, reqno, a4paper, toctotoc, table]{report}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[shortlabels]{enumitem}
\usepackage[autostyle=true]{csquotes}
\usepackage[backend=biber, style=apa, natbib=true, autocite=inline, uniquename=false]{biblatex}
\usepackage[font=large,labelfont=bf]{caption}
\usepackage{xcolor}
\usetikzlibrary{calc}
%
\usepackage{amsthm, amsmath, amssymb, amsfonts, exscale, latexsym, float, eucal, mathtools, adjustbox, textcomp, mathpazo, lipsum, rotating, pdflscape, subcaption, booktabs, makecell, flafter, xpatch, wrapfig, tikz, minted, arydshln, blkarray, tabularx, array}
%
%-------------------------------------------------------------
% ADDITIONAL FORMATTING
%-------------------------------------------------------------
\geometry{
paper=a4paper, % Change to letterpaper for US letter
inner=1cm, % Inner margin
outer=1cm, % Outer margin
bindingoffset=0.5cm, % Binding offset
top=1cm, % Top margin
bottom=1cm, % Bottom margin
%showframe, % Uncomment to show how the type block is set on the page
}
\DeclareLanguageMapping{english}{english-apa}
\addbibresource{References.bib}
\AtBeginDocument{
\hypersetup{pdftitle=\ttitle} % Set the PDF's title to your title
\hypersetup{pdfauthor=\authorname} % Set the PDF's author to your name
\hypersetup{pdfkeywords=\keywordnames} % Set the PDF's keywords to your keywords
}
\captionsetup[subfigure]{width=0.8\textwidth}
\renewcommand{\chapterbelowskip}{\vspace{30pt}} % Spacing after chapter title
\renewcommand*\chaptermarkformat{\chapapp \thechapter\enskip}
\renewcommand{\baselinestretch}{1.3} % In-text line spacing
\renewcommand{\chapterfont}{\Huge\bfseries}
\renewcommand{\thesubfigure}{\roman{subfigure}}
\newcommand{\euler}{e}
\newcommand{\E}{\mathrm{E}}
\newcommand{\Var}{\mathrm{Var}}
\newcommand{\Cov}{\mathrm{Cov}}
\newcommand{\Corr}{\mathrm{Corr}}
\DeclareMathOperator*{\plim}{plim}
\DeclarePairedDelimiter{\nint}\lfloor\rceil
\DeclarePairedDelimiter{\abs}\lvert\rvert
\makeatletter % Align list of figures and tables
\renewcommand*\l@figure{\@dottedtocline{2}{0em}{3.2em}}
\renewcommand*\l@table{\@dottedtocline{2}{0em}{3.2em}}
\makeatother
\expandafter\def\expandafter\normalsize\expandafter{%
\normalsize
\setlength\abovedisplayskip{0em}
\setlength\belowdisplayskip{1em}
\setlength\abovedisplayshortskip{0em}
\setlength\belowdisplayshortskip{1em}
}
\newcommand\crd{\cellcolor{red!25}}
\newcommand\cgr{\cellcolor{green!25}}
\newcolumntype{C}{>{\centering\arraybackslash}X}
\newlength\mylen
\settowidth{\mylen}{VIII}
%-------------------------------------------------------------
% REPORT INFORMATION
%-------------------------------------------------------------
\AtBeginDocument{
\hypersetup{pdftitle=\ttitle} % Set the PDF's title to your title
\hypersetup{pdfauthor=\authorname} % Set the PDF's author to your name
\hypersetup{pdfkeywords=\keywordnames} % Set the PDF's keywords to your keywords
}
\usemintedstyle{vs}
\begin{document}
\frontmatter
\pagestyle{plain}
\input{Chapters/Titlepage}
%-------------------------------------------------------------
% LIST OF CONTENTS/FIGURES/TABLES PAGES
%-------------------------------------------------------------
\tableofcontents
\begingroup
\let\clearpage\relax
\listoffigures
\listoftables
\endgroup
%-------------------------------------------------------------
% CHAPTERS
%-------------------------------------------------------------
\mainmatter
\pagestyle{thesis}
\include{Chapters/Abstract}
\include{Chapters/Background}
\include{Chapters/Methods}
\include{Chapters/Results}
\include{Chapters/Discussion}
\include{Chapters/Conclusion}
\include{Chapters/Appendix}
%-------------------------------------------------------------
% APPENDICES
%-------------------------------------------------------------
%\appendix
%\renewcommand{\thefigure}{A\arabic{figure}}
%\setcounter{figure}{0}
%-------------------------------------------------------------
% BIBLIOGRAPHY
%-------------------------------------------------------------
%\renewcommand*{\bibfont}{\small}
\printbibliography[heading=bibintoc, title={References}]
%----------------------------------------------------------------
\end{document}
如您所见,添加了许多软件包和选项documentclass
。如何整理这样的 main.tex 并删除任何错误?
答案1
你真的应该避免陷入需要问这个问题的情况。总是以空的序言开始文档,并且只在需要来自包的命令时才添加包
然而,对于这个特定例子有一些评论。
你加载负载但仍然收到未定义的命令错误
! Undefined control sequence.
<recently read> \usetikzlibrary
l.11 \usetikzlibrary
{calc}
由于没有定义,显然没有使用,因此请删除该行。
相似地
! Undefined control sequence.
l.21 \geometry
{
?
所以删除
\geometry{
paper=a4paper, % Change to letterpaper for US letter
inner=1cm, % Inner margin
outer=1cm, % Outer margin
bindingoffset=0.5cm, % Binding offset
top=1cm, % Top margin
bottom=1cm, % Bottom margin
%showframe, % Uncomment to show how the type block is set on the page
}
因为除了生成错误之外它什么都没做。(如果你geometry
更早地加载,那么它的定义可能会更糟,因为单列 A4 文档上的 1cm 边距会让阅读变得非常痛苦。
然后你得到
! LaTeX Error: Command \chapterbelowskip undefined.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.33 \renewcommand{\chapterbelowskip}
{\vspace{30pt}} % Spacing after chapter...
?
再次强调,这些行什么都不做,只是会产生错误,因此删除
如果你运行shell-escape
它,它不会出错,但 latex 会发出警告
LaTeX Warning: Unused global option(s):
[english,onehalfspacing,nolistspacing,liststotoc,headsepline,chapterinoneli
ne,toctotoc].
由于几乎所有使用的选项都没有定义(并且reqno
是默认的),所以只需使用
\documentclass[11pt]{report}
然后你得到错误
! Undefined control sequence.
\__hook_toplevel begindocument -> \hypersetup
所以添加
\usepackage{hyperref}
然后又出现另一个错误:
! Undefined control sequence.
<argument> \ttitle
因此删除两个副本(!!!)
\AtBeginDocument{
\hypersetup{pdftitle=\ttitle} % Set the PDF's title to your title
\hypersetup{pdfauthor=\authorname} % Set the PDF's author to your name
\hypersetup{pdfkeywords=\keywordnames} % Set the PDF's keywords to your keywords
}
您的序言将最终无错误地加载,但仍会警告有关包加载顺序:
Package fvextra Warning: csquotes should be loaded after fvextra, to avoid a wa
rning from the lineno package on input line 37.
更一般地,避免做长列表,例如
\usepackage{amsthm, amsmath, amssymb, amsfonts, exscale, latexsym, float, eucal, mathtools, adjustbox, textcomp, mathpazo, lipsum, rotating, pdflscape, subcaption, booktabs, makecell, flafter, xpatch, wrapfig, tikz, minted, arydshln, blkarray, tabularx, array}
因为它会掩盖您已加载的包。
有些包只是定义了新的命令,因此加载它们而不使用它们只会减慢速度而不会造成实际损害,但如果不使用它们,则应删除它们。例如,它们lipsum
永远不应该出现在真实文档中,你真的会使用吗blkarray
?(我 25 年前写的,从未在真实文档中使用过它)
其他包只需加载它们就会影响整个文档,将它们分成单独的\usepackage
调用会更清楚,例如在该列表的中间,mathpazo
您切换到非常旧的 palatino 字体设置,newpxtext,newpxmath
现在可能会更好。
minted
是一个很好的软件包,但强制--shell-escape
仅在您使用它时才加载它,并注意在这种情况下不要使用不受信任的代码。(这不适用于始终使用 shell-escape 的 overleaf,并使用 docker 容器并通过不在您的计算机上托管服务来减轻风险)
答案2
当您要求时systematic process
,您可以这样做。当我一次向代码中添加了太多内容,或者尝试理解其他人的方法时,我经常会应用它。正如上面两条评论中提到的那样,这在某种程度上是逆向的,或者回归到逐步添加。
过程:
- 处理原始文件的副本
- 删除和/或注释掉至少“一半”,在你的情况下几乎全部
- 根据需要进行编译和更正
- 编译完成后(策略性地)添加更多
例子:
- 我删除了几乎所有东西
- 只剩下可能有用的部分(但还是有点太多了)
- 我策略性地注释掉了我接下来要尝试的内容
现在,如果文件 Titlepage(?)存在一些问题,请在副本上重复此过程,直到解决问题。
作为副作用,缩进对于这几行代码来说变得有些自然,这可能会使您的长代码产生更好的结果。
顺便说一句,在重构方面,请参见下文,不要忘记考虑将某些部分再次移动到其他文件中。所有这些定义和包都可能是此主题。注意使用\input
和之间的区别\include
。
这结果代码无论是我做、你做还是别人做,结果都会有所不同。但是,从观察来看,我在这里描述的所有好处都会很容易实现。例如,包之间的不必要的交互将在添加代码的下一步中出现,并且将更容易发现、追踪和管理。
\documentclass{report}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
%\usemintedstyle{vs}
\begin{document}
%\frontmatter
%\pagestyle{plain}
\input{Chapters/Titlepage}
%-------------------------------------------------------------
% LIST OF CONTENTS/FIGURES/TABLES PAGES
%-------------------------------------------------------------
\tableofcontents
%-------------------------------------------------------------
% CHAPTERS
%-------------------------------------------------------------
% \mainmatter
% \pagestyle{thesis}
\end{document}
从角度来看,这遵循了众所周知的、经过充分验证的和强烈推荐的 TDD (测试驱动设计) 方法,其内容如下:
- 定义一个必须失败的测试(
RED
,缺少实现) - 添加需要通过的内容(
GREEN
只需完成测试) REFACTOR
(处理重复、准备下一步等)REPEAT
通过定义下一个必须失败的测试(尚未实现)
这很快产生了我称之为美丽代码的结果:有能力,具有某种优雅,更容易维护、改变和扩展。
现在,tests
这里是:a)它编译时没有(重大)错误,b)文本按我想要的方式出现,或者至少现在足够好。
附录:一些可以“ delete
”代码部分的方法。
始终在文件副本上工作
物理删除代码行
使用编辑器功能,即标记(鼠标左键按下)、剪切(Ctrl+X)和撤消(Ctrl+Z)
用于
%
注释掉专用的代码行使用包提供的条件环境
comment
https://ctan.org/pkg/comment使用
ifthen
包https://ctan.org/pkg/ifthencondtional compilation
另请参阅主题“ ”下的相关软件包https://ctan.org/topic/cond-comp使用 Tex 原语
\iffalse
标记代码片段,剪切并移动到专用的新文件中,
\input
您可以\input
在所述新文件中级联其他语句,即重复这些步骤上述方法的组合
一些特点这些方法:
故障安全方法
视觉清理,字面意思
是一种快速而智能的方法
容易做到,但结果往往很糟糕
5-8. 允许可选的“删除”,但代价是更加混乱
针对错误创建一个分层文件树
灵活性
答案3
您可以将许多软件包(尤其是那些外观上不太好看的软件包,如果您在风格不同的期刊上发表文章,则需要更换这些软件包)移到一个.sty
文件中。如果即使更改了字体和布局,文档中仍需要某个命令,我建议将其保留在主文档中。
如果您被允许使用它,诸如fontsetup
或之类的包unicode-math
可以替换序言中的大量字体和符号包。