当我开始使用 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
各列的公共部分没有改变,只是改变了左分隔符。