如何在图片环境中使用 \textwidth(或任何变量)

如何在图片环境中使用 \textwidth(或任何变量)

我不明白为什么这不起作用。我收到编译错误。我遗漏了什么吗?

\documentclass[12pt,a4paper]{article}
\begin{document}
\begin{picture}(0,0)
        \linethickness{1.5pt}
        \put(0,0){\line(1,0){\textwidth}}
\end{picture}
\end{document}

错误出现在 中\textwidth。当我输入十进制值(如 137)时,示例可以正确编译。我想要使用 的原因\textwidth很明显,我想要一条与文本对齐的线。

奇怪的是,变量扩展在 TikZ 环境中确实有效。

答案1

环境picture需要长度的因子\unitlength。包picture重新定义了picture宏来检测长度规范,以进一步支持它们:

\documentclass[12pt,a4paper]{article}

\usepackage{picture}

\begin{document}
\noindent
\begin{picture}(0,0)
        \linethickness{1.5pt}
        \put(0,0){\line(1,0){\textwidth}}
\end{picture}
\end{document}

答案2

\line宏要求长度没有单位,因为它使用\unitlength(默认值:)作为此参数(顺便说一下,1pt也是picture您设置的大小的环境参数)。0pt × 0pt

这里有三种和第四种可能的解决方案来解决这个问题。第一种方法只是将 的 剥离,pt以便\textwidth环境可以将其与的picture再次相乘。\unitlength1pt

第二个与第一个类似,它将设置\unitlength\textwidth,以便\line宏可以用作\line(1,0){1}
第三个更进一步,将整体设置\unitlength为,以便其尺寸也可以用长度表示。\textwidthpicture\textwidth

第四种解决方案只是使用 LaTeX 宏\rule来模仿环境的输出picture

代码

\documentclass[12pt,a4paper]{article}
\usepackage[showframe,pass]{geometry}
\makeatletter
\def\strippt{\strip@pt}
\makeatother
\begin{document}
\noindent
\begin{picture}(\strippt\textwidth,0)%
        \linethickness{1.5pt}%
        \put(0,0){\line(1,0){\strippt\textwidth}}
\end{picture}

\noindent
\begin{picture}(\strippt\textwidth,0)%
        \linethickness{1.5pt}%
        \put(0,0){\setlength{\unitlength}{\textwidth}\line(1,0){1}}
\end{picture}

\noindent\begingroup\setlength{\unitlength}{\textwidth}%
\begin{picture}(1,0)%
        \linethickness{1.5pt}%
        \put(0,0){\line(1,0){1}}
\end{picture}
\endgroup

\noindent\rule[-.75pt]{\textwidth}{1.5pt}
\end{document}

输出

在此处输入图片描述

相关内容