<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">\documentclass[full]{l3doc}
\usepackage[scheme=plain]{ctex}
\usepackage{enumitem}
\usepackage{indentfirst}
\usepackage{titling}
\usepackage{geometry}
\usepackage{fancyvrb-ex}
\usepackage{joinbox}

\IndexPrologue
  {
    \section*{Index}
    \markboth{Index}{Index}
    \addcontentsline{toc}{section}{Index}
    The~italic~numbers~denote~the~pages~where~the~
    corresponding~entry~is~described,~
    numbers~underlined~point~to~the~definition,~
    all~others~indicate~the~places~where~it~is~used.
  }

\newcommand\tikzmark[1]{\tikz \coordinate[overlay, remember picture] (#1);}

\geometry{
  left=4.5cm,
  right=2cm,
  top=2cm,
  bottom=2cm,
}
\hypersetup {
  CJKbookmarks,
  bookmarksopen,
  bookmarksopenlevel=3,
  pdfstartview=FitH,
  pdfinfo = {
   Title = The package joinbox ,
   Subject = A LaTeX3 package ,
   Author = Geng Nan
 }
}

\DoNotIndex{\begin, \end}
\setlength{\parskip}{\medskipamount}
\DeclareDocumentEnvironment { noteen } { +b } {
  \par\textbf{\textsf{NOTE:~}}#1\par
} {}
\DeclareDocumentEnvironment { notezh } { +b } {
  \par\textbf{\textsf{æ³¨æ„:~}}#1\par
} {}

\AtEndDocument{
  \newgeometry{
    left=2cm,
    right=2cm,
    top=2cm,
    bottom=2cm
  }
  \PrintIndex
}

\ExplSyntaxOn
\dim_new:N \l__my_syntax_dim
\box_new:N \g__my_syntax_box
\NewDocumentEnvironment { Syntax } { s }
  {
    \dim_set:Nn \l__my_syntax_dim
      { \textwidth }
    \hbox_gset:Nw \g__my_syntax_box
      \small \ttfamily
      \begin{minipage}[t]{\l__my_syntax_dim}
        \raggedright\obeyspaces\obeylines
  }
  {
      \end{minipage}
    \hbox_gset_end:
    \IfValueF { #1 } { \smallskip }
    \box_use_drop:N \g__my_syntax_box
    \smallskip
  }

\DeclareDocumentEnvironment { Description } { o +b } {
  \hbox_set:Nn \l_tmpa_box { #1 }
  \dim_set:Nn \l_tmpa_dim { \box_wd:N \l_tmpa_box }
  \begin{itemize}[labelwidth=\l_tmpa_dim, align=left]
    #2
  \end{itemize}
} {  }

\keys_define:nn { joinbox/doc } {
  opt  .tl_set:N = \l_opt_tl,
  desc .tl_set:N = \l_desc_tl,
  init .tl_set:N = \l_init_tl,
  init .initial:n = init-none,
}

\box_new:N \l__option_box
\NewDocumentEnvironment { option } { m +b } {
  \keys_set:nn { joinbox/doc } { #1 }
  \hbox_set:Nw \l__option_box
    \small \ttfamily
    \begin{minipage}[t]{\textwidth}
      \obeyspaces\obeylines
      \textcolor{red}{
        \l_opt_tl
        \exp_args:Nx\SpecialOptionIndex{\l_opt_tl}
      }
      {~}\l_desc_tl
      \hfill(
      \tl_if_eq:NnTF \l_init_tl { init-none } { no~value }
        { initially~\texttt{\l_init_tl} }
      )
    \end{minipage}
  \hbox_gset_end:
  \box_use_drop:N \l__option_box
  #2
  \medskip
} {  }

\DeclareDocumentCommand \opt { O{} m }
  { \__codedoc_cmd:no {#1} { #2 } }
\ExplSyntaxOff

\def\vers{\texttt{v1.0.3}
\thanks{\url{https://gitee.com/nwafu_nan/joinbox}}
}

\begin{document}
\title{
  \pkg{joinbox}ç›’å­æ‹¼æŽ¥å®åŒ…
  \rlap{\makebox[4cm][r]{
    \normalsize $\Longrightarrow$ \color{red}
    \protect\hyperlink{en}{English Version}
    \protect\hypertarget{zh}{}
  }}
}
\author{\textit{è€¿æ¥&nbsp;} \texttt{&lt;nangeng@nwafu.edu.cn&gt;}}
\date{\the\year å¹´\the\month æœˆ\the\day æ—¥\qquad \vers
}
\maketitle

{\small
\tableofcontents
}
\newpage

\begin{documentation}

\section{å¼•è¨€}

\pkg{joinbox}æ˜¯ä¸€ä¸ªåŸºäºŽ\pkg{l3coffins}ç”¨\pkg{Expl3}å¼€å‘çš„
ç›’å­æ‹¼æŽ¥å®åŒ…ï¼Œå®ƒç”¨äºŽå®žçŽ°ç›’å­çš„åž‚ç›´æˆ–æ°´å¹³æ‹¼æŽ¥ã€‚åž‚ç›´æ‹¼æŽ¥
ä¼šä»¥å„å¯¹è±¡ç­‰å®½çš„æ–¹å¼æ‹¼æŽ¥ï¼Œè€Œæ°´å¹³æ‹¼æŽ¥ä¼šä»¥å„å¯¹è±¡ç­‰é«˜çš„æ–¹å¼
æ‹¼æŽ¥ã€‚

è¯¥å®åŒ…æä¾›äº†\tn{joinbox}ã€\tn{joinboxes}å’Œ\tn{joinfigs}ä¸‰ä¸ªæ‹¼æŽ¥
å‘½ä»¤ã€‚å…¶ä¸­ï¼Œ\tn{joinbox}ç”¨äºŽæ‹¼æŽ¥ä¸¤ä¸ªç‹¬ç«‹å¯¹è±¡ï¼Œ\tn{joinboxes}ç”¨äºŽ
æ‹¼æŽ¥ä¸€ç»„å¯¹è±¡ï¼Œ\tn{joinfigs}ç”¨äºŽæ‹¼æŽ¥å¤šä¸ªå›¾åƒã€‚è¿™ä¸‰ä¸ªå‘½ä»¤çš„ä¸å¸¦*(æ˜Ÿå·)
ç‰ˆæœ¬ç”¨äºŽåž‚ç›´æ‹¼æŽ¥ï¼Œè€Œå¸¦*(æ˜Ÿå·)çš„ç‰ˆæœ¬ç”¨äºŽæ°´å¹³æ‹¼æŽ¥ã€‚

åŒæ—¶ï¼Œè¯¥å®åŒ…è¿˜æä¾›äº†\tn{joinset}å‘½ä»¤ç”¨äºŽå¯¹è¾“å‡ºåŸºçº¿ã€å°ºå¯¸å’Œæ‹¼æŽ¥é—´è·è¿›è¡Œè®¾ç½®ã€‚

\section{ç”¨æˆ·æŽ¥å£}

\subsection{\cs{joinbox}æ‹¼æŽ¥ä¸¤ä¸ªå¯¹è±¡å‘½ä»¤}

\begin{function}{\joinbox,\joinbox*}
  \begin{syntax}
    \cs{joinbox} \oarg{æ‹¼æŽ¥é€‰é¡¹} \marg{å¯¹è±¡1} \marg{å¯¹è±¡2}
    \cs{joinbox*} \oarg{æ‹¼æŽ¥é€‰é¡¹} \marg{å¯¹è±¡1} \marg{å¯¹è±¡2}
  \end{syntax}

\end{function}

  ç”¨äºŽæ‹¼æŽ¥ä¸¤ä¸ªå¯¹è±¡ã€‚ è¯¥å‘½ä»¤éœ€è¦ç”¨ä¸¤ä¸ªå¿…é€‰å‚æ•°\marg{å¯¹è±¡1}å’Œ
  \marg{å¯¹è±¡2}æŒ‡å®šéœ€è¦æ‹¼æŽ¥çš„å¯¹è±¡ã€‚æ‹¼æŽ¥å¯¹è±¡å°†è¢«ç½®äºŽcoffinä¸­ï¼Œ
  ç„¶åŽæŒ‰éœ€æ±‚è¿›è¡Œæ‹¼æŽ¥ã€‚

  \marg{å¯¹è±¡1}æˆ–\marg{å¯¹è±¡2}å¯ä»¥ç½®ç©ºï¼Œä½†ä¸¤è€…ä¸èƒ½åŒæ—¶ä¸ºç©ºã€‚

  åœ¨\oarg{æ‹¼æŽ¥é€‰é¡¹}ä¸­ï¼Œå¯ä»¥é€šè¿‡é€—å·åˆ†éš”çš„key-valueæŒ‡å®šè¾“å‡ºç»“æžœ
  åŸºçº¿ä½ç½®ã€ è¾“å‡ºå°ºå¯¸(åž‚ç›´æ‹¼æŽ¥æ˜¯è¾“å‡ºå®½åº¦ï¼Œæ°´å¹³æ‹¼æŽ¥æ˜¯è¾“å‡ºé«˜åº¦)
  å’Œæ‹¼æŽ¥é—´è·ã€‚

\subsection{\cs{joinboxes}æ‹¼æŽ¥å¤šä¸ªå¯¹è±¡å‘½ä»¤}

\begin{function}{\joinboxes,\joinboxes*}
  \begin{syntax}
    \cs{joinboxes} \oarg{æ‹¼æŽ¥é€‰é¡¹} \marg{æ‹¼æŽ¥å†…å®¹åˆ—è¡¨}
    \cs{joinboxes*} \oarg{æ‹¼æŽ¥é€‰é¡¹} \marg{æ‹¼æŽ¥å†…å®¹åˆ—è¡¨}
  \end{syntax}

\end{function}

  ç”¨äºŽæ‹¼æŽ¥å¤šä¸ªå¯¹è±¡ã€‚è¯¥å‘½ä»¤éœ€è¦ç”¨ä¸€ä¸ªå¿…é€‰å‚æ•°\marg{æ‹¼æŽ¥å†…å®¹åˆ—è¡¨}ï¼Œ
  æŒ‡å®šéœ€è¦æ‹¼æŽ¥çš„å†…å®¹ï¼Œä¸åŒå†…å®¹ä¹‹é—´ç”¨è‹±æ–‡é€—å·è¿›è¡Œåˆ†éš”ï¼Œè‹¥å†…å®¹ä¸­å«
  æœ‰ç©ºæ&nbsp;¼æˆ–é€—å·ï¼Œåˆ™éœ€è¦å°†å…¶ç½®äºŽ|{}|åˆ†ç»„ä¸­ã€‚æœ€å°‘éœ€è¦æœ‰1ä¸ªæ‹¼æŽ¥å†…å®¹ã€‚

  åœ¨\oarg{æ‹¼æŽ¥é€‰é¡¹}ä¸­ï¼Œå¯ä»¥é€šè¿‡é€—å·åˆ†éš”çš„key-valueæŒ‡å®šç»“æžœåŸºçº¿ä½ç½®ã€
  è¾“å‡ºå°ºå¯¸(åž‚ç›´æ‹¼æŽ¥æ˜¯è¾“å‡ºå®½åº¦ï¼Œæ°´å¹³æ‹¼æŽ¥æ˜¯è¾“å‡ºè°ƒè¯•)ã€æ‹¼æŽ¥é—´è·ã€‚

\subsection{\cs{joinfigs}æ‹¼æŽ¥å¤šä¸ªå›¾åƒå‘½ä»¤}

\begin{function}{\joinfigs,\joinfigs*}
  \begin{syntax}
    \cs{joinfigs} \oarg{æ‹¼æŽ¥é€‰é¡¹} \marg{æ–‡ä»¶åç§°åˆ—è¡¨}
    \cs{joinfigs*} \oarg{æ‹¼æŽ¥é€‰é¡¹} \marg{æ–‡ä»¶åç§°åˆ—è¡¨}
  \end{syntax}

\end{function}

  ç”¨äºŽæ‹¼æŽ¥å¤šä¸ªå›¾åƒã€‚è¯¥å‘½ä»¤éœ€è¦ç”¨ä¸€ä¸ªå¿…é€‰å‚æ•°\marg{æ–‡ä»¶åç§°åˆ—è¡¨}
  æŒ‡å®šéœ€è¦æ‹¼æŽ¥å›¾åƒï¼Œæ–‡ä»¶åç§°ä¸­å¯ä»¥åŒ…å«è·¯å¾„ï¼Œä¸åŒæ–‡ä»¶åç§°ä¹‹é—´ç”¨
  è‹±æ–‡é€—å·è¿›è¡Œåˆ†éš”ã€‚æœ€å°‘éœ€è¦æœ‰1ä¸ªå›¾åƒæ–‡ä»¶åç§°ã€‚

  åœ¨\oarg{æ‹¼æŽ¥é€‰é¡¹}ä¸­ï¼Œå¯ä»¥é€šè¿‡é€—å·åˆ†éš”çš„key-valueæŒ‡å®šç»“æžœåŸºçº¿ä½ç½®ã€
  è¾“å‡ºå°ºå¯¸(åž‚ç›´æ‹¼æŽ¥æ˜¯è¾“å‡ºå®½åº¦ï¼Œæ°´å¹³æ‹¼æŽ¥æ˜¯è¾“å‡ºè°ƒè¯•)ã€æ‹¼æŽ¥é—´è·ã€‚

\subsection{\cs{joinset}}
\begin{function}{\joinset}
  \begin{syntax}
    \cs{joinset} \marg{æ‹¼æŽ¥é€‰é¡¹}
  \end{syntax}

\end{function}

  ç”¨äºŽé€šè¿‡é€—å·åˆ†éš”çš„key-valueæŒ‡å®šæ‹¼æŽ¥ç»“æžœä¸­çš„åŸºçº¿ä½ç½®ã€
  è¾“å‡ºå°ºå¯¸(åž‚ç›´æ‹¼æŽ¥æ˜¯è¾“å‡ºå®½åº¦ï¼Œæ°´å¹³æ‹¼æŽ¥æ˜¯è¾“å‡ºè°ƒè¯•)ã€æ‹¼æŽ¥é—´è·ã€‚

\section{æ‹¼æŽ¥é€‰é¡¹}

\begin{option}{ opt = baseline, desc = {= \meta{t,vc,H,b}}, init=b }
  è®¾ç½®joinboxæˆ–joinfigsæ‹¼æŽ¥ç»“æžœçš„è¾“å‡ºåŸºçº¿ä½ç½®ï¼Œç›®å‰æ”¯æŒï¼š
\end{option}\\
\begin{Description}
  \item |t|--- ç›’å­é¡¶ç«¯æ°´å¹³çº¿ã€
  \item |vc|---ç›’å­æ°´å¹³ä¸­å¿ƒçº¿ã€
  \item |H|---ç›’å­å†…å®¹åŸºçº¿ã€
  \item |b|---ç›’å­åº•ç«¯æ°´å¹³çº¿ã€‚
\end{Description}
\begin{notezh}
  å¯ä»¥çœç•¥\texttt{baseline}é”®åï¼Œä½†å…¶å€¼åªèƒ½å–|t|ã€|vc|ã€|H|å’Œ|b|ã€‚
\end{notezh}

\begin{SideBySideExample}[frame=single,numbers=left,xrightmargin=.45\linewidth,gobble=2]
  é»˜è®¤åŸºçº¿-&gt;\fbox{
    \joinbox{\LaTeX ç§‘æŠ€æŽ’ç‰ˆ}
            {\LaTeX~Typesetting}
  }

  æŒ‡å®šåŸºçº¿-&gt;\fbox{
    \joinbox[baseline=t]{\LaTeX ç§‘æŠ€æŽ’ç‰ˆ}
                        {\LaTeX~Typesetting}
  }

  çœç•¥é”®å-&gt;\fbox{
    \joinbox[vc]{\LaTeX ç§‘æŠ€æŽ’ç‰ˆ}
                        {\LaTeX~Typesetting}
  }
\end{SideBySideExample}

\bigskip

\begin{option}{ opt = outlen, desc = {= \meta{dim}}, init=0pt }
  è®¾ç½®joinboxæˆ–joinfigsæ‹¼æŽ¥ç»“æžœçš„è¾“å‡ºå°ºå¯¸ï¼Œå¯¹äºŽåž‚ç›´æ‹¼æŽ¥ï¼Œè®¾ç½®
  è¾“å‡ºå®½åº¦ï¼Œå¯¹äºŽæ°´å¹³æ‹¼æŽ¥ï¼Œè®¾ç½®è¾“å‡ºé«˜åº¦ã€‚

  è‹¥æŒ‡å®šçš„è¾“å‡ºå°ºå¯¸$\le 0$ï¼Œåˆ™è¡¨ç¤ºä½¿ç”¨è¢«æ‹¼æŽ¥å¯¹è±¡ä¸­çš„æœ€å°å°ºå¯¸è¾“å‡ºã€‚
\end{option}\\
\begin{notezh}
  å¯ä»¥çœç•¥\texttt{outlen}é”®åï¼Œä½†å€¼åªèƒ½å–|dim|å°ºå¯¸æˆ–å°ºå¯¸è¡¨è¾¾å¼ã€‚

  å½“åŒæ—¶çœç•¥\texttt{baseline}é”®åå’Œ\texttt{outlen}é”®åæ—¶ï¼Œå¦‚æžœ
  é”®å€¼ä¸ºä¸æ”¯æŒçš„\texttt{baseline}ï¼Œä¹Ÿæ˜¯ä¸|dim|å°ºå¯¸æˆ–|dim|å°ºå¯¸è¡¨è¾¾å¼ï¼Œ
  åˆ™ä¼šå‡ºé”™ã€‚
\end{notezh}
\begin{SideBySideExample}[frame=single,numbers=left,xrightmargin=.45\linewidth,gobble=2]
  è¾“å‡ºå®½åº¦\fbox{
    \joinbox[outlen=2cm]{\LaTeX ç§‘æŠ€æŽ’ç‰ˆ}
                        {\LaTeX~Typesetting}
  }

  è¾“å‡ºé«˜åº¦\fbox{
    \joinbox*[outlen=0.2cm]{\LaTeX ç§‘æŠ€æŽ’ç‰ˆ}
                        {\LaTeX~Typesetting}
  }

  çœç•¥é”®å\fbox{
    \joinbox[3cm]{\LaTeX ç§‘æŠ€æŽ’ç‰ˆ}
                        {\LaTeX~Typesetting}
  }
\end{SideBySideExample}

\bigskip

\begin{option}{ opt = sep, desc = {= \meta{dim}}, init=0pt }
  è®¾ç½®æ‹¼æŽ¥å¯¹è±¡ä¹‹é—´çš„é—´è·ã€‚
\end{option}\\
\begin{SideBySideExample}[frame=single,numbers=left,xrightmargin=.45\linewidth,gobble=2]
  åž‚ç›´é—´è·\fbox{
    \joinbox[sep=5pt]{\LaTeX ç§‘æŠ€æŽ’ç‰ˆ}
                  {\LaTeX~Typesetting}
  }

  æ°´å¹³é—´è·\fbox{
    \joinbox*[outlen=0.2cm,sep=5pt]
             {\LaTeX ç§‘æŠ€æŽ’ç‰ˆ}
             {\LaTeX~Typesetting}
  }
\end{SideBySideExample}

\section{å¤šç›’å­æ‹¼æŽ¥}

å¯ä»¥ä½¿ç”¨\tn{joinboxes}å‘½ä»¤ä¸€æ¬¡æ‹¼æŽ¥å¤šä¸ªå¯¹è±¡ï¼Œä¸åŒå¯¹è±¡é—´ç”¨é€—å·è¿›è¡Œåˆ†éš”ï¼Œ
å¦‚æžœå¯¹è±¡åŒ…å«é€—å·ï¼Œåˆ™éœ€è¦å°†è¯¥å¯¹è±¡ç½®äºŽ|{}|æž„æˆçš„åˆ†ç»„ä¸­ã€‚

\begin{SideBySideExample}[frame=single,numbers=left,xrightmargin=.45\linewidth,gobble=2]
  \joinboxes[sep=2pt]{%
                      \LaTeX ç§‘æŠ€æŽ’ç‰ˆ,
                      {\LaTeX, Typesetting}
                     }

  \joinboxes*[0.2cm,sep=2pt]{%
                      \LaTeX ç§‘æŠ€æŽ’ç‰ˆ,
                      {\LaTeX, Typesetting}
                     }
\end{SideBySideExample}

\section{åµŒå¥—æ‹¼æŽ¥}

å¯ä»¥åµŒå¥—ä½¿ç”¨\tn{joinbox}ã€\tn{joinboxes}å‘½ä»¤ä»¥å®žçŽ°å¤æ‚å¯¹è±¡æ‹¼æŽ¥ã€‚

\begin{SideBySideExample}[frame=single,numbers=left,xrightmargin=.45\linewidth,gobble=2]
  \joinbox*[outlen=0.04\textheight,sep=-5pt]
        {
          \joinbox[sep=5pt]{\LaTeX ç§‘æŠ€æŽ’ç‰ˆ}
            {\qquad\LaTeX~Typesetting\qquad}
        }{
          \includegraphics[scale=0.2]{expl3}
        }
\end{SideBySideExample}

\section{å›¾åƒæ‹¼æŽ¥}

\subsection{åŽŸå§‹å›¾åƒ}

\begin{center}
  \includegraphics[scale=0.4]{latexframe}\quad
  \includegraphics[scale=0.4]{tl-lion}\quad
  \includegraphics[scale=0.4]{expl3}
\end{center}

\subsection{åž‚ç›´æ‹¼æŽ¥å›¾åƒ}

åž‚ç›´æ‹¼æŽ¥æ—¶ï¼Œå„å¯¹è±¡ä¿æŒç›¸åŒå®½åº¦ã€‚

\begin{SideBySideExample}[frame=single,numbers=left,xrightmargin=.45\linewidth,gobble=2]
  \joinfigs[outlen=3cm, sep=5pt]
           {latexframe, tl-lion, expl3}
\end{SideBySideExample}

\subsection{æ°´å¹³æ‹¼æŽ¥å›¾åƒ}

æ°´å¹³æ‹¼æŽ¥æ—¶ï¼Œå„å¯¹è±¡ä¿æŒç›¸åŒé«˜åº¦ã€‚

\begin{SideBySideExample}[frame=single,numbers=left,xrightmargin=.45\linewidth,gobble=2]
  \joinfigs*[outlen=1.3cm, sep=5pt]
           {latexframe, tl-lion, expl3}
\end{SideBySideExample}

\subsection{åµŒå¥—æ‹¼æŽ¥å›¾åƒ}

å¯ä»¥åµŒå¥—ä½¿ç”¨\tn{joinbox}ã€\tn{joinboxes}æˆ–\tn{joinfigs}å‘½ä»¤ä»¥å®žçŽ°å¤æ‚å›¾åƒæ‹¼æŽ¥ã€‚

\begin{SideBySideExample}[frame=single,numbers=left,xrightmargin=.45\linewidth,gobble=2]
  \joinbox*[0.20\textheight, sep=5pt]
          {
            \joinfigs[0.25\textwidth]
              {latexframe, tl-lion, expl3}
          }{
            \joinfigs[0.25\textwidth]
              {expl3, tl-lion, latexframe}
          }
\end{SideBySideExample}

\begin{SideBySideExample}[frame=single,numbers=left,xrightmargin=.45\linewidth,gobble=2]

  \joinboxes*[0.15\textheight, sep=5pt]{%
          {
            \joinfigs[0.25\textwidth]
              {latexframe, tl-lion, expl3}
          },
          {
            \joinfigs[0.25\textwidth]
              {tl-lion, latexframe,expl3}
          },
          {
            \joinfigs[0.25\textwidth]
              {expl3, tl-lion, latexframe}
          }
      }
\end{SideBySideExample}

\section{å•å¯¹è±¡æ‹¼æŽ¥}

\tn{joinbox}ã€\tn{joinboxes}æˆ–\tn{joinfigs}å‘½ä»¤ä¹Ÿå¯ä»¥å®žçŽ°åª``ä¼ªæ‹¼æŽ¥''
ä¸€ä¸ªå¯¹è±¡ï¼Œæ­¤æ—¶ï¼Œåˆ™å¯ä»¥é€šè¿‡é€‰é¡¹è°ƒæ•´è¾“å‡ºçš„åŸºçº¿ä½ç½®å’Œå¤§å°ã€‚

\begin{SideBySideExample}[frame=single,numbers=left,xrightmargin=.45\linewidth,gobble=2]
  \joinbox{\LaTeX ç§‘æŠ€æŽ’ç‰ˆ}{}

  \joinbox[4cm]{}{\LaTeX ç§‘æŠ€æŽ’ç‰ˆ}

  \joinboxes{\LaTeX ç§‘æŠ€æŽ’ç‰ˆ}
\end{SideBySideExample}

\begin{SideBySideExample}[frame=single,numbers=left,xrightmargin=.45\linewidth,gobble=2]
  åŸºçº¿ä½ç½®-&gt;\joinfigs[vc,4cm]{latexframe}
\end{SideBySideExample}

\section{åž‚ç›´ç›’å­æ‹¼æŽ¥}

ç”±äºŽæ˜¯åŸºäºŽExpl3çš„\tn{hcoffin_set:Nn}å‡½æ•°æž„é€&nbsp;å†…éƒ¨ç›’å­å®žçŽ°æ‹¼æŽ¥çš„ï¼Œå›&nbsp;æ­¤ï¼Œ
å¾…æ‹¼æŽ¥å†…å®¹ä¸­çš„|\\|å’Œ\tn{par}(åŒ…æ‹¬ç©ºè¡Œ)ç­‰æ–­è¡Œå’Œåˆ†æ®µå‘½ä»¤å°†å¤±æ•ˆã€‚æ­¤æ—¶ï¼Œ
å¯ä»¥å…ˆç”¨\tn{parbox}ç­‰å‘½ä»¤æˆ–\env{minipage}ç­‰çŽ¯å¢ƒå…ˆæž„å»ºä¸€ä¸ªåž‚ç›´ç›’å­ï¼Œ
ç„¶åŽå†å°†æž„é€&nbsp;çš„åž‚ç›´ç›’å­ä½œä¸ºä¸€ä¸ªå¯¹è±¡è¿›è¡Œæ‹¼æŽ¥ã€‚

\begin{SideBySideExample}[frame=single,numbers=left,xrightmargin=.45\linewidth,gobble=2]
  \joinbox{
    \parbox{8em}{
      \centering
      \LaTeX ç§‘æŠ€æŽ’ç‰ˆ

      \LaTeX~Typesetting
    }
  }{\includegraphics{expl3}}
\end{SideBySideExample}

\begin{SideBySideExample}[frame=single,numbers=left,xrightmargin=.45\linewidth,gobble=2]
  \joinboxes*{
    {
      \begin{minipage}{8em}
        \centering
        \LaTeX ç§‘æŠ€æŽ’ç‰ˆ

        \LaTeX~Typesetting
      \end{minipage}
    },
    {\includegraphics{expl3}}
  }
\end{SideBySideExample}

\title{
  \pkg{joinbox} package for Joinning Boxs or Figures
  \rlap{\makebox[2.5cm][r]{
    \normalsize $\Longrightarrow$ \color{red}
    \protect\hyperlink{zh}{ä¸­æ–‡ç‰ˆæœ¬}
    \protect\hypertarget{en}{}
  }}
}
\author{Nan Geng \texttt{&lt;nangeng@nwafu.edu.cn&gt;}}
\date{\today\qquad \vers}
\maketitle

\section{Introduction}

\pkg{joinbox} is a box joinning package based on l3coffins developed with Expl3,
which provides the \cs{joinbox}, \cs{joinboxes} and \cs{joinfigs} macros for
vertical or horizontal joinning of boxes. The typout baseline, size and seperated
space can be set up with the options or \cs{joinset} macro.

Boxes can be joined vertically or horizontally. When using vertical joinning, all
boxes to be joined will keep same width, while when using horizontal joined, all
boxes to be joined will keep same height.

The \cs{joinbox}, \cs{joinboxes} and \cs{joinfigs} macros without star are used
for vertical joinning, while the \cs{joinbox*}, \cs{joinboxes*} and
\cs{joinfigs*} with star are used for horizontal joinning.

\section{Interfaces}

\subsection{\cs{joinbox} for Two Contents Joinning }

\begin{function}{\joinbox,\joinbox*}
  \begin{syntax}
    \cs{joinbox} \oarg{options} \marg{content1} \marg{content2}
    \cs{joinbox*} \oarg{options} \marg{content1} \marg{content2}
  \end{syntax}

\end{function}

  Used to join two contents. It requires two arguments \marg{content1} and
  \marg{content2} to specify the objects to be joined. The contents will
  be placed in the coffin respectively and then joined.

  \marg{content1} or \marg{content2} can be null, but both cannot be null at
  the same time.

  In the \oarg{options}, the typeout baseline, typeout size
  (vertical joinning is width, horizontal joinning is height), and 
  joinning seperate spacing can be specified with \textit{key-value}.

\subsection{\cs{joinboxes} for Content Sets Joinning}

\begin{function}{\joinboxes,\joinboxes*}
  \begin{syntax}
    \cs{joinboxes} \oarg{options} \marg{content list}
    \cs{joinboxes*} \oarg{options} \marg{content list}
  \end{syntax}

\end{function}

  Used for joinning multiple contents. This command requires a
  argument\marg{content list} to specify the content to be joined.
  They should be separated by commas, it should. Items which contain
  either spaces or commas should be surrounded by braces.
  At least one content is required.

  In the \oarg{options}, the typeout baseline, typeout size
  (vertical joinning is width, horizontal joinning is height), and
  joinning seperate spacing can be specified with \textit{key-value}.

\subsection{\cs{joinfigs} for Figure Sets Joinning}

\begin{function}{\joinfigs,\joinfigs*}
  \begin{syntax}
    \cs{joinfigs} \oarg{options} \marg{namelist}
    \cs{joinfigs*} \oarg{options} \marg{namelist}
  \end{syntax}

\end{function}

  Used for joinning multiple images. This command requires a argument\marg{namelist}
  to specify the image to be joined. The file name can include a path, 
  and different file names should be separated by commas. 
  At least one image file name is required.

  In the \oarg{options}, the typeout baseline, typeout size
  (vertical joinning is width, horizontal joinning is height), and 
  joinning seperate spacing can be specified with \textit{key-value}.

\subsection{\cs{joinset} for Settings}
\begin{function}{\joinset}
  \begin{syntax}
    \cs{joinset} \marg{options}
  \end{syntax}

\end{function}

  Used to set the typeout baseline, typeout size
  (vertical joinning is width, horizontal joinning is height), and 
  joinning seperate spacing with \textit{key-value}.

\section{Options}

\begin{option}{ opt = baseline, desc = {= \meta{t,vc,H,b}}, init=b }
  Set typeout baseline, currently as follows:
\end{option}\\
\begin{Description}
  \item |t|--- a pole running along the top edge of the bounding box of the coffin;
  \item |vc|---a pole running horizontally through the centre of the coffin half-way between the
bottom and top edges of the bounding box (i.e. the â€œvertical centreâ€);
  \item |H|---a pole running along the baseline of the typeset material contained in the coffin;
  \item |b|---a pole running along the bottom edge of the bounding box of the coffin.
\end{Description}
\begin{noteen}
  In most cases, you can omit the baseline key names and write only it's value. 
  But the value must be t, vc, H or b.
\end{noteen}

\begin{SideBySideExample}[frame=single,numbers=left,xrightmargin=.45\linewidth,gobble=2]
  default-&gt;\fbox{
    \joinbox{Hello \LaTeX}
            {\LaTeX~Typesetting}
  }

  top-&gt;\fbox{
    \joinbox[baseline=t]{Hello \LaTeX}
                        {\LaTeX~Typesetting}
  }

  omit baseline-&gt;\fbox{
    \joinbox[vc]{Hello \LaTeX}
                        {\LaTeX~Typesetting}
  }
\end{SideBySideExample}

\bigskip

\begin{option}{ opt = outlen, desc = {= \meta{dim}}, init=0pt }
  Used to set typeout size, vertical joinning is width and horizontal joinning is height.

  If $outlen\le 0$ï¼Œthen the typeout size is minimal size of all contents.
\end{option}\\
\begin{noteen}
  In most cases, you can omit the outlen key names and write only it's value. 
  But the value must be dimension expression.

  When omitting both the |baseline| key name and the |outlen| key name,
  an error occurs if the key value is an unsupported |baseline| and
  not |dim| or |dim| expression.
\end{noteen}

\begin{SideBySideExample}[frame=single,numbers=left,xrightmargin=.45\linewidth,gobble=2]
  width: \fbox{
    \joinbox[outlen=2cm]{Hello \LaTeX}
                        {\LaTeX~Typesetting}
  }

  height: \fbox{
    \joinbox*[outlen=0.2cm]{Hello \LaTeX}
                        {\LaTeX~Typesetting}
  }

  omit outlen: \fbox{
    \joinbox[2cm]{Hello \LaTeX}
                 {\LaTeX~Typesetting}
  }
\end{SideBySideExample}

\bigskip

\begin{option}{ opt = sep, desc = {= \meta{dim}}, init=0pt }
  Used to set joinning seperate spacing.
\end{option}\\
\begin{SideBySideExample}[frame=single,numbers=left,xrightmargin=.45\linewidth,gobble=2]
  vertical sep: \fbox{
    \joinbox[sep=5pt]{Hello \LaTeX}
                  {\LaTeX~Typesetting}
  }

  horizontal sep: \fbox{
    \joinbox*[outlen=0.2cm,sep=5pt]
             {Hello \LaTeX}
             {\LaTeX~Typesetting}
  }
\end{SideBySideExample}

\section{Multiple Joinning}

The \tn{joinboxes} can join multiple contents.

\begin{SideBySideExample}[frame=single,numbers=left,xrightmargin=.45\linewidth,gobble=2]
  \joinboxes[sep=2pt]{%
                      {Hello, \LaTeX},
                      \LaTeX~Typesetting
                     }

  \joinboxes*[0.2cm,sep=2pt]{%
                      {Hello, \LaTeX},
                      \LaTeX~Typesetting
                     }
\end{SideBySideExample}

\section{Nested Joinning}

The \tn{joinbox} \tn{joinboxes} can be nested to get complex joinning.

\begin{SideBySideExample}[frame=single,numbers=left,xrightmargin=.45\linewidth,gobble=2]
  \joinbox*[outlen=0.04\textheight,sep=-5pt]
        {
          \joinbox[sep=5pt]{Hello \LaTeX}
            {\qquad\LaTeX~Typesetting\qquad}
        }{
          \includegraphics[scale=0.2]{expl3}
        }
\end{SideBySideExample}

\section{Figures Joinning}

\subsection{Original}

\begin{center}
  \includegraphics[scale=0.4]{latexframe}\quad
  \includegraphics[scale=0.4]{tl-lion}\quad
  \includegraphics[scale=0.4]{expl3}
\end{center}

\subsection{Vertical Joinning}

When using vertical joinning, all boxes to be joined will keep same width.

\begin{SideBySideExample}[frame=single,numbers=left,xrightmargin=.45\linewidth,gobble=2]
  \joinfigs[outlen=3cm, sep=5pt]
           {latexframe, tl-lion, expl3}
\end{SideBySideExample}

\subsection{Horizontal Joinning}

When using horizontal joined, all boxes to be joined will keep same height.

\begin{SideBySideExample}[frame=single,numbers=left,xrightmargin=.45\linewidth,gobble=2]
  \joinfigs*[outlen=1.3cm, sep=5pt]
           {latexframe, tl-lion, expl3}
\end{SideBySideExample}

\subsection{Nested Joinning}

The\tn{joinbox}, \tn{joinboxes}, or \tn{joinfigs} macros
can be nested for complex image joinning.

\begin{SideBySideExample}[frame=single,numbers=left,xrightmargin=.45\linewidth,gobble=2]
  \joinbox*[0.20\textheight, sep=5pt]
          {
            \joinfigs[0.25\textwidth]
              {latexframe, tl-lion, expl3}
          }{
            \joinfigs[0.25\textwidth]
              {expl3, tl-lion, latexframe}
          }
\end{SideBySideExample}

\begin{SideBySideExample}[frame=single,numbers=left,xrightmargin=.45\linewidth,gobble=2]
  \joinboxes*[0.15\textheight, sep=5pt]{%
          {
            \joinfigs[0.25\textwidth]
              {latexframe, tl-lion, expl3}
          },
          {
            \joinfigs[0.25\textwidth]
              {tl-lion, latexframe,expl3}
          },
          {
            \joinfigs[0.25\textwidth]
              {expl3, tl-lion, latexframe}
          }
      }
\end{SideBySideExample}

\section{Single Joinning}

The \tn{joinbox}, \tn{joinboxes}, or \tn{joinfigs} macros can also be
used to ``pseudo-joinning'' only one object, in which case the baseline
and size of the output can be adjusted with the options.

\begin{SideBySideExample}[frame=single,numbers=left,xrightmargin=.45\linewidth,gobble=2]
  \joinbox{Hello \LaTeX}{}

  \joinbox[4cm]{}{Hello \LaTeX}

  \joinboxes{Hello \LaTeX}
\end{SideBySideExample}

\begin{SideBySideExample}[frame=single,numbers=left,xrightmargin=.45\linewidth,gobble=2]
  baseline-&gt;\joinfigs[vc,4cm]{latexframe}
\end{SideBySideExample}

\section{Vertical Box Joinning}

Since joinbox is realized by constructing two internal boxes based on
the \tn{hcoffin_set:Nn} Expl3 function, line breaking and new paragraph
macros such as |\\| and \tn{par}(including blank lines) in the content
to be joined will be invalid. In this case, you can first construct a
vertical box using commands such as \tn{parbox} or environments such as
|minipage|, and then join the constructed vertical box as an object.

\begin{SideBySideExample}[frame=single,numbers=left,xrightmargin=.45\linewidth,gobble=2]
  \joinbox{
    \parbox{8em}{
      \centering
      Hello \LaTeX

      \LaTeX~Typesetting
    }
  }{\includegraphics{expl3}}
\end{SideBySideExample}

\begin{SideBySideExample}[frame=single,numbers=left,xrightmargin=.45\linewidth,gobble=2]
  \joinboxes*{
    {
      \begin{minipage}{8em}
        \centering
        Hello \LaTeX

        \LaTeX~Typesetting
      \end{minipage}
    },
    {\includegraphics{expl3}}
  }
\end{SideBySideExample}

\end{documentation}

\end{document}
</pre></body></html>