在子文件中使用主文件中定义的命令

在子文件中使用主文件中定义的命令

subfiles我正在使用包含主文档的包main.tex,其中包含main.tex

\subfile{file1.tex}
\subfile{file2.tex}

我在里面定义了一些命令main.tex

\usepackage{todonotes}
\newcommand{\todoiteminline}[3]{
    \todoitemtemplate{#1}{#2}{#3}{inline}{red}
}

但是当我编译整个项目时,这些命令在子文件中无法识别。错误在于undefined control sequence我使用命令的地方todoiteminline

如何在每个子文件中使用此命令?

答案1

在主文件中定义命令是可以的,在子文件中也可以使用。例如

\newcommand{\todoiteminline}[3]{
    \textcolor{red}{#1}
    \textcolor{blue}{#3}
    \textcolor{green}{#3}
}

\todoitemtemplate但是,您尝试在中使用的命令\newcommand不存在,因此您的自定义命令\todoiteminline将导致undefined control sequence错误,因为它尝试使用\todoitemtemplate

通过适当的定义,\todoitemtemplate您的定义应该可以在主文件和子文件中正常工作。

答案2

当仅编译子文件时,只有在创建该命令时才可知前言主文件。

工作 main.tex 摘录:

\newcommand{\todoiteminline}[3]{
    \textcolor{red}{#1}
    \textcolor{blue}{#3}
    \textcolor{green}{#3}
}
\begin{document}

失败的 main.tex 摘录:

\begin{document}
\newcommand{\todoiteminline}[3]{
    \textcolor{red}{#1}
    \textcolor{blue}{#3}
    \textcolor{green}{#3}
}

如果主文件编译通过,而子文件本身却没有编译通过,则这可能是原因。


如果主文件由于此命令而无法编译,考虑 samcarter 的回答您定义的命令\todoiteminline从未被定义过。那么,该问题与 subfiles 包无关。

相关内容