再次数学环境

再次数学环境

这是之前的帖子,可以在这里
我现在正在尝试使用该命令,但出现了很多编译错误,我真的不明白问题出在哪里。这是我使用该命令的方式:

\documentclass{article}
\usepackage{mathtools}
\newcommand{\twopartdef}[3]{%
   \left\{
      \begin{array}{ll}
          #1 & \mbox{if } #2 \\
          #3 & \mbox{otherwise}
      \end{array}
   \right.
}
\begin{document}
 %some text ...
 \[
 join^\sharp_{KSet_n}(\{ \alpha_1, \hdots, \alpha_p \}, \{ \beta_1, \hdots, \beta_q \}) = 
\twopartdef{\{\alpha_1, \hdots, \alpha_p\} \cup \{\beta_1, \hdots, \beta_q\}}{p \leq n et q \leq n}{\top} 
\]
 %more text
\end{document}

以下是主要的编译错误:

Missing $ inserted
I've inserted a begin-math/end-math symbol since I think you left one out
....
I've deleted a group-closing symbol because it seems to be spurious, as in `$x}$'..
....
I can't figure out why you would want to use a tab mark here.
....
A left brace was mandatory here, so I've put one in.
....

我发现问题出在这一行(通过评论它)

\twopartdef{\{\alpha_1, \hdots, \alpha_p\} \cup \{\beta_1, \hdots, \beta_q\}}{p \leq n et q \leq n}{\top}

所以我尝试用 代替$ $lbrace rbrace\{ \}什么都没变。我对其他定义使用了相同的命令,效果很好。我遗漏了什么?

编辑:我尝试单独编译上述代码,并且成功了。那么为什么它不能与其余文档一起运行呢?

答案1

您的定义\twopartdef使得语法非常繁琐。

\documentclass{article}
\usepackage{mathtools}

\newcommand{\case}[1]{\text{if $#1$}}
\newcommand{\otherwise}{\text{otherwise}}
\newenvironment{multipartdef}
  {\begin{cases}}
  {\end{cases}}

\DeclareMathOperator{\join}{join}

\begin{document}
 %some text ...
 \[
\join^\sharp_{\mathit{KSet}_n}(\{ \alpha_1, \dots, \alpha_p \}, \{ \beta_1, \dots, \beta_q \}) = 
\begin{multipartdef}
\{\alpha_1, \hdots, \alpha_p\} \cup \{\beta_1, \hdots, \beta_q\} &
  \case{p \leq n \text{ and } q \leq n}
\\
\top & \otherwise
\end{multipartdef}
\]
 %more text
\end{document}

如果您有更多案例,则不需要不同的命令,而只需向环境中添加行即可。 您出错的机会也更少。

答案2

我假设您使用这个定义来表示\twopartdef

\usepackage{amsmath}
\newcommand{\twopartdef}[3]{%
  \begin{cases}
    #1 & \text{if #2} \\
    #3 & \text{otherwise}
  \end{cases}
}

此定义以文本模式处理第二个参数,因此您需要编写

$p \leq n$ et $q \leq n$

在代码中命令的第二个参数中(否则,第一个\leq将出现在文本模式中,这将触发错误消息)。

您更正后的代码:

\documentclass{article}
\usepackage{amsmath}
\newcommand{\twopartdef}[3]{%
  \begin{cases}
    #1 & \text{if #2} \\
    #3 & \text{otherwise}
  \end{cases}
}
\DeclareMathOperator{\join}{join}

\begin{document}

\[
 \join^\sharp_{KSet_n}(\{ \alpha_1, \hdots, \alpha_p \}, \{ \beta_1, \hdots, \beta_q \}) = 
\twopartdef{\{\alpha_1, \hdots, \alpha_p\} \cup \{\beta_1, \hdots, \beta_q\}}{$p \leq n$ et $q \leq n$}{\top} 
\]

\end{document}

结果如下:

在此处输入图片描述

请注意,我曾经\DeclareMathOperator定义过\join允许上标/下标的运算符(类似于\sum)。

相关内容