我的矩阵中需要一条垂直虚线,但我当前的解决方案看起来虚线超出了环境范围array
(确实如此 - 我在 Photoshop 中检查过了)。我可以手动将其缩短 1 毫米或 0.5 毫米吗?
以下是 MWE:
\documentclass[a4paper]{article}
\usepackage{amsmath}
\usepackage{arydshln}
\usepackage{mathtools}
\begin{document}
\begin{equation*}
\setlength{\dashlinegap}{2pt}
\left[\begin{array}{cccc:c}
a_{11} & a_{12} & \cdots & a_{1n} & b_1 \\
a_{21} & a_{22} & \cdots & a_{2n} & b_2 \\
\vdots & \vdots & \ddots & \vdots & \vdots \\
a_{n1} & a_{n2} & \cdots & a_{nn} & b_n
\end{array}
\right]
\end{equation*}
\end{document}
答案1
我觉得你在这里排版矩阵。请注意,提供amsmath
矩阵环境(matrix
、、等……),这样你就不需要在周围输入自己的分隔符。(你会想要。)pmatrix
bmatrix
array
bmatrix
要获取增广矩阵,请使用问题中的代码: 这个增广矩阵的宏如何工作?
编辑:为了方便起见,包含了代码。
\usepackage{arydshln}
\makeatletter
\renewcommand*\env@matrix[1][*\c@MaxMatrixCols c]{%
\hskip -\arraycolsep
\let\@ifnextchar\new@ifnextchar
\array{#1}}
\makeatother
将代码放在序言中。
然后,您可以使用与数组相同的语法,但最终会得到以下代码:
\begin{equation*}
\begin{bmatrix}[cccc:c]
a_{11} & a_{12} & \cdots & a_{1n} & b_1 \\
a_{21} & a_{22} & \cdots & a_{2n} & b_2 \\
\vdots & \vdots & \ddots & \vdots & \vdots \\
a_{n1} & a_{n2} & \cdots & a_{nn} & b_n
\end{bmatrix}
\end{equation*}
编辑2:另一个有趣的链接: http://texblog.net/latex-archive/maths/amsmath-matrix/
答案2
一种可能性是从另一个角度来解决问题:不要缩短虚线,而是可以扩大分隔符:
\documentclass[a4paper]{article}
\usepackage{arydshln}
\usepackage{mathtools}
\begin{document}
\begin{equation*}
\delimitershortfall=0pt
\setlength{\dashlinegap}{2pt}
\left[\begin{array}{cccc:c}
a_{11} & a_{12} & \cdots & a_{1n} & b_1 \\
a_{21} & a_{22} & \cdots & a_{2n} & b_2 \\
\vdots & \vdots & \ddots & \vdots & \vdots \\
a_{n1} & a_{n2} & \cdots & a_{nn} & b_n
\end{array}
\right]
\end{equation*}
\end{document}
当然,还有使用(过度?)的解决方案\tikzmark
;这能让你更好地控制微调:
\documentclass[a4paper]{article}
\usepackage{tikz}
\usepackage{mathtools}
\newcommand\tikzmark[1]{%
\tikz[remember picture,overlay]\coordinate (#1);}
\begin{document}
\begin{equation*}
\left[\begin{array}{ccccc}
a_{11} & a_{12} & \cdots & a_{1n}\hfill\tikzmark{a} & b_1 \\
a_{21} & a_{22} & \cdots & a_{2n} & b_2 \\
\vdots & \vdots & \ddots & \vdots & \vdots \\
a_{n1} & a_{n2} & \cdots & a_{nn}\hfill\tikzmark{b} & b_n
\end{array}
\right]
\end{equation*}
\tikz[remember picture,overlay]
\draw[dashed,dash pattern={on 4pt off 2pt}] ([xshift=0.5\tabcolsep,yshift=7pt]a.north) -- ([xshift=0.5\tabcolsep,yshift=-2pt]b.south);
\end{document}
答案3
以下是您可以使用 做的{bNiceMatrix}
事情nicematrix
。
该环境与经典环境类似{bmatrix}
,amsmath
但在单元格、行和列下创建了 PGF/Tikz。
创建矩阵后,可以使用该节点绘制您想要的任何规则。
\documentclass{article}
\usepackage{nicematrix,tikz}
\begin{document}
$\begin{bNiceMatrix}
a_{11} & a_{12} & \cdots & a_{1n} & b_1 \\
a_{21} & a_{22} & \cdots & a_{2n} & b_2 \\
\vdots & \vdots & \ddots & \vdots & \vdots \\
a_{n1} & a_{n2} & \cdots & a_{nn} & b_n
\CodeAfter
\tikz \draw [dashed,shorten > = 2pt, shorten < = 2pt] (1-|5) -- (last-|5) ;
\end{bNiceMatrix}$
\end{document}
您需要多次编译(因为nicematrix
使用 PGF/tikz 节点)。