我想在数学环境之外使用可伸缩方括号。理想情况下,我想\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
是文本模式环境,所以这里使用的是文本模式环境。
更新:您还可以借助包裹mdframed
tikz
如果你愿意的话,还可以变得更花哨:
我添加了一个框架,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}
将仅绘制左括号。