如何全局减少数组环境中垂直线的长度?

如何全局减少数组环境中垂直线的长度?

首先,最小工作样本如下。

\documentclass{amsart}
%\delimitershortfall=10pt
\delimiterfactor=000
\begin{document}
\[
S=\left\{x~
\begin{array}{|l}
\frac{m}{n}
\end{array}
\right\}
\]
\end{document}

在此处输入图片描述

如你所见,我通过设置\delimiterfactor。但是数组环境中的垂直线仍然很长。那么如何全局减少数组环境中垂直线的长度呢?



\middle|使用生成较长的“这样”行后,问题消失(年代是一组X使得...)如下。

\documentclass{amsart}
%\delimitershortfall=10pt
\delimiterfactor=000
\begin{document}
\[
S=\left\{x~\middle|
\begin{array}{l}
\frac{m}{n}
\end{array}
\right\}
\]
\end{document}

在此处输入图片描述

答案1

您应该使用 either arraynor \middle。也许是\big大小,但这取决于内容。

\documentclass{amsart}

\begin{document}

\[
S=\{x \mid \tfrac{m}{n} \}
\]

\[
S=\bigl\{x \bigm| \tfrac{m}{n} \bigl\}
\]

\end{document}

在此处输入图片描述

当然,对于集合构建器符号,人们可以做得更好。

\documentclass{amsart}

\NewDocumentCommand{\set}{s o >{\SplitArgument{1}{|}}m}{%
  % first we absorb the arguments and pass control to \makeset
  \IfBooleanTF{#1}{%
    \makeset{\left\{}{\right\}}{\;\middle|\;}#3%
  }{%
    \makeset
      {\mathopen{\IfValueT{#2}{#2}\{}}% opening
      {\mathclose{\IfValueT{#2}{#2}\}}}% closing
      {\mathrel{\IfValueT{#2}{#2}|}}% middle
      #3%
  }%
}
\NewDocumentCommand{\makeset}{mmmmm}{%
  #1% opening
  #4\IfValueT{#5}{#3#5}%
  #2%
}


\begin{document}

\begin{gather*}
S=\set{x | \tfrac{m}{n}}
\\
S=\set[\big]{x | \tfrac{m}{n}}
\\
S=\set*{x | \frac{m}{n}}
\\
S=\set{x_1,x_2,\dots,x_n}
\end{gather*}

\end{document}

在此处输入图片描述

优点:你不必拘泥于特定的表示形式。例如,如果你想在有横线时在两端添加细空格(Knuth 就是这样做的),你可以通过修改来实现\makeset

\NewDocumentCommand{\makeset}{mmmmm}{%
  #1% opening
  \IfValueT{#5}{\,}%
  #4\IfValueT{#5}{#3#5\,}%
  #2%
}

在此处输入图片描述

答案2

nicematrix可以定义一个自定义线条样式,可以根据需要将其缩短至任意长度。

在此处输入图片描述

\documentclass{article}

\usepackage{nicematrix, tikz}

\begin{document}

\NiceMatrixOptions
    {custom-line={letter=I, tikz={shorten <=2pt, shorten >=2pt}}}
\[
\begin{NiceArray}{cIc}
  x & \frac{m}{n}
\end{NiceArray}
\]

\end{document}

相关内容