我想自动使用以下数组。在第一个数组中,唯一改变的参数是\verb!\eqDef!
,测试的命令,和A \eqDef B
,视觉测试。
我的问题是我想要一个解决方案,它还允许使用 1、2、3 或 4 个命令进行测试?在第二个数组中,测试的命令是\verb!\eqDef!
、\verb!\eqTest!
和\verb!\eqVerif!
,\verb!\eqId!
视觉测试是A \eqDef B
、A \eqTest B
和A \eqVerif B
。A \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 列):
选择行:
如果您的问题是关于选择行,有很多方法可以做到这一点。一种方法是newtoggle
从etoolbox
包中使用。例如\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}