节点文本宽度超出边距

节点文本宽度超出边距

我定义了一个使用 tikz 创建定义框的命令。但是,即使我将文本宽度设置为\textwidth,框的右侧部分也超出了边距。设置\inner xsep = 0pt确实解决了我的问题,但文本和左侧的蓝色条没有任何分离。设置后我找不到将文本向右移动的方法\inner xsep = 0pt。还有其他方法可以解决我的问题吗?

\documentclass[12pt]{book}
\usepackage{geometry}
\geometry{margin=1in, a4paper}

\usepackage[utf8]{inputenc}
\usepackage{tikz}
\let\svtikzpicture\tikzpicture
\def\tikzpicture{\noindent\svtikzpicture}
\usepackage[T1]{fontenc}
\usepackage{fancyhdr}
\pagestyle{fancy}

\tikzset{definitions/.style={text width=\textwidth}}
\definecolor{defblue}{RGB}{50,100,168}

\usetikzlibrary{positioning, backgrounds,fit,calc}

\newcommand{\altdef}[3][2]{
\begin{tikzpicture}
\node[definitions, name=defin]{ {\textsf{\color{defblue}\textbf{{Definition}} (#2)\textbf{.}}}
#3};
\begin{scope}[on background layer]
\node[name=bg, fill=gray!5, fit={(defin)}] {};
\filldraw[fill=blue, draw=blue] (bg.north west) rectangle ($(bg.south west)+(2px,0cm)$);
\end{scope}
\end{tikzpicture}
}

\begin{document}

\altdef{Scalar}{A quantity whose value may be represented by a single real number. \underline{Ex:} mass, volume \ldots
}

\end{document}

在此处输入图片描述

答案1

主要问题来自fit节点。
当您编写此代码时:\node[name=bg, fill=gray!5, fit={(defin)}] {};没有任何inner sep,您将创建一个围绕该defin节点的节点,具有默认的内部分隔符,因此右侧会出现不必要的额外宽度。添加inner sep=0pt工作正常。但我看不出添加此节点有什么意义。您可以填充您的defin节点并在其顶部绘制蓝色矩形,就像这样(参见代码)。

现在对于文本宽度本身,最好根据您设置的内部分隔符来计算。因此有以下行:\tikzset{definitions/.style={inner sep=1em,text width=\textwidth-2em}}。您可以根据需要调整左内部分隔符。

节点不再超出边界

\documentclass[12pt]{book}
\usepackage{lipsum}
\usepackage{geometry}
\geometry{margin=1in, a4paper}

\usepackage[utf8]{inputenc}
\usepackage{tikz}
\let\svtikzpicture\tikzpicture
\def\tikzpicture{\noindent\svtikzpicture}
\usepackage[T1]{fontenc}
\usepackage{fancyhdr}
\pagestyle{fancy}

\tikzset{definitions/.style={inner sep=1em,text width=\textwidth-2em}}
\definecolor{defblue}{RGB}{50,100,168}

\usetikzlibrary{positioning, backgrounds,fit,calc}

\newcommand{\altdef}[3][2]{
\begin{tikzpicture}
    \node[definitions, name=defin,fill=gray!5]{ {\textsf{\color{defblue}\textbf{{Definition}} (#2)\textbf{.}}}
    #3};
    \filldraw[fill=blue, draw=blue] (defin.north west) rectangle ($(defin.south west)+(2px,0cm)$);
\end{tikzpicture}
}


\begin{document}

    \altdef{Scalar}{\lipsum[1]}

\end{document}

相关内容