背景:
我最近看到可以使用以下语法在tabular
或中定义多个列:array
*{num}{<align>}
因此,例如\begin{tabular}{r*{3}{l}r}
与 相同\begin{tabular}{rlllr}
, 也类似array
。
问题:
我用这个来解决问题创建方程组环境的最佳方法是什么? 其中使用的数字作为参数提供。如果指定的参数比变量数少一,则此方法有效。
因此,我尝试修改它以接受变量的实际数量,并将其设置为计数器值,将其减一,然后使用计数器的新值来指定要使用多少个变量。我怀疑这是一个扩展问题(我还没有完全掌握)。
或者,如果我能以某种方式执行减量运算并将该值应用于列规范也可以。
错误结果:
目前,下面的代码产生:
期望结果:
我想使用与注释意图等同的东西\begin{array}
,使用比提供的参数小一的值。因此,当它按预期工作时,输出应该是(注意右侧垂直条中的偏移):
代码:
\documentclass[border=5pt]{standalone}
\usepackage{xcolor}
\usepackage{array}
\usepackage[paperwidth=4.7in]{geometry}
\newcounter{NumberOfRepeatedColumns}
\newenvironment{MySystem}[2]{% <num+1> <r|l|c>
\setcounter{NumberOfRepeatedColumns}{#1}
\addtocounter{NumberOfRepeatedColumns}{-1}
\begin{array}{c| *#1{#2} | c}% want to replace this with something equivalent to line below
%\begin{array}{c| *{\the\value{NumberOfRepeatedColumns}}{#2}}%
\the\value{NumberOfRepeatedColumns}\\
}{%
\end{array}%
}
\newcommand{\data}{123 & abc & de & f \\1 & a & def & fg}%
\begin{document}
\color{red}
$\begin{MySystem}{4}{r}
\data
\end{MySystem}$
\hspace{0.5in}
$\begin{MySystem}{4}{l}
\data
\end{MySystem}$
\color{blue}
$\begin{MySystem}{3}{r}
\data
\end{MySystem}$
\hspace{0.5in}
$\begin{MySystem}{3}{l}
\data
\end{MySystem}$
\end{document}
答案1
您可以使用
\newcounter{NumberOfRepeatedColumns}
\newenvironment{MySystem}[2]{% <num+1> <r|l|c>
\setcounter{NumberOfRepeatedColumns}{#1}
\addtocounter{NumberOfRepeatedColumns}{-1}
\begin{array}{c| *{\theNumberOfRepeatedColumns}{#2} | c}
}{%
\end{array}%
}
甚至更好,没有额外的计数器,并且\numexpr
:
\newenvironment{MySystem}[2]{% <num+1> <r|l|c>
\begin{array}{c| *{\numexpr#1-1\relax}{#2} | c}
}{%
\end{array}%
}