在 LaTeX 中绘制匹配框

在 LaTeX 中绘制匹配框

我想绘制一个带有不同块的分割,每个块里面都有块索引。

由于我是 LaTeX 新手,我尝试使用

\fbox{$b_{0}$}\fbox{$b_{1}$}\fbox{$b_{2}$}%
\fbox{$..........................$}%
\fbox{$b_{S.t -1}$}\fbox{$b_{s.t}$} 

但是,这样会给出不同大小的盒子。还有其他建议吗?

答案1

编辑以使用 LaTeX101 构造\framebox{},而不是\fbox{\makebox{}}(D'oh!)。

在此处输入图片描述

使用\framebox而不是\fbox,因为它允许指定框宽度。在此示例中,我选择 1 英寸大小并在框内居中对齐。在上一个示例中,这已更改为左对齐。

\documentclass{article}
\newcommand\fxbox[1]{\framebox[1in][c]{#1}}
\parskip 1em\parindent 0in
\begin{document}
ORIGINAL:\\
\fbox{$b_{0}$}\fbox{$b_{1}$}\fbox{$b_{2}$}\fbox{$........................$%
  }\fbox{$b_{S.t -1}$}\fbox{$b_{s.t}$} 

UNIFORM WIDTH (center alignment):\\
\fxbox{$b_{0}$}\fxbox{$b_{1}$}\fxbox{$b_{2}$}\fxbox{$........................$%
  }\fxbox{$b_{S.t -1}$}\fxbox{$b_{s.t}$} 

\renewcommand\fxbox[1]{\framebox[1in][l]{\strut#1}}

UNIFORM WIDTH \& HEIGHT (left alignment):\\
\fxbox{$b_{0}$}\fxbox{$b_{1}$}\fxbox{$b_{2}$}\fxbox{$........................$%
  }\fxbox{$b_{S.t -1}$}\fxbox{$b_{s.t}$} 

\end{document}

在此处输入图片描述

您还会注意到,在中间的图中,由于内容的高度/深度,框的垂直高度是不同的。如果您希望它们相同,您可以\fxbox像第三个示例中那样定义

\newcommand\fxbox[1]{\framebox[1in][l]{\strut#1}}

\strut会将垂直框延伸至整个行高范围。

答案2

TikZ 解决方案:

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{positioning}

\begin{document}
    \begin{tikzpicture}[
        every node/.style={
            draw,minimum width=1in,
            text height=1.75ex,
            text depth=0.5ex,
        },
        node distance=-\pgflinewidth,
    ]
        \node (b 0) {$b_0$};
        \node (b 1) [right=of b 0] {$b_1$};
        \node (b 2) [right=of b 1] {$b_2$};
        \node (dots) [right=of b 2] {.\,.\,.\,.\,.\,.\,.\,.};
        \node (b St-1) [right=of dots] {$b_{S.t -1}$};
        \node (b St) [right=of b St-1] {$b_{S.t}$};
    \end{tikzpicture}
\end{document}

一些盒子

我使用every node样式让图片中的所有节点具有相同的宽度和高度,并绘制边框。您可以删除带有和的线条,text depthtext height节点具有其自然高度。node distance设置为边框的线宽,因此节点之间看起来像是共享一条线。

答案3

两种解决方案。

(1)宽度设置为最宽的条目,但提供了一个可选参数,可以通过添加来修改它。第二个可选参数(在括号中)是内部对齐,默认为居中。

\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\rimatightboxes}{ O{0pt} D(){c} m }
 {
  \rima_tightboxes:nnn { #1 } { #2 } { #3 }
 }

\seq_new:N \l_rima_input_seq
\seq_new:N \l_rima_boxes_seq
\dim_new:N \l_rima_width_dim
\box_new:N \l_rima_entry_box

\cs_new_protected:Npn \rima_tightboxes:nnn #1 #2 #3
 {
  \seq_set_split:Nnn \l_rima_input_seq { , } { #3 }
  \dim_zero:N \l_rima_width_dim
  \seq_map_inline:Nn \l_rima_input_seq
   {
    \str_if_eq:nnF { ##1 } { \dots }
     {
      \hbox_set:Nn \l_rima_entry_box { $##1$ }
      \dim_set:Nn \l_rima_width_dim
       { \dim_max:nn { \l_rima_width_dim } { \box_wd:N \l_rima_entry_box } }
     }
   }
  \dim_add:Nn \l_rima_width_dim { (#1 + \fboxsep) * 2}
  \seq_set_map:NNn \l_rima_boxes_seq \l_rima_input_seq
   {
    \str_if_eq:nnTF { ##1 } { \dots }
     {
      \exp_not:n { \framebox[\l_rima_width_dim][#2] { \strut\dotfill } }
     }
     {
      \exp_not:n { \framebox[\l_rima_width_dim][#2] { \strut$##1$ } }
     }
   }
  \seq_use:Nn \l_rima_boxes_seq { \kern-\fboxrule }
 }
\ExplSyntaxOff

\begin{document}

\rimatightboxes{b_{0},b_{1},b_{2},\dots,b_{st-1},b_{st}}

\bigskip

\rimatightboxes(l){b_{0},b_{1},b_{2},\dots,b_{st-1},b_{st}}

\bigskip

\rimatightboxes[3pt]{b_{0},b_{1},b_{2},\dots,b_{st-1},b_{st}}

\bigskip

\rimatightboxes[3pt](r){b_{0},b_{1},b_{2},\dots,b_{st-1},b_{st}}

\end{document}

在此处输入图片描述

(2)宽度通过可选参数设置(默认为 0.5 英寸)。第二个可选参数(在括号中)是内部对齐,默认为居中。

\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\rimaboxes}{ O{0.5in} D(){c} m }
 {
  \rima_boxes:nnn { #1 } { #2 } { #3 }
 }

\seq_new:N \l_rima_input_seq
\seq_new:N \l_rima_boxes_seq

\cs_new_protected:Npn \rima_boxes:nnn #1 #2 #3
 {
  \seq_set_split:Nnn \l_rima_input_seq { , } { #3 }
  \seq_set_map:NNn \l_rima_boxes_seq \l_rima_input_seq
   {
    \str_if_eq:nnTF { ##1 } { \dots }
     {
      \exp_not:n { \framebox[#1][#2] { \strut\dotfill } }
     }
     {
      \exp_not:n { \framebox[#1][#2] { \strut$##1$ } }
     }
   }
  \seq_use:Nn \l_rima_boxes_seq { \kern-\fboxrule }
 }
\ExplSyntaxOff

\begin{document}

\rimaboxes{b_{0},b_{1},b_{2},\dots,b_{st-1},b_{st}}

\bigskip

\rimaboxes(l){b_{0},b_{1},b_{2},\dots,b_{st-1},b_{st}}

\bigskip

\rimaboxes[.3in]{b_{0},b_{1},b_{2},\dots,b_{st-1},b_{st}}

\bigskip

\rimaboxes[.3in](r){b_{0},b_{1},b_{2},\dots,b_{st-1},b_{st}}

\end{document}

在此处输入图片描述

如您所见,最后两个例子并不十分合适。

答案4

在此处输入图片描述

\documentclass{article}
\usepackage{tabularx}
\setlength\extrarowheight{2pt}
\begin{document}
\noindent
\begin{tabularx}{\textwidth}{|*6{>{\centering$}X<{$}|}}
\hline
b_0&b_1&b_2&\cdots&b_{s.t-1}&b_{s.t}\tabularnewline
\hline
\end{tabularx}
\end{document}

相关内容