带有数组和可自定义列数(2 至 5)的宏

带有数组和可自定义列数(2 至 5)的宏

我想自动使用以下数组。在第一个数组中,唯一改变的参数是\verb!\eqDef!,测试的命令,和A \eqDef B,视觉测试。

我的问题是我想要一个解决方案,它还允许使用 1、2、3 或 4 个命令进行测试?在第二个数组中,测试的命令是\verb!\eqDef!\verb!\eqTest!\verb!\eqVerif!\verb!\eqId!视觉测试是A \eqDef BA \eqTest BA \eqVerif BA \eqId B

我提供了一个文件,其中包含我的示例中提出的命令。

测试一个命令 --> 两列

\[
    \renewcommand{\arraystretch}{1.2}%
    \begin{array}{llll} 
        \textbf{Style}            & \verb!\eqDef!
        \\ \hline
        \verb!\displaystyle!      & \displaystyle      A \eqDef B
        \\
        \verb!\textstyle!         & \textstyle         A \eqDef B
        \\
        \verb!\scriptstyle!       & \scriptstyle       A \eqDef B
        \\
        \verb!\scriptscriptstyle! & \scriptscriptstyle A \eqDef B
    \end{array}
\]

测试了四个命令 --> 五列

\[
    \renewcommand{\arraystretch}{1.2}%
    \begin{array}{lllll} 
        \textbf{Style}
        & \verb!\eqDef!                   & \verb!\eqTest!
        & \verb!\eqVerif!                 & \verb!\eqId!
        \\ \hline
        \verb!\displaystyle!
        & \displaystyle      A \eqDef B   & \displaystyle      A \eqTest B
        & \displaystyle      A \eqVerif B & \displaystyle      A \eqId B
        \\
        \verb!\textstyle!
        & \textstyle         A \eqDef B   & \textstyle         A \eqTest B
        & \textstyle         A \eqVerif B & \textstyle         A \eqId B
        \\
        \verb!\scriptstyle!
        & \scriptstyle       A \eqDef B   & \scriptstyle       A \eqTest B
        & \scriptstyle       A \eqVerif B & \scriptstyle       A \eqId B
        \\
        \verb!\scriptscriptstyle!
        & \scriptscriptstyle A \eqDef B   & \scriptscriptstyle A \eqTest B
        & \scriptscriptstyle A \eqVerif B & \scriptscriptstyle A \eqId B
    \end{array}
\]

一个功能代码

% Source : http://tex.stackexchange.com/questions/35404/is-there-a-wider-equal-sign

