我正在写我的硕士论文(使用 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
你关注了错误的帖子。事实上,链接帖子用于跨越多个列,使用\underbrace
if没有跨越整个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
有关施工的所有其他细节与上述答案。