根据 \if 开关使用要包含的外部输入

根据 \if 开关使用要包含的外部输入

我正在编写一个应该用于多个项目的规范文件。理想情况下,我希望有一个通用的 latex 文件,我可以在其中启用特定于项目的添加,但这些添加对于每个项目都是不同的。目前我正在使用\if语句,但这会导致非常难以阅读的 tex 代码。理想情况下,我想将这些东西外部化到单独的文件中。我该如何实现这一点?

例子:

%TEX program = xelatex
\documentclass[10pt,oneside,article]{memoir}
\title{Specs for Project}
\newif\ifprojectA
\projectAfalse
\newif\ifprojectB
\projectBfalse
\begin{document}
\chapter{The Chapter}
The font in this project used should be \ifprojectA Times New Roman
\else \ifprojectB Palatino \else
Helvetica \fi
\end{document}

因此,如果没有定义任何项目,我会得到一个默认值,但如果我将其中一个项目设置为 true,我会得到一个特定的项目结果。我希望能够引用一个外部页面,\if在那里我可以插入相关文本,而不是全部输入这些并将特定文本放在里面\if。这可能吗?

答案1

您可以使用带名称的文件projectAfile1.texprojectBfile1.tex然后使用

\projectinput{file1}

定义

\newcommand*\projectinput[1]{\input{project\ifprojectA A\else B\fi#1}}

或者可能更轻松,有两个文件夹projectA,两个文件夹内projectB都有文件file1.tex,然后在序言中

\makeatletter
\edef\input@path{{project\ifprojectA A\else B\fi/}}
\makeatother

然后在文档中使用

\input{file1} % or \include{file1}

这取决于\ifprojectA。(我简化了\if … fi但我认为很容易理解。)

答案2

根据本页链接的相关部分,我想我几乎找到了解决方案:\仅输入文件的一部分。我现在正在做的是使用catchfilebetweentags允许我基于标签包含 LaTex 的包。它与简短的文本片段一起\newcommand允许我选择要包含的文本片段。为了优化这一点,我只想摆脱对默认文件的依赖,这样文本仍然更具可读性。

因此解决方案如下:

%TEX program = xelatex
\documentclass[10pt,oneside,article]{memoir}
\usepackage{catchfilebetweentags}
\title{Specs for Project}
\newif\ifprojectA
\projectAfalse
\newif\ifprojectB
\projectBfalse
\newcommand{\loadText}[1]{% define command
    \ifprojectA\ExecuteMetaData[ProjectA.tex]{#1}%
    \else\ifprojectB\ExecuteMetaData[ProjectB.tex]{#1}%
    \else\ExecuteMetaData[Default.tex]{#1}%
    \fi
}
\begin{document}
\chapter{The Chapter}
The default font for this project should be \loadText{font}.

\结束{文档}

我现在有 3 个名为 的 tex 文件ProjectA.texProjectB.tex并且Default.tex将根据哪个项目处于活动状态来使用。

因此Default.tex看起来像:

%<*font>%
Helvetica%
%</font>

ProjectA.tex 将是:

%<*font>
Palatino
%</font>

等等。

相关内容