我有一个使用子文件创建的 LaTeX 项目,其中包含多个嵌套目录。层次结构中最底层的目录之外的每个目录都包含一个 main.tex 文件,该文件从下层文件夹导入 main.tex 文件。下面显示了我的意思的一个示例:
├── main.tex
├── chapter1/
│ ├── main1.tex
│ └── sectiona/
│ └── main1a.tex
└── chapter2/
├── main2.tex
└── sectiona/
└── main2a.tex
在此示例中,main.tex 将包含 main1.tex 和 main2.tex 作为子文件,main1.tex 将包含 main1a.tex 作为子文件,而 main2 将包含 main2a.tex 作为子文件。
我想要一个在不同的章节中有不同定义的命令(在我的具体情况下,我想要一个 \myvector 命令,它在一个章节中是 \overrightarrow,在另一个章节中是 \mathbf)。
我的第一个想法是在 main1.tex 和 main2.tex 的前言中以不同的方式定义命令,然后分别将 main1a.tex 和 main2a.tex 定义为 main1.tex 和 main2.tex 的子文件(使用 \documentclass[../main1]{subfiles} 或 \documentclass[../main2]{subfiles}),然后将 main1.tex 和 main2.tex 定义为 main.tex 的子文件(使用 \documentclass[../main]{subfiles})。但是,这会出现错误:! LaTeX Error: Option clash for document class subfiles.
。如果我直接将 main1a.tex 和 main2a.tex 作为 main.tex 的子文件(使用 \documentclass[../../main]{subfiles}),则不会出现此错误,但在这种情况下,如果我单独编译 main1a.tex 或 main2a.tex,它将不会在 main1.tex 或 main2.tex 的前言中看到命令定义。
有没有办法以不同的方式定义 chapter1 和 chapter2 命令,而不必在这些目录中的每个文档中定义它?
答案1
您可以尝试定义一次命令并使用其中的一些计数器检查,但每一章您都可以将计数器设置为新值。
\documentclass{article}
\usepackage{etoolbox}
\newcounter{vectortype}
\setcounter{vectortype}{3}
\newcommand{\myvector}[1]{
\ifnumequal{\value{vectortype}}{1}{%
\overrightarrow{#1}%
}{}
\ifnumequal{\value{vectortype}}{2}{%
\mathbf{#1}%
}{}
\ifnumequal{\value{vectortype}}{3}{%
Ola! #1%
}{}
}
\begin{document}
\(\myvector{AB}\)
\section{Chapter A}
\setcounter{vectortype}{1}
\(\myvector{AB}\)
\section{Chapter B}
\setcounter{vectortype}{2}
\(\myvector{AB}\)
\section{Chapter C}
\setcounter{vectortype}{1}
\(\myvector{AB}\)
\end{document}