我正在尝试编译一份长文档,但收到以下错误消息:
Command \titlefont already defined
因此,我打开了 .log 文件以了解发生了什么。错误消息周围的行如下:
("C:\Program Files\MiKTeX 2.9\tex\latex\koma-script\scrlfile.sty"
Package: scrlfile 2017/09/07 v3.24 KOMA-Script package (loading files)
)))
LaTeX Warning: Command \@footnotemark has changed.
Check if current package is valid.
! LaTeX Error: Command \titlefont already defined.
Or name \end... illegal, see p.192 of the manual.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.1225 \newcommand*\titlefont{\sectfont}
%
因此,在我看来,其中scrlfile.sty
包含了该\titlefont
命令的新定义。但事实并非如此。如您所见,无论哪个文件包含该新定义,它都位于第 1225 行,而该文件scrlfile.sty
只有 492 行。因此,我的问题是:
我如何确定哪个包正在尝试重新定义该
\titlefont
命令?
笔记:我的 LaTeX 没有定义该\titlesec
命令。
答案1
根据包/类的定义\titlefont
,非穷举搜索可能包括
$ pushd /usr/local/texlive/2018/texmf-dist/tex/latex/
$ grep -r '\\newcommand.*\\titlefont'
achemso/achemso.cls:\newcommand*\titlefont{\bfseries\sffamily}
curve/curve.cls:\newcommand\titlefont[1]{\gdef\@titlefont{#1}}
disser/disser.cls: \newcommand\titlefont{\Large\bfseries}
koma-script/scrartcl.cls:\newcommand*\titlefont{\sectfont}%
koma-script/scrartcl.cls:\newcommand*{\scr@fnt@title}{\titlefont}%
koma-script/scrbook.cls:\newcommand*\titlefont{\sectfont}%
koma-script/scrbook.cls:\newcommand*{\scr@fnt@title}{\titlefont}%
koma-script/scrextend.sty:\newcommand*\titlefont{\sectfont}%
koma-script/scrextend.sty:\newcommand*{\scr@fnt@title}{\titlefont}%
koma-script/scrreprt.cls:\newcommand*\titlefont{\sectfont}%
koma-script/scrreprt.cls:\newcommand*{\scr@fnt@title}{\titlefont}%
moderncv/moderncv.cls:\newcommand*{\titlefont}{}
moderncv/moderncv.cls:\newcommand*{\titlestyle}[1]{{\titlefont#1}}
qcm/qcm.cls:\newcommand\titlefont[1]{\gdef\@titlefont{#1}}
simplecv/simplecv.cls:\newcommand{\titlefont}[1]{\def\cv@tit@fnt{#1}}
$ grep -r '\\def\\titlefont'
dialogl/listout.tex:\def\titlefont{bold}
dialogl/listout.tex:\def\titlefontsize{10}
dialogl/listout.tex:\def\titlefont{bold}
dialogl/listout.tex:\def\titlefontsize{10}
disser/autoref.rtx:\def\titlefont{\normalsize}
disser/bachelor.rtx:\def\titlefont{\Large\bfseries}
disser/candidate.rtx:\def\titlefont{\normalsize}
disser/doctor.rtx:\def\titlefont{\normalsize}
disser/master.rtx:\def\titlefont{\Large\bfseries}
disser/specialist.rtx:\def\titlefont{\Large\bfseries}
ifmslide/ifmslide.sty: \def\titlefont{\LARGE\color{title}\bfseries}
paper/paper.cls:\def\titlefont#1{\def\t@font{#1}} \def\t@font{}
pdfslide/pdfslide.cfg: \def\titlefont{\@setfontsize\titlefont{24}{26}\color{dm}\rmfamily\bfseries}
pdfslide/pdfslide.sty: \def\titlefont{\@setfontsize\titlefont{24}{26}\color{dm}\rmfamily\bfseries}
$ popd
带有行号(现在我读了 OP......)
$ grep -r -n '\\newcommand\*\\titlefont'
achemso/achemso.cls:582:\newcommand*\titlefont{\bfseries\sffamily}
koma-script/scrartcl.cls:2725:\newcommand*\titlefont{\sectfont}%
koma-script/scrbook.cls:2943:\newcommand*\titlefont{\sectfont}%
koma-script/scrextend.sty:1305:\newcommand*\titlefont{\sectfont}%
koma-script/scrreprt.cls:2940:\newcommand*\titlefont{\sectfont}%
1225 行指的是其他一些\newcommand*\titlefont
。
答案2
如果你从其中之一开始糟糕的模板,几十个包裹都装上去,你就麻烦了。
据我所知,只有三种方法可以找出哪个包定义了某个命令。
当然,你总是搜索所有使用的包的源代码。好的,可能需要很长时间。
其他选项:在您的问题中列出您在此处加载的所有包,也许有人知道哪个包定义了(在您的情况下)\titlefont
。
我建议为你的长篇作品创建一个新的 *.tex 文件,并提供一个不同的将此文件命名为。保留前言。但删除(在副本中,而不是在您宝贵的原始文件中!)除第 1225 行左右的文本之外的所有内容。
如果你运气好,编译时会得到相同的错误。然后你可以开始注释掉包,直到错误消失。小心,错误可能会消失,因为你事先会得到另一个错误。
如果你们不和睦,就把那份复制的文件作为 MWE 的基础。
我们最近遇到了一个类似的问题:如何找到导致明显不兼容问题的软件包?。最后,提问的人在构建 MWE 时找到了解决方案,但这确实是一个卑鄙的陷阱:词汇表包加载了 amsmath。如果在 amsmath 之前加载,unicode-math 包会抛出错误。如果没有 MWE,他永远不会发现。