我想知道如何正确地隔开此代码生成的条,以使它们不覆盖文本:
\documentclass[tikz]{standalone}
\begin{document}
\newcommand\programming[1]{
\renewcommand{\programming}{
\begin{tikzpicture}[scale = 0.55, xshift = 1cm]
\foreach [count=\i] \x/\y in {#1} {
\node[above right,minimum height = 0.25cm] at (0,\i+0.35) {\x};
\draw[fill=lightgray,lightgray] (0,\i) rectangle (6,\i+0.4);
\draw[fill=white,materialblue](0,\i) rectangle (\y,\i+0.4);
}
\end{tikzpicture}
}
}
\programming{{C $\textbullet$ C++ $\textbullet$ R / 3}, {Java $\textbullet$ SQL $\textbullet$ \large \LaTeX / 3.5}, {HTML5 $\textbullet$ JS $\textbullet$ Python / 5}}
\end{document}
生产:
答案1
scale
不会改变字体大小。因此,当您scale=...
减少矩形大小并减少它们之间的距离时,矩形会重叠文本,但会保留使用的字体大小。为了解决这个问题,您有更多的可能性,例如:
- 不要使用
scale
和绘制你喜欢的尺寸的图像 - 使用
xscale
仅缩放图像宽度
在第一种情况下,你可以获得如下结果:
例如在第二个中是xscale=0.55
这样的:
稍微简化姆韦是:
\documentclass[tikz, margin=3mm]{standalone}
\colorlet{materialblue}{blue!40}
\colorlet{lightgray}{black!15}
\newcommand\programming[1]{
\begin{tikzpicture}[xscale=0.55]
\foreach \i/\j [count=\k from 0] in {#1} {
\node[above right,
inner sep=2pt] at (0,\k) {\i};
\fill[lightgray] (0,\k) rectangle ( 6,\k-0.4);
\fill[materialblue] (0,\k) rectangle (\j,\k-0.4);
}
\end{tikzpicture}
}
\begin{document}
\programming{{C $\textbullet$ C++ $\textbullet$ R / 3},
{Java $\textbullet$ SQL $\textbullet$ \large \LaTeX / 3.5},
{HTML5 $\textbullet$ JS $\textbullet$ Python / 5}}
\end{document}
答案2
只需删除scale=0.55
,您的图表看起来就很好了。
\documentclass[tikz,border=5mm]{standalone}
\colorlet{materialblue}{blue!40}
\colorlet{lightgray}{black!15}
\newcommand\programming[1]{
\begin{tikzpicture}%[scale = 0.55]
\foreach [count=\j] \x/\y in {#1} {
\node[above right,minimum height = 0.25cm] at (0,\j+0.35) {\x};
\draw[fill=lightgray,lightgray] (0,\j) rectangle (6,\j+0.4);
\draw[fill=white,materialblue](0,\j) rectangle (\y,\j+0.4);
}
\end{tikzpicture}
}
\begin{document}
\programming{{C $\textbullet$ C++ $\textbullet$ R / 3}, {Java $\textbullet$ SQL $\textbullet$ \large \LaTeX / 3.5}, {HTML5 $\textbullet$ JS $\textbullet$ Python / 5}}
\end{document}
原答案,保留scale=0.55
当然,您需要让 y 级别间隔大于 1,例如,您可以通过乘以\i
大于 1 的数字来实现。
\documentclass[tikz]{standalone}
\colorlet{materialblue}{blue!40}
\colorlet{lightgray}{black!15}
\newcommand\programming[1]{
\begin{tikzpicture}[scale = 0.55]
\foreach [count=\i,evaluate=\i as \j using \i*1.5] \x/\y in {#1} {
\node[above right,minimum height = 0.25cm] at (0,\j+0.35) {\x};
\draw[fill=lightgray,lightgray] (0,\j) rectangle (6,\j+0.4);
\draw[fill=white,materialblue](0,\j) rectangle (\y,\j+0.4);
}
\end{tikzpicture}
}
\begin{document}
\programming{{C $\textbullet$ C++ $\textbullet$ R / 3}, {Java $\textbullet$ SQL $\textbullet$ \large \LaTeX / 3.5}, {HTML5 $\textbullet$ JS $\textbullet$ Python / 5}}
\end{document}