原答案,保留scale=0.55

原答案,保留scale=0.55

我想知道如何正确地隔开此代码生成的条,以使它们不覆盖文本:

\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}

相关内容