我定义了一个使用 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}