在 if/then 条件中使用命令(或变量)

在 if/then 条件中使用命令(或变量)

想象一下以下情况:一所学校提供两门课程,课程 A 和课程 B。其中一门课程是数学,另一门课程是物理。数学由 Bill 教授,物理由 Susan 教授。我想使用 ifthen 包实现这些关联,因此我尝试了以下方法:

\documentclass{article}

\usepackage{ifthen}

\newcommand{\course}[1]{
\ifthenelse{\equal{#1}{A}}{math}{}%
\ifthenelse{\equal{#1}{B}}{physics}{}%
}

\newcommand{\teacher}[1]{
\ifthenelse{\equal{\course{#1}}{math}}{Bill}{}%
\ifthenelse{\equal{\course{#1}}{physics}}{Susan}{}%
}

\begin{document}

Course: \course{A}
Teacher: \teacher{A}

\end{document}

这会产生大量错误。那么 if/then 无法处理新命令吗?有什么方法可以实现吗?

答案1

有很多方法可以做到这一点。下面是使用单个原始方法\if(因为您只有两道菜)的方法:

课程:数学
老师:Bill

\documentclass{article}

\newcommand{\course}{%
  \ifmathcourse
    math%
  \else% not mathcourse
    physics%
  \fi
}

\newcommand{\teacher}{%
  \ifmathcourse
    Bill%
  \else% not mathcourse
    Susan%
  \fi
}

\newif\ifmathcourse% default is \mathcoursefalse
\setlength{\parindent}{0pt}% Just for this example

\begin{document}

\mathcoursetrue% This is a math course
Course: \course \par
Teacher: \teacher

\end{document}

也许,对于多个课程,你可以根据其姓名老师一些ID。下面,\setcourse{<course>}{<name>}{<teacher>}设置这个,同时\coursename提取\courseteacher该内容。

课程:数学
老师:Bill
课程:物理
老师:Susan

\documentclass{article}

\newcommand{\currentcourse}{}
\newcommand{\course}[1]{\renewcommand{\currentcourse}{#1}}
\makeatletter
\newcommand{\coursename}{\@nameuse{course@\currentcourse @name}}
\newcommand{\courseteacher}{\@nameuse{course@\currentcourse @teacher}}
% \setcourse{<course>}{<name>}{<teacher}
\newcommand{\setcourse}[3]{%
  \@namedef{course@#1@name}{#2}%
  \@namedef{course@#1@teacher}{#3}%
}
\makeatother

\setcourse{math}{Mathematics}{Bill}
\setcourse{physics}{Physics}{Susan}

\setlength{\parindent}{0pt}% Just for this example
\begin{document}

\course{math}

Course: \coursename \par
Teacher: \courseteacher

\course{physics}

Course: \coursename \par
Teacher: \courseteacher

\end{document}

如果需要的话,可以建立错误检查。

相关内容