Textwidth 和 TikZ

Textwidth 和 TikZ
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usepackage{lipsum}         

\begin{document}
    \lipsum[2]
    \noindent 
    \begin{tikzpicture}
    \draw[red, line width=.2cm] (0,0)--(\textwidth,  0) ;
    \end{tikzpicture} 
\end{document}

在此处输入图片描述

这是代码和图片。

你知道为什么红线溢出吗?

感谢您的帮助。

克莱龍。

答案1

当 PGF(TikZ 是其前端)构建图片时,它会跟踪该图片边界框。TeX 随后会使用此值来确定图形的大小。通常,PGF 只是跟踪所使用的坐标并调整边界框以包含它们。有时,这并不完全正确(贝塞尔曲线往往会得到过大的边界框),但总的来说,这是正确的,而且更准确需要付出更多的努力。然而,所做的一项调整是取行宽考虑到这一点,因为尽管坐标可能是路径的终点,但实际路径会在某些方向上略微超出该坐标。同样,PGF 采用了简单的方法,只需添加当前线宽的一半即可确保边界框足够大。

因此,如果您绘制一条线宽1cm(0,0)到 的路径(5,0),则实际边界框的左下角将为(-.5,-.5),右上角将为(5.5, .5)

现在,即使线条实际上不需要,水平和垂直方向上也会添加额外的半线宽。这就是我所说的 PGF 采用简单方法的意思。

在您的代码中,您的线条是宽度的,.2cm因此.1cm在明显的边界框的所有方向上都添加了一个额外内容,包括左侧和右侧。因此您的图形实际上是\textwidth + .2cm宽度的,因此溢出。

幸运的是,每当 PGF 采取简单选项时,它通常都会提供纠正方法。在这种情况下,您可以向 tikzpicture 发出键trim left和。它们将 x 坐标作为参数(或点,TikZ 只读取该点的 x 坐标),因此或(括号是因为坐标中的逗号)表示“修剪边界框的左侧,使其左侧边缘具有 x 坐标。”(请注意,“修剪”可以trim righttrim left=0trim left={(0,0)}0添加如果给定的坐标位于实际图片的左侧,则空格)。

因此,就您而言,您需要添加trim left=0, trim right=\textwidth

这里有一些代码来说明这一点。我在每张图片的末尾添加了一个矩形,以显示当前有效的边界框,该边界框显示了红线以外的多余区域。在第二个图中,我使用键trim来调整边界框。请注意,这只会影响传递给 TeX 的边界框 - tikzpicture 本身认为边界框没有变化(如果您想从 TikZ 的角度更改它,请use as bounding box在手册中查找键)。

\documentclass{article}
%\url{https://tex.stackexchange.com/q/654551/86}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usepackage{lipsum}         

\begin{document}
\lipsum[2]

    \noindent 
    \begin{tikzpicture}
\draw[red, line width=.2cm] (0,0)--(\textwidth,  0) ;
\draw[overlay] (current bounding box.south east) rectangle (current bounding box.north west); 
    \end{tikzpicture} 

    \noindent 
    \begin{tikzpicture}[trim left=0,trim right=\textwidth]
\draw[red, line width=.2cm] (0,0)--(\textwidth,  0) ;
\draw[overlay] (current bounding box.south east) rectangle (current bounding box.north west); 
    \end{tikzpicture} 

\end{document}

演示 PGF 根据线宽为图片边界框添加的额外空间

感谢 Qrrbrbirlbel 在评论中指出可以在修剪键的参数中仅使用 x 坐标。

答案2

对于段落后的简单行,我宁愿使用\rule如下颜色:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{xcolor}
%--------------- show page layout. don't use in a real document!
\usepackage{showframe}
\renewcommand\ShowFrameLinethickness{0.15pt}
\renewcommand*\ShowFrameColor{\color{red}}
%
\usepackage{lipsum}                             % for dummy text
%---------------------------------------------------------------%

\begin{document}    
    \lipsum[66]
    \textcolor{red}{\rule{\textwidth}{2mm}}
\end{document}

在此处输入图片描述

(红线表示文本区域边框)

相关内容