\documentclass{scrartcl}
    \usepackage{amsmath}
    \usepackage{mathtools}

    \usepackage{graphicx}

    \makeatletter
        \newcommand{\@@eqLikeDef}[3]{%
            \ensuremath{\overset{\mathclap{\text{\scalebox{#1}{#2}}}}{#3}}%
        }
        \newcommand*{\@eqLikeDef}[2]{
            \mathchoice
                {% \displaystyle
                    \@@eqLikeDef{0.7}{#1}{#2}
                }
                {% \textstyle
                    \@@eqLikeDef{0.7}{#1}{#2}
                }
                {% \scriptstyle
                    \@@eqLikeDef{0.6}{#1}{#2}
                }
                {% \scriptscriptstyle
                    \@@eqLikeDef{0.5}{#1}{#2}
                }
        }

        \newcommand*{\eqDef}{\@eqLikeDef{Def}{=}}
        \newcommand*{\eqTest}{\@eqLikeDef{Test}{=}}
        \newcommand*{\eqVerif}{\@eqLikeDef{?}{=}}
        \newcommand*{\eqId}{\@eqLikeDef{Id}{=}}
    \makeatother

\begin{document}

\section{Equality Signs}

\[
    \renewcommand{\arraystretch}{1.2}%
    \begin{array}{lllll} 
        \textbf{Style}
        & \verb!\eqDef!                   & \verb!\eqTest!
        & \verb!\eqVerif!                 & \verb!\eqId!
        \\ \hline
        \verb!\displaystyle!
        & \displaystyle      A \eqDef B   & \displaystyle      A \eqTest B
        & \displaystyle      A \eqVerif B & \displaystyle      A \eqId B
        \\
        \verb!\textstyle!
        & \textstyle         A \eqDef B   & \textstyle         A \eqTest B
        & \textstyle         A \eqVerif B & \textstyle         A \eqId B
        \\
        \verb!\scriptstyle!
        & \scriptstyle       A \eqDef B   & \scriptstyle       A \eqTest B
        & \scriptstyle       A \eqVerif B & \scriptstyle       A \eqId B
        \\
        \verb!\scriptscriptstyle!
        & \scriptscriptstyle A \eqDef B   & \scriptscriptstyle A \eqTest B
        & \scriptscriptstyle A \eqVerif B & \scriptscriptstyle A \eqId B
    \end{array}
\]

\end{document}

答案1

我不确定我是否完全理解所需的内容。

选择列:

如果您的意思是要使用相同的表格数据,并有选择地选择要打印的列,那么一种方法是使用collcell允许将表格内容传递给宏的包。使用这个,我定义了一个宏,它接受数据条目并在S使用列类型时返回一个空字符串:

\newcommand*{\SupressEntry}[1]{}%
\newcolumntype{S}{>{\collectcell\SupressEntry}{l}<{\endcollectcell}}%

因此,如果您希望打印该列,请使用通常的l,但如果您不想打印它,请使用L。以下是使用 的输出\begin{array}{l l l l l}

在此处输入图片描述

和同一张表\begin{array}{l l S l S}(即隐藏第 3 列和第 5 列): 在此处输入图片描述

选择行:

如果您的问题是关于选择行,有很多方法可以做到这一点。一种方法是newtoggleetoolbox包中使用。例如\newtoggle{ShowDisplayStyle}。然后当您想启用此行时,只需设置\toggletrue{ShowDisplayStyle}为显示此行,但如果您希望抑制此行\togglefalse{ShowDisplayStyle}

以下是带有\togglefalse{ShowTextStyle}和 的结果\togglefalse{ShowScriptStyle}

在此处输入图片描述

重复使用表而不重复数据:

我还建议将数据包装到宏中,就像我下面使用\TableData宏所做的那样,以减少出错的可能性。

代码:

\documentclass[border=2pt]{standalone}
    \usepackage{amsmath}
    \usepackage{mathtools}
    \usepackage{collcell}
    \usepackage{etoolbox}
    \usepackage{graphicx}

    \newcommand*{\SupressEntry}[1]{}%
    \newcolumntype{S}{>{\collectcell\SupressEntry}{l}<{\endcollectcell}}%

    \newtoggle{ShowDisplayStyle}
    \newtoggle{ShowTextStyle}
    \newtoggle{ShowScriptStyle}
    \newtoggle{ShowScriptScriptStyle}

    % Chose which ones are printed:
    \toggletrue{ShowDisplayStyle}
    \toggletrue{ShowTextStyle}
    \toggletrue{ShowScriptStyle}
    \toggletrue{ShowScriptScriptStyle}


    \makeatletter
        \newcommand{\@@eqLikeDef}[3]{%
            \ensuremath{\overset{\mathclap{\text{\scalebox{#1}{#2}}}}{#3}}%
        }
        \newcommand*{\@eqLikeDef}[2]{
            \mathchoice
                {% \displaystyle
                    \@@eqLikeDef{0.7}{#1}{#2}
                }
                {% \textstyle
                    \@@eqLikeDef{0.7}{#1}{#2}
                }
                {% \scriptstyle
                    \@@eqLikeDef{0.6}{#1}{#2}
                }
                {% \scriptscriptstyle
                    \@@eqLikeDef{0.5}{#1}{#2}
                }
        }

        \newcommand*{\eqDef}{\@eqLikeDef{Def}{=}}
        \newcommand*{\eqTest}{\@eqLikeDef{Test}{=}}
        \newcommand*{\eqVerif}{\@eqLikeDef{?}{=}}
        \newcommand*{\eqId}{\@eqLikeDef{Id}{=}}
    \makeatother

\newcommand{\Label}[1]{\texttt{\textbackslash#1}}%
\newcommand{\TableData}{%
        \textbf{Style}
        & \Label{eqDef}                   & \Label{eqTest}
        & \Label{eqVerif}                 & \Label{eqId}
        \\ \hline
    \iftoggle{ShowDisplayStyle}{
        \Label{displaystyle}
        & \displaystyle      A \eqDef B   & \displaystyle      A \eqTest B
        & \displaystyle      A \eqVerif B & \displaystyle      A \eqId B
        \\
    }{}
    \iftoggle{ShowTextStyle}{
        \Label{textstyle}
        & \textstyle         A \eqDef B   & \textstyle         A \eqTest B
        & \textstyle         A \eqVerif B & \textstyle         A \eqId B
        \\
    }{}
    \iftoggle{ShowScriptStyle}{
        \Label{scriptstyle}
        & \scriptstyle       A \eqDef B   & \scriptstyle       A \eqTest B
        & \scriptstyle       A \eqVerif B & \scriptstyle       A \eqId B
        \\
     }{}
     \iftoggle{ShowScriptScriptStyle}{
       \Label{scriptscriptstyle}
        & \scriptscriptstyle A \eqDef B   & \scriptscriptstyle A \eqTest B
        & \scriptscriptstyle A \eqVerif B & \scriptscriptstyle A \eqId B
        \\
     }{}
}
\begin{document}

\section{Equality Signs: All Styles and Commands}
\[
    \renewcommand{\arraystretch}{1.2}%
    \begin{array}{l l l l l} 
        \TableData
    \end{array}
\]

\section{Equality Signs: Only Columns 3 and 5}
\[
    \renewcommand{\arraystretch}{1.2}%
    \begin{array}{l l S l S} 
        \TableData
    \end{array}
\]

\section{Equality Signs:Only textstyle and scriptstyle Commands}
    \togglefalse{ShowTextStyle}
    \togglefalse{ShowScriptStyle}
\[
    \renewcommand{\arraystretch}{1.2}%
    \begin{array}{l l l l l} 
        \TableData
    \end{array}
\]
    \toggletrue{ShowTextStyle}
    \toggletrue{ShowScriptStyle}

\end{document}

相关内容