Tikz,指定信纸上形状的精确尺寸

Tikz,指定信纸上形状的精确尺寸

当我尝试使用 Tikz 绘制矩形时,是否遇到了一些奇怪的行为。

我想在一张信纸上创建一个 3 英寸 x 5 英寸的圆角矩形,然后可以将其剪下来。下面是我的 MWE。

我知道 Tikz 数学解析器会将所有东西都转换为点。11x8.5 信纸是 612 × 792 点。那么我想知道为什么当我以英寸为单位指定尺寸时,我的矩形会超出页面范围。它们不应该转换为点并完全在页面尺寸范围内吗?

我将非常感激对此事的任何启示。

\documentclass[11pt,letterpaper,landscape]{article}
\usepackage{tikz}
\pgfmathsetmacro{\cardwidth}{5in}
\pgfmathsetmacro{\cardheight}{3in}

\begin{document}
\centering
\begin{tikzpicture}
\draw[style=help lines] (0,0) grid (\cardwidth,\cardheight);
\draw[rounded corners=0.2cm] (0,0) rectangle (\cardwidth,\cardheight);
\end{tikzpicture}
\end{document}

答案1

该命令\pgfmathsetmacro会将您的表达式转换为pt,然后丢弃单位。如果您\show\cardwidth可以在日志文件中看到以下内容:

> \cardwidth=macro:
->361.34999.

此数字在坐标中使用时,会使用 TikZ 基本单位缩放,默认为 1 厘米。您有多种选择:

  1. 不要使用\pgfmathsetmacro,但使用标准 LaTeX 长度(或者如果您需要给出表达式来\setlength使用\pgfmathsetlength)。

    \documentclass[11pt,letterpaper,landscape]{article}
    \usepackage{tikz}
    \newlength\cardwidth
    \newlength\cardheight
    \setlength\cardwidth{5in}
    \setlength\cardheight{3in}
    
    \begin{document}
    \centering
    \begin{tikzpicture}
    \draw[style=help lines] (0,0) grid (\the\cardwidth,\the\cardheight);
    \draw[rounded corners=0.2cm] (0,0) rectangle (\the\cardwidth,\the\cardheight);
    \end{tikzpicture}
    \end{document}
    
  2. 将 TikZ 基本单位更改为1pt

    \documentclass[11pt,letterpaper,landscape]{article}
    \usepackage{tikz}
    \pgfmathsetmacro{\cardwidth}{5in}
    \pgfmathsetmacro{\cardheight}{3in}
    
    \begin{document}
    \centering
    \begin{tikzpicture}[x=1pt,y=1pt]
    \draw[style=help lines] (0,0) grid (\cardwidth,\cardheight);
    \draw[rounded corners=0.2cm] (0,0) rectangle (\cardwidth,\cardheight);
    \end{tikzpicture}
    \end{document}
    
  3. 在恢复保存的尺寸时添加一个明确的单位,即\cardwidth pt而不是\cardwidth

    \documentclass[11pt,letterpaper,landscape]{article}
    \usepackage{tikz}
    \pgfmathsetmacro{\cardwidth}{5in}
    \pgfmathsetmacro{\cardheight}{3in}
    
    \begin{document}
    \centering
    \begin{tikzpicture}
    \draw[style=help lines] (0,0) grid (\cardwidth pt,\cardheight pt);
    \draw[rounded corners=0.2cm] (0,0) rectangle (\cardwidth pt,\cardheight pt);
    \end{tikzpicture}
    \end{document}
    

相关内容