我正在尝试实现关键字系统,通过使用 将关键字包裹在框中tikz
。我为框定义了一个新命令,但我无法控制框之间的间距,我希望相邻框之间的间距相等,而不管框内的关键字长度如何。在下面的代码中,我使用了\hfill
,但我想用更合适、更紧凑的间距替换它,例如0.2cm
,而不是将它们分散在整行上。
代码:
\documentclass[12pt]{article}
%\usepackage[defaultfam,tabular,lining]{montserrat}
\usepackage[sfdefault]{roboto}
\usepackage[top=1cm, left=0.5cm, right=0.5cm, bottom=0.5cm]{geometry}
\usepackage{tikz}
\usetikzlibrary{shapes.misc}
\newcommand\mybox[2][]{\tikz[overlay]\node[fill=blue!20,text depth=.5ex,text height=2ex,draw=black,inner sep=3pt, anchor=text, rectangle, rounded corners=1mm,#1] {\small #2};\phantom{#2}}
\begin{document}
\noindent This is the beginning of the text\\[5pt]
\mybox[fill=gray!50]{keyw1}\hfill
\mybox[fill=gray!50]{kword2}\hfill
\mybox[fill=gray!50]{keyword3}\hfill
\end{document}
我的问题是
- 如何控制盒子之间的间距?
- 我怎样才能使第一个框从与其上方的文本左侧相同的距离开始(框内的文本从相同的距离开始,但框本身从文本的左边稍微开始)?
答案1
去掉了[overlay]
、anchor=text
和\phantom{#2}
。然后我添加了\hspace{\gapwd}\ignorespaces
。
虽然我在这里没有使用它,但我强烈推荐\raggedright
,因为没有连字点,并且我们也没有将间隙设置为可拉伸。
我定义\gapwd
为.2cm
,它是可以改变的。
\documentclass[12pt]{article}
%\usepackage[defaultfam,tabular,lining]{montserrat}
\usepackage[sfdefault]{roboto}
\usepackage[top=1cm, left=0.5cm, right=0.5cm, bottom=0.5cm]{geometry}
\usepackage{tikz}
\usetikzlibrary{shapes.misc}
\newcommand\gapwd{.2cm}
\newcommand\mybox[2][]{\tikz\node[fill=blue!20,text depth=.5ex,
text height=2ex,draw=black,inner sep=3pt, rectangle,
rounded corners=1mm,#1] {\small #2};\hspace{\gapwd}\ignorespaces}
\begin{document}
\noindent This is the beginning of the text\\[5pt]
\mybox[fill=gray!50]{keyw1}
\mybox[fill=gray!50]{kword2}
\mybox[fill=gray!50]{keyword3}
\mybox[fill=gray!50]{keyword3}
\mybox[fill=gray!50]{keyword4}
\mybox[fill=gray!50]{kd5}
\mybox[fill=gray!50]{kword6}
\mybox[fill=gray!50]{keyw7}
\mybox[fill=gray!50]{keyw1}
\mybox[fill=gray!50]{kword2}
\mybox[fill=gray!50]{keyword3}
\mybox[fill=gray!50]{keyword3}
\mybox[fill=gray!50]{keyword4}
\mybox[fill=gray!50]{kd5}
\mybox[fill=gray!50]{kword6}
\mybox[fill=gray!50]{keyw7}
\end{document}
答案2
另一种方法是使用tcboxes
而不是TiKZ
节点。框之间的空间可以用right skip
选项来固定。
\documentclass[12pt]{article}
\usepackage[sfdefault]{roboto}
\usepackage[top=1cm, left=0.5cm, right=0.5cm, bottom=0.5cm]{geometry}
\usepackage[most]{tcolorbox}
\newtcbox{\myk}[1][]{on line, size=small, before upper=\vphantom{ky}, right skip=2mm, #1}
\begin{document}
\noindent This is the beginning of the text\\[5pt]
\begin{raggedright}
\myk{keyw1}
\myk{kword2}
\myk{keyword3}
\myk{keyword3}
\myk{keyword4}
\myk{kd5}
\myk{kword6}
\myk{keyw7}
\myk[colback=red!30]{keyw1}
\myk{kword2}
\myk{keyword3}
\myk{keyword3}
\myk{keyword4}
\myk{kd5}
\myk{kword6}
\myk{keyw7}
\end{raggedright}
\end{document}