无非就是堆盒子嘛,不需要用 tikz
这种大杀器的, 也不需要用 l3coffin
之类的东西,虽然用这两个更加的简单. 代码如下:
\documentclass{article}
\usepackage[showframe, textwidth=18cm]{geometry}
\usepackage{graphicx}
\usepackage{xcolor}
\usepackage{lipsum}
\ExplSyntaxOn\makeatletter
\cs_set_protected:Npn \__item_align:nnn #1#2#3
{% #1:cmd, #2:width, #3:object
\hb@xt@#2{
\tl_map_inline:nn {#3}
{
\seq_put_right:No \l_tmpa_seq {\exp_not:N #1{##1}}
}
\edef\seq@count{\seq_count:N \l_tmpa_seq}
\seq_map_inline:Nn \l_tmpa_seq
{
\edef\item@width{\dim_eval:n {#2/(\seq@count+1)}}
\hskip\item@width\clap{##1}
}\hskip\item@width\hss
}
}
\NewDocumentCommand\itemAlign{O{}mm}
{
\__item_align:nnn {#1}{#2}{#3}
}
\makeatother\ExplSyntaxOff
\parindent0pt
\begin{document}
\itemAlign{\linewidth}{A}\par
\itemAlign{\linewidth}{AA}\par
\itemAlign{\linewidth}{{(A)}{(A)}{(A)}}\par
\vskip6em
\dotfill\par
\def\imageA{\includegraphics[width=5em]{example-image-a}}
\def\imageB{\includegraphics[width=5em]{example-image-b}}
\itemAlign{\linewidth}{\imageA}\par
\itemAlign{\linewidth}{\imageA\imageA}\par
\itemAlign{\linewidth}{\imageB\imageB\imageB}\par
\itemAlign{\linewidth}{\imageB\imageB\imageB\imageB}
\vskip6em
\dotfill\par
\def\parA{\parbox[c]{12em}{\lipsum[1][1-2]}}
\def\parB{\parbox[c]{12em}{\lipsum[1][3-5]}}
\itemAlign[\sffamily]{\linewidth}{\parA}\par
\itemAlign[\color{red}]{\linewidth}{\parA\parA}\par
\itemAlign[\fbox]{\linewidth}{\parB\parB\parB}
\end{document}
编译结果如下:
注意事项:
- 如果你想要更改
\itemAlign
第二个参数中对象的分割方式,可以把\tl_map_inline:nn
换为\clist_map_inline:nn
之类的函数. - 注意空格,任何显示的空格都会被 吞掉, 可以使用
\␣
或~
替代.
问 如何在beamer的一帧中,水平居中放置n个相似的内容?