我有这个代码:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\newcommand{\mywidth}{\linewidth}
\begin{figure}[p]
\begin{tikzpicture}
\draw[ultra thick] (0,0) rectangle (\mywidth,2); %this line produces the overfull \hbox
\node[draw,minimum width=4cm,minimum height=1cm] at (\mywidth-4cm/2,1cm/2) {right lower corner};
\node[draw,minimum width=1cm,minimum height=1cm] at (\mywidth/2,1cm/2) {middle};
\end{tikzpicture}
\end{figure}
\end{document}
这给了我overfull \hbox (1.6pt too wide)
所以我想改变\newcommand{\mywidth}{\linewidth-1.6pt}
但计算中的括号不起作用。
所以我将 every 改为\mywidth/2
where always {(\mywidth/2)}
,{ }
以包围整个表达式。
我的实际情况tikzpicture
要复杂得多,包含许多建立的公式\mywidth
,并且改变所有公式需要大量工作。
有没有更优雅的方法来摆脱这个问题overfull \hbox
,而不破坏图形内的所有对齐?
我可以以某种方式在里面放括号吗\newcommand{\mywidth}{\linewidth-1.6pt}
?
附加问题。当我更改为时会发生什么ultra thick
?very thick
这会在警告中给我一个非常丑陋的数字overfull \hbox
。
答案1
我的建议是:
rectangle
用节点替换你的;- 创建一种指定节点“外部尺寸”的样式;
- 使用锚点来定位你的节点。
\documentclass{article}
\usepackage{tikz}
\tikzset{
exterior size/.style args={#1x#2}{
outer sep=auto,
minimum width={#1-\pgflinewidth},
minimum height={#2-\pgflinewidth}
}
}
\begin{document}
\begin{figure}[p]
\begin{tikzpicture}[nodes=draw]
\path[ultra thick] (0,0) node[exterior size=\linewidth x 2cm, anchor=south west](R){};
\node[red, line width=1.5mm, exterior size=4cm x 1cm, anchor=south east] at (R.south east) {right lower corner};
\node[green, exterior size=4cm x 1cm, anchor=south] at (R.south) {middle};
\end{tikzpicture}
\end{figure}
\end{document}
答案2
您需要从每端减去线宽的一半,并且可以使用锚点来更轻松地定位而无需进行计算。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning} %<- not used here
\begin{document}
\begin{figure}[p]
\begin{tikzpicture}
\draw[ultra thick] (\pgflinewidth/2,0) rectangle (\linewidth-\pgflinewidth/2,2); %this line produces the overfull \hbox
\node[draw,minimum width=4cm,minimum height=1cm,anchor=south east] at (\linewidth,0) {right lower corner};
\node[draw,minimum width=1cm,minimum height=1cm,anchor=south] at (\linewidth/2,0) {middle};
\end{tikzpicture}
\end{figure}
\end{document}