在以下示例中,双线稍微向右移动了一点:
\documentclass[12pt]{article}
\usepackage{tikz}
\begin{document}
\begin{tabular}{ll}
\tikz[baseline=-0.5ex]\draw[thick](0,0)--(3ex,0);&test\\ \tikz[baseline=-0.5ex]\draw[thick,double](0,0)--(3ex,0);&test\\
\end{tabular}
\end{document}
在我看来这看起来像是一个错误,但我该如何纠正它呢?
添加
双倍距离值越大,偏移量越大。
答案1
按设计状态。
当 TikZ 计算出一条路径对一张图片的贡献时,它会尽力确保整个可见的路径包含在结果框中。由于实际路径由渲染器完成,因此它必须进行一些猜测来确定框应该有多大。此外,计算实际边界框并不总是那么容易(贝塞尔曲线就是一个例子)。即使它对实际路径的边界框有了概念,但这可能还不够,因为路径只是无穷小路径,而可见路径有宽度。由于这些测量本质上有些粗糙,因此 PGF 只需将线宽的一半添加到边界框的每一侧以考虑这个额外的部分。
观察这一效果的一种方法是使用附加选项 重复每次绘图line cap=rect
。这会将线条两端的宽度延长一半,但不会改变边界框,因为尺寸调整机制已经考虑到了这种延长的可能性。
如果您想要强制使用特定的边界框,您应该事先用命令指定它\useasboundingbox
。
\documentclass[12pt]{article}
%\url{http://tex.stackexchange.com/q/130456/86}
\usepackage{tikz}
\begin{document}
\begin{tabular}{ll}
\fbox{\tikz[baseline=-0.5ex]\draw[thick](0,0)--(3ex,0);}&test\\
\fbox{\tikz[baseline=-0.5ex]\draw[thick,line cap=rect](0,0)--(3ex,0);}&test\\
\fbox{\tikz[baseline=-0.5ex]\draw[thick,double](0,0)--(3ex,0);}&test\\
\fbox{\tikz[baseline=-0.5ex]\draw[thick,double,line cap=rect](0,0)--(3ex,0);}&test\\
\fbox{\tikz[baseline=-0.5ex]\draw[thick,line width=2.2pt](0,0)--(3ex,0);}&test\\
\fbox{\tikz[baseline=-0.5ex]\draw[thick,line width=2.2pt,line cap=rect](0,0)--(3ex,0);}&test\\
\fbox{\tikz[baseline=-0.5ex]\draw[thick,double](0,0)--(3ex,0);}&test\\
\fbox{\tikz[baseline=-0.5ex]\draw[thick,double,line cap=rect](0,0)--(3ex,0);}&test\\
\end{tabular}
\end{document}
因此,虽然人们可以将其归类为不良行为,要完全正确,需要比我怀疑 PGF 想要做的更多的计算,当然也比最多人们想要!
更新 2013-08-29这是一种实现(我认为)您想要的直接方法:仅使用坐标来计算边界框而不是线宽。 它利用了您想要分离的两个部分已经在代码中分离的事实:在构建路径时处理坐标,并且在构建路径时边界框会不断进行相应的调整,但是仅在使用路径时才会将线宽添加到边界框。 因此,以下在正在构建的路径和正在使用的路径之间插入一些代码以关闭边界框的计算。 已经有一个钩子可以在相关点插入代码:命令\tikz@addmode
,并且更新边界框由条件决定\ifpgf@relevantforpicturesize
。
\documentclass{article}
%\url{http://tex.stackexchange.com/q/130456/86}
\usepackage{tikz}
\makeatletter
\tikzset{
only coordinates are relevant/.is choice,
only coordinates are relevant/.default=true,
only coordinates are relevant/true/.code={%
\tikz@addmode{\pgf@relevantforpicturesizefalse}},
only coordinates are relevant/false/.code={%
\tikz@addmode{\pgf@relevantforpicturesizetrue}}
}
\makeatother
\begin{document}
\begin{tikzpicture}
\draw[line width=1cm,red,only coordinates are relevant] (0,0) rectangle (5,5);
\draw (current bounding box.south east) rectangle (current bounding box.north west);
\end{tikzpicture}
\end{document}
截屏:
可能需要进行一些调整才能使其与前置和后置操作配合使用:我还没有对其进行广泛的测试。
答案2
实际上,这是内部框填充造成的错觉,如果您保留路径但稍后进行绘制,则问题会消失,这支持了关于内部框填充取决于纵横比(什么?)线宽的诊断。如果我将单线的线宽设置为等于双线的线宽,那么我们就会得到正确的对齐。
我同意这可以视为一个错误。同样,一个临时修复方法是发布不带绘图的路径,但将实际绘图覆盖在上面。两者都在下面给出。
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{backgrounds}
\tikzset{every picture/.style={
baseline=-0.5ex,
show background rectangle,
%execute at begin picture={},
%execute at end picture={}
}
}
\begin{document}
\begin{tabular}{ll}
\tikz{\draw[line width=2.2pt](0,0)--(3ex,0);}&test\\
\tikz{\draw[thick,double](0,0)--(3ex,0);}&test\\
\tikz{\path[postaction={overlay, double,draw,thick}](0,0)--(3ex,0);}&test\\
\tikz{\path[postaction={overlay, draw, thick}](0,0)--(3ex,0);}&test
\end{tabular}
\end{document}