我目前正在尝试改编我为“烹饪书”找到的模板,我想包含不同的页面布局以使文档略有变化。我知道 Latex 不是此类项目的最佳工具,而像 Canva 这样的工具肯定会更好。出于某些原因,我决心继续使用 Latex,我希望您能帮助解决我遇到的一个问题。
我的一般文档设置如下:我有一个包含模板的文件夹,我在其中定义一般命令并包含包。其他命令包括“样式选择器”
\newcommand{\Style}[1]{
\ifthenelse{#1=1}{\input{templates/template_s1}}{}
\ifthenelse{#1=2}{\input{templates/template_s2}}{}
\ifthenelse{#1=3}{\input{templates/template_s3}}{}
\ifthenelse{#1=4}{\input{templates/template_s4}}{}
}
我也有概述模板 s1 到 s4 的文档,问题就出在这里。在原始模板中,您会将 \Style 直接输入到主文档中,因此与其相关的所有命令对于整个文档都是通用的。我希望能够为每个单独的食谱选择一个 \Style,但一些命令名称在模板之间重叠。例如,我有这两种成分环境,具体细节无关紧要,只是为了说明目的。
\newenvironment{ingredient}
{\noindent\begingroup\edef\x{\endgroup\noexpand\includegraphics[width=1\linewidth,height=2.5cm,clip,viewport=\@ImageDim]{\@ImagePath}}\x
\maketitle
\begin{footnotesize}
\noindent
\begin{tabular}{L{0.62\linewidth}L{0.33\linewidth}}
\vspace{-0.21cm}
\textcolor{red!60}{\textbf{{\normalsize Ingredients}}} & \\ % here is the "Ingredients" row
\begin{minipage}{\linewidth}
\vspace{0.2cm}
}
{\vspace{-0.2cm}
\end{minipage}
& \vspace{-1.8cm}Prep time: \@PrepTime \,min % here began tikzpicture
\par \vspace{0.2cm} Cooking: \@CookingTime min -- \@CookingTempe
\par \vspace{0.2cm} %Type of cooking: \@TypeCooking \vspace{0.2cm}
\par Utensiles: \@Utensiles \\
\end{tabular}
\vspace{0.5cm}
\end{footnotesize}
}
和
\newenvironment{ingredient}
{\noindent\begingroup\edef\x{\endgroup\noexpand}\x
\maketitle
\begin{footnotesize}
\noindent
\begin{tabular}{L{0.3\linewidth}L{0.2\linewidth}c}
\vspace{-0.21cm}
\textcolor{red!60}{\textbf{{\normalsize Zutaten}}} & \\ % here is the "Ingredients" row
\begin{minipage}{\linewidth}
\vspace{0.2cm}
}
{\vspace{-0.2cm}
\end{minipage}
& \begin{minipage}{\linewidth}
\vspace{0.2cm}
Prep-Zeit: \@PrepTime min % here began tikzpicture
\par \vspace{0.2cm} Kochen: \@CookingTime min, \@CookingTempe
\par \vspace{0.2cm}
\par Geräte: \@Utensiles
\end{minipage}
& \begin{minipage}{0.4\linewidth}
\includegraphics[width=210pt]{\@ImagePath}
\end{minipage} \\
\end{tabular}
\vspace{0.5cm}
\end{footnotesize}
}
由于我定义了两次环境,一次在 \Style a 中,一次在 \Style b 中,因此我遇到了大量错误,有时代码无法编译。有没有办法定义一个“父”环境,根据样式选择器选择正确的样式?
答案1
这里的一个常见做法是,用不同的名称全局定义所有样式,以便
\newenvironment{ingredientA}{..}{...}
..
\newenvironment{ingredientsB}{..}{...}
然后在你的风格切换中
\ifthenelse{#1=1}{\let\ingredientA\ingredient \let\endingredient\endingredientA}{}
这将\begin{ingredient}
在本地使用定义\begin{ingredientA}
LaTeX 在很多地方使用这种结构,例如,\\
通常 \@normalcr
,tabular
它是\@tabularcr
,在longtable
它是\LT@tabularcr