算法中的数组带有下括号和侧括号

算法中的数组带有下括号和侧括号

我正在写我的硕士论文(使用 LyX 的论文模板),并试图显示一个算法。由于 LyX 的算法支持对我来说不太合适,我决定使用 LaTeX 代码进行 ERT(唉!)。

我想要显示的算法中的一个步骤创建了一个二维数组;与其描述它或展示真正的代码,我想我应该画一个二维数组。这很容易做到。
复杂的部分发生在我试图把一个underbrace。我试着跟着这个帖子,但我收到以下错误:

! Extra alignment tab has been changed to \cr.
<template> \endtemplate 

l.80     }

? h
You have given more \span or & marks than there were
in the preamble to the \halign or \valign now in progress.
So I'll assume that you meant to type \cr instead.

现在,由于我使用的是 LyX,我无法真正强制它忽略并继续(此特定错误来自pdflatex在命令行中输入我的 MWE,如下所示)。我真正想要做的是添加一个underbrace以使用内联数学跨越所有列$|p_1|$;我还需要一个使用内联数学跨越所有行的大括号$|p_1|$(这是一个正方形数组,有$|p_1|$许多行和列)。

我将非常感激任何能帮助我解决该问题的帮助。

最小工作示例

\documentclass{IEEEtran} %using this documentClass just for the MWE

% increases link area for cross-references and autoname them
\AtBeginDocument{\renewcommand{\ref}[1]{\mbox{\autoref{#1}}}}

% that links to image floats jumps to the beginning
% of the float and not to its caption
\usepackage{hyperref}
\usepackage[figure]{hypcap}

% the pages of the TOC is numbered roman
% and a pdf-bookmark for the TOC is added
\let\myTOC\tableofcontents
\renewcommand\tableofcontents{%
  \frontmatter
  \pdfbookmark[1]{\contentsname}{}
  \myTOC
  \mainmatter }

% enables calculations
\usepackage{calc}

% increases the bottom float placement fraction
\renewcommand{\bottomfraction}{0.5}

% avoids that floats are placed above its sections
\let\mySection\section\renewcommand{\section}{\suppressfloats[t]\mySection}

% for footnotes in tables
\usepackage{footnote}

% for linewrapping in urls
\usepackage{url}

% for including sourcecode
\usepackage{listings}


% for centering captions
\usepackage{caption}

\usepackage{algorithm, algpseudocode}
\usepackage{amsmath, amssymb}


\begin{document}

\begin{algorithm}
\caption{Computing Similarity Matrix}
\label{alg:simMatrix}
\begin{algorithmic}[1]

\For {i $\leftarrow$ 1 ... max($|p_2| - |p_1|$, 0)}
    \State $p_1 \leftarrow p_1 \bigcup$ NULL
\EndFor

\For {i $\leftarrow$ 1 ... max($|p_2| - |p_1|$, 0)}
    \State $p_2 \leftarrow p_2 \bigcup$ NULL
\EndFor

\State answer $\leftarrow
    \begin{array}{|c|c|c|}
        \hline
        0.0 & \ldots & 0.0 \\ \hline
        \vdots & \ddots & \vdots \\ \hline
        0.0 & \ldots & 0.0 \\ \hline
    % don't forget to add underbrace and sidebrace to indicate height and width of the table.
    \multicolumn{1}{c}{} & \multicolumn{1}{c}{} & \multicolumn{2}{@{}l@{}}{%
      \raisebox{.5\normalbaselineskip}{%
      \rlap{$\underbrace{\hphantom{\mbox{0.0\hspace*{\dimexpr4\arraycolsep+\arrayrulewidth}0.0}}}_{\ell}$}}%
    }
    \end{array}
$

\For {r $\leftarrow$ 1 ... $|p_1|-1$}
    \For {c $\leftarrow$ 1 ... $|p_1|-1$}
        \If {$p_1$[$r-1$] == $p_2$[$c-1$]}
            \State answer[r][c] $\leftarrow$ answer[r-1][c-1] $+1$
        \Else
            \State answer[r][c] $\leftarrow$ $0.0$
        \EndIf
    \EndFor
\EndFor


\State \Return answer

\end{algorithmic}
\end{algorithm}


\end{document}

技术细节

  • Mac OS X 10.7.5(狮子)
  • LyX 版本 2.0.6
  • MikTex 版本 2.0(Build 150)

答案1

你关注了错误的帖子。事实上,链接帖子用于跨越多个列,使用\underbraceif没有跨越整个array。 在您的例子中,您希望\underbrace跨越整个array。 因此,我改为遵循带下支架的侧支架图像,并进行了一些小修改:

在此处输入图片描述

与您的支撑数组相关的一段代码:

\State %
%
\sbox0{$\vcenter{\hbox{$\begin{array}{|c|c|c|}
  \hline
  0.0 & \ldots & 0.0 \\ \hline
  \vdots & \ddots & \vdots \\ \hline
  0.0 & \ldots & 0.0 \\ \hline
\end{array}$}}$}%
%
answer $\leftarrow
  \underbrace{\vrule width0pt depth \dimexpr\dp0 + .3ex\relax\copy0}_{|p_1|}%
  \left.\kern-\nulldelimiterspace
    \vphantom{\copy0}
  \right\rbrace \scriptstyle|p_1|
$

以下是一些注意事项:

  • 请注意符号的特殊用法%。它们对于避免换行很重要,但我保留了它们以使代码更具可读性。请参阅行末百分号(%)有什么用?了解更多信息。

  • 为了模仿右括号“标签”的样式,需要\underbrace显式。\scriptstyle

有关施工的所有其他细节与上述答案

相关内容