数学环境外的可拉伸方括号

数学环境外的可拉伸方括号

我想在数学环境之外使用可伸缩方括号。理想情况下,我想\left[ blah \right.在文本中使用右括号。

有可能吗? 怎样做?

注意:我希望能够用新环境来代替我的“blah”,就像这样:

\left[
\begin{array}{l}
    blah \\
    blah
\end{array}
\right.

示例1:

在此处输入图片描述

答案1

这是使用 TiKZ 的另一种解决方案,它或多或少可以让您看到您所描述的内容。

前言

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}

\tikzset{
  grouping/.style={inner sep=2pt, baseline=0ex, left delimiter={[}},
  grouplabel/.style={anchor=west, yshift=0.125\baselineskip}
}

\newlength\groupinglength
\setlength\groupinglength{\textwidth}

\def\BEGIN #1 \END{%
  \bgroup
  \addtolength\groupinglength{-1ex}%
  \hspace*{1.5ex}%
  \tikz \node [grouping] {\hspace{-0.5ex}\parbox{\groupinglength}{#1}};%
  \egroup
}

\newcommand\labelledgroup[3]{%
  \begin{tikzpicture}[every left delimiter/.style={yshift=-0.1\baselineskip}]
    \addtolength\groupinglength{-1ex}%
    \node [grouping, inner ysep=0.5\baselineskip] (block) {%
      \parbox{\groupinglength}{#2}%
    };    
    \node [grouplabel] at (block.north west) {#1};
    \node [grouplabel] at (block.south west) {#3};
  \end{tikzpicture}%
}

\newcommand\IF[2]{\labelledgroup{if #1}{#2}{}}
\newcommand\ELSE[1]{\\[-0.6\baselineskip]\labelledgroup{else}{#1}{end}}

这些定义定义了宏来生成代码块,这些代码块在左侧具有统一可自定义的分隔符。每行不同的代码或代码块都应以行尾结束。我们根据通用代码块定义 and\IF\ELSE,它以与分隔符顶部对齐的某个标签开始(并且可能也以该标签结束)。您可以使用类似的代码来定义重复...直到代码块,或者程序...返回块。除了以下情况外,各种尺寸的选择或多或少都是任意的0.5\baselineskip

文件正文

\begin{document}

\BEGIN 
  Get the height of the box \texttt{hBox} \\
  Get the width of the box \texttt{wBox} \\
  Get the length of the box \texttt{lBox} \\
  $\texttt{vol} = \texttt{hBox} \times \texttt{wBox} \times \texttt{lBox}$ \\
  \IF {$\texttt{vol} > 10$}%
    {Display \textit{``Your box is too big''}}  
  \ELSE
    {Display \textit{``Your box is right-sized''}}  \\
\END

\end{document}

按照目前的定义,\BEGIN ... \END如果有空行,将会报错。有几种方法可以解决这个问题(例如 我只是通过使用不同的语法来做到这一点;我以这种方式编写它,以使事情更简单,并模拟一些现有算法/伪代码包的语法。

结果

排版伪代码

编辑代码(例如 删除 定义中的“end”\ELSE并定义其他块(可能是\FOR和 之类的东西\WHILE)以获得您想要的算法表示。

答案2

首先是基本的解决方案,然后是下面的花哨的解决方案。

我最初设计这个时是两边都有方括号(我保留了方括号,但只是评论了那部分)。因此,它\bracs旨在用于段落和\bracs*表格之类的内容。

\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}
\usepackage{lipsum}

\NewDocumentCommand{\bracs}{s m}{%
\IfBooleanTF{#1}{%
    \ensuremath{\left[\vphantom{\text{#2}}\right.}%
    \text{#2}%
    %\ensuremath{\left.\vphantom{\text{#2}}\right]}%
}{%
    \ensuremath{\left[\vphantom{\parbox{0.95\linewidth}{#2}}\right.}%
    \parbox{0.95\linewidth}{#2}%
    %\ensuremath{\left.\vphantom{\parbox{0.95\linewidth}{#2}}\right]}%

}}%

\begin{document}
\bracs{
\begin{tabular}{l}
    Get the height of the box hBox \\
    Get the width of the box wBox \\
    Get the length of the box lBox \\
    vol = hBox * wBox * lBox\\
    \bracs{
       \begin{tabular}{l}
          if vol $>$ 10
             Display "Your box is too big"\\
          else\\
             Display "Your box is right-sized"\\
       \end{tabular}
    }
\end{tabular}
}

\bigskip
\bracs{\lipsum[1]}
\end{document}

正如 egreg 提到的,tabular是文本模式环境,所以这里使用的是文本模式环境。

在此处输入图片描述


更新:您还可以借助包裹mdframedtikz如果你愿意的话,还可以变得更花哨:

在此处输入图片描述

我添加了一个框架,mdframed但禁用了顶部、右侧和底部框架,并使用tikz箭头样式来生成括号的顶部。

此处的宏\BracS接受一个附加参数来控制背景颜色(如果您选择的话)(默认为yellow!20)。请参阅文档xcolor了解有关颜色的更多选项。这里有几个明显的选项可以调整,包括线条颜色和宽度。您也可以每次更改这些选项,只需传递整tikzsetting行即可,如下所示

\BracS[yellow!20,tikzsetting={draw=blue, line width=3pt,|-|}]

请注意,颜色必须是第一个指定的参数——任何其他参数的顺序都将采用特定选项的最后一个值。

完整代码如下:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows}
\usepackage[framemethod=tikz,xcolor=true]{mdframed}
\usepackage{lipsum}

\mdfdefinestyle{BracStyle}{%
    leftmargin=2ex,%
    topline=false,%
    rightline=false,%
    bottomline=false,% 
    backgroundcolor=yellow!20,%
    tikzsetting={draw=red, line width=3pt,|-|},%
}%
\newcommand{\BracS}[2][yellow!20]{%
    \begin{mdframed}[style=BracStyle,backgroundcolor=#1]%
        {#2}%
    \end{mdframed}%
}%


\begin{document}
\BracS{% default to yellow!20 background
    \begin{tabular}{p{\linewidth}}
        Get the height of the box hBox \\
        Get the width of the box wBox \\
        Get the length of the box lBox \\
        vol = hBox * wBox * lBox\\
        \BracS[blue!20]{
           \begin{tabular}{p{\linewidth}}
              if vol $>$ 10\\
                 Display "Your box is too big"\\
              else\\
                 Display "Your box is right-sized"\\
           \end{tabular}
        }
    \end{tabular}
}
\end{document}

答案3

您可以tabular在数学模式下使用。因此

\newenvironment{delimitedtabular}[4][c]
  {\def\rightdelim{#3}$\left#2\begin{tabular}[#1]{@{}#4@{}}}
  {\end{tabular}\right\rightdelim$}

可以让你说

\begin{delimitedtabular}\{\}{c}
first\\
second\\
third
\end{delimitedtabular}

在文本模式下(分隔符是括号。也可以使用\begin{delimitedtabular}[t]或。前两个参数是分隔符\begin{delimitedtabular}[b]

\begin{delimitedtabular}(){cc}

将使用括号。缺失的分隔符可以输入为.:例如,

\begin{delimitedtabular}\{.{cc}

将仅绘制左括号。

相关内容