amsmath 和相关包中的多行下划线

amsmath 和相关包中的多行下划线

我创建了一个命令,使用和相关包中的命令\myunder将彩色无衬线文本置于数学表达式下。文本颜色是使用该包实现的。undersetamsmathxcolor

我想进行修改\myunder,以便我可以在数学表达式下放置第二行彩色文本。

这是 MWE。不幸的是,正如您在第二个等式中看到的,使用\\不起作用。

\documentclass{article}

\usepackage[semibold,tt=false]{libertine}
\usepackage{libertinust1math}
\usepackage{xifthen}
\usepackage{xcolor}

\newcommand{\myunder}[3][]{%
\ifthenelse{\isempty{#1}}{\underset{\textsf{#3}}{#2}}{\underset{\textsf{\textcolor{#1}{#3}}}{#2}}%
}
\newcommand{\mylongsymbol}{\Delta\Delta\Delta\Delta\Delta\Delta\Gamma_{\alpha}}

\begin{document}

\begin{equation}
  \myunder[red]{\mylongsymbol}{System X} < \myunder[blue]{\mylongsymbol}{System Y}
\end{equation}

\begin{equation}
  \myunder[red]{\mylongsymbol}{System X\\X is real.} < \myunder[blue]{\mylongsymbol}{System Y\\Y is imaginary.}
\end{equation}

\end{document}

姆韦

解决这个问题的最佳方法是什么?

答案1

有趣的问题。

\documentclass{article}

\usepackage[semibold,tt=false]{libertine}
\usepackage{libertinust1math}
\usepackage{xcolor}
%\usepackage{xparse} % not needed with LaTeX 2020-10-01

\ExplSyntaxOn
\NewDocumentCommand{\myunder}{omm}
 {% #1 = color, #2 = main symbol, #3 = the underscript
  \IfNoValueTF { #1 }
   {% no optional argument
    \andrew_myunder:nnn { } { #2 } { #3 }
   }
   {% optional argument should be a color name
    \andrew_myunder:nnn { \color{#1} } { #2 } { #3 }
   }
 }

\seq_new:N \l__andrew_myunder_sub_seq

\cs_new_protected:Nn \andrew_myunder:nnn
 {
  \__andrew_myunder_split:n { #3 }
  \underset
   {% the underscript in \underset
    #1 % the possible color
    \substack
     {% add \\ between the items
      \seq_use:Nn \l__andrew_myunder_sub_seq { \\ }
     }
   }
   {% the main symbol in \underset
    #2
   }
 }

\cs_new_protected:Nn \__andrew_myunder_split:n
 {% split the input at \\
  \seq_set_split:Nnn \l__andrew_myunder_sub_seq { \\ } { #1 }
  % add \textsf{} around each item
  \seq_set_map:NNn \l__andrew_myunder_sub_seq \l__andrew_myunder_sub_seq { \textsf{##1} }
 }

\ExplSyntaxOff

\newcommand{\mylongsymbol}{\Delta\Delta\Delta\Delta\Delta\Delta\Gamma_{\alpha}}

\begin{document}

\begin{equation}
  \myunder[red]{\mylongsymbol}{System X} < \myunder[blue]{\mylongsymbol}{System Y}
\end{equation}

\begin{equation}
  \myunder[red]{\mylongsymbol}{System X\\X is real.} < 
  \myunder[blue]{\mylongsymbol}{System Y\\Y is imaginary.}
\end{equation}

\huge

\begin{equation}
  \myunder[red]{\mylongsymbol}{System X\\X is real.} < 
  \myunder[blue]{\mylongsymbol}{System Y\\Y is imaginary.}
\end{equation}

\end{document}

首先,我们对参数进行规范化:如果没有给出可选参数,则使用空的第一个参数调用主函数,因此不设置颜色。

第一个强制参数按原样用作 的第二个参数\underset。第二个强制参数首先在标记处拆分\\;然后将这样获得的项目转换为\textsf{<item>}。最后使用该序列重新插入\\项目之间,全部输入\substack

请注意,没有\scriptsize发出明确的指令,因此\underset其选择适当字体大小的正常工作也是如此。

在此处输入图片描述

答案2

由于您很可能只会在显示数学环境中使用它,因此以下是一个选项:

在此处输入图片描述

\documentclass{article}

\usepackage{amsmath}
\usepackage{xcolor}

\newcommand{\myunder}[3][black]{
  \underset{\mbox{\scriptsize\color{#1}\sffamily\begin{tabular}{@{}c@{}}#3\end{tabular}}}{#2}
}
\newcommand{\mylongsymbol}{\Delta\Delta\Delta\Delta\Delta\Delta\Gamma_{\alpha}}

\begin{document}

\[
  \myunder[red]{\mylongsymbol}{System X} < \myunder[blue]{\mylongsymbol}{System Y}
\]

\[
  \myunder[red]{\mylongsymbol}{System X \\ X is real.} < \myunder[blue]{\mylongsymbol}{System Y \\ Y is imaginary.}
\]

\end{document}

没有必要真正限制可选参数的存在,因为您可以在black需要时打印内容。

相关内容