我不明白为什么这不起作用。我收到编译错误。我遗漏了什么吗?
\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
再次相乘。\unitlength
1pt
第二个与第一个类似,它将设置\unitlength
为\textwidth
,以便\line
宏可以用作\line(1,0){1}
。
第三个更进一步,将整体设置\unitlength
为,以便其尺寸也可以用长度表示。\textwidth
picture
\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}