局部修改方程组的“数组”环境

局部修改方程组的“数组”环境

当我开始使用 LyX 2.0.6 时,我注意到当需要方程式系统时,有两种方法可以排版:使用数学行上的相应命令案例

在此处输入图片描述

或手动定义左对齐矩阵(阵列环境。在 LaTeX 代码中)由左花括号分隔,

在此处输入图片描述

PDF 上的结果在水平间距方面明显不同,因为第一个系统最终向左移动以补偿第二个参数留下的空白;但对于第二种方法,结果是一个简单的居中系统,由半英里外的括号界定。(如果我无法向您显示直接输出,请原谅)。

以下是将文件导出到普通 LaTeX 时的基本 MWE:

\documentclass{article}
%
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage{amsmath}
%
\begin{document}
%
Cases environment:
\[
\begin{cases}
 x^{n}+y^{n}=z^{n}\\
 x^{m}+y^{m}=z^{m}
\end{cases}
\]
\par
Defined array environment:
\[
\left\{%
 \begin{array}{l}
  x^{n}+y^{n}=z^{n}\\
  x^{m}+y^{m}=z^{m}
 \end{array}%
\right.
\]
Only array environment:
\[
\begin{array}{ccc}
 a & b & c \\
 a & b & c \\
 a & b & c \\
 a & b & c 
\end{array}
\]
%
\end{document}

因为我只想使用第二种方法,为了纠正左括号的位置,我在序言中添加了以下几行:

\usepackage{etoolbox}
\AtBeginEnvironment{array}{%    % this isn't applied to "matrices" and "cases"
 \addtolength{\arraycolsep}{-3.5pt}
 \renewcommand{\arraystretch}{1.1}%
}

这对我来说很好,除了这种情况之外,我想使用数组环境,并且正如我所做的那样,MWE 结果中第三个示例中的列缩小了(即使没有任何方程组,我输入的代码也能工作)。

因此,在需要使用数组来实现两个目的的文档中,它对于系统来说效果很好,但单独使用效果不佳。

那么我的问题是:是否有任何宏/格式技巧,允许仅当之前的字符为\left{

正如我所注意到的,这种行为类似于的功能\@ifnextchar,因为如果下一个字符是,\left{那么我的代码将应用,否则不应用,如下所示:

\usepackage{etoolbox}
\BeforeBeginEnvironment{array}{%
% if "\left\{" inserted do A, otherwise B
}

答案1

您想\tabcolsep完全避免这种情况;还请注意对空分隔符的更正。在特殊情况下,您可以使用可选参数来扩大前导。

\documentclass{article}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage{amsmath}

\newenvironment{system}[1][1.1]
 {\renewcommand{\arraystretch}{#1}
  \left\{\begin{array}{@{}l@{}}}
 {\end{array}\right.\kern-\nulldelimiterspace}

\begin{document}
A centered formula for showing the center:
\[
\int_{-\infty}^{\infty}e^{-x^2}\,dx=\sqrt{\pi}
\]
The new \texttt{system} environment:
\[
\begin{system}
 x^{n}+y^{n}=z^{n}\\
 x^{m}+y^{m}=z^{m}
\end{system}
\]
Predefined \texttt{array} environment:
\[
\left\{%
 \begin{array}{l}
  x^{n}+y^{n}=z^{n}\\
  x^{m}+y^{m}=z^{m}
 \end{array}%
\right.
\]
A \texttt{system} environment with the optional argument:
\[
\begin{system}[1.5]
 x^{n}+y^{n}=z^{n}\\
 x^{m}+y^{m}=z^{m}
\end{system}
\]
\end{document}

在此处输入图片描述

答案2

环境cases

这是我在这段时间之后想到的一个解决方案,因此我可以dcases通过重新定义cases使用来使用 LyX 并将案例环境定义为更高级mathtools

\documentclass{article}
%
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage{amsmath}
%
\usepackage{mathtools}
\renewenvironment{cases}{%
 \begin{dcases}%
}{%
 \end{dcases}%\kern-\nulldelimiterspace%
}
%
\begin{document}
A centered formula for showing the center:
\[
\int_{-\infty}^{\infty}e^{-x^2}\,dx=\sqrt{\pi}
\]
The new defined \texttt{cases} environment:
\[
\begin{cases}
 \int x^{n}+y^{n}=z^{n}\\
 x^{m}+y^{m}=z^{m}
\end{cases}
\]
Second method for \texttt{array} environment:
\[
\left\{%
 \begin{array}{l}
  \int x^{n}+y^{n}=z^{n}\\
  x^{m}+y^{m}=z^{m}
 \end{array}%
\right.
\]
%
\end{document}

阻止我将这几行代码插入到我的包中的唯一原因LyXbasic是,如果此代码确实与其他数学声明混淆了。

因此,在 LyX 中输入以下内容时:

在此处输入图片描述

输出如下:

在此处输入图片描述

不仅在纯 LaTeX 代码内部,而且在 LyX 内部命令“下方”,都可以轻松观察到排版的差异。

环境array

为了正确修改array环境,必须在单一环境之前添加以下代码行:

\BeforeBeginEnvironment{array}{%
 \let\{\lbrace%
 \hskip-\arraycolsep%
}
\AfterEndEnvironment{array}{%
 \kern-\nulldelimiterspace%
} 

因此,如果添加单个 MWE,将会出现类似于@{}l使用的行为\hskip-\arraycolsep

\[
\left\{
 \begin{array}{l}
  x^n+y^n=z^n \\
  x^m+y^m=z^m 
 \end{array}
\right.
\]
\[
\begin{array}{ccc}
 a & b & c \\
 a & b & c \\
 a & b & c \\
 a & b & c 
\end{array}
\]

输出如下:

在此处输入图片描述

因此现在arraycolsep各列的公共部分没有改变,只是改变了左分隔符。

相关内容