为什么图片环境在 Windows 和 Linux 上的表现不同?

为什么图片环境在 Windows 和 Linux 上的表现不同?

这是一个最小的工作示例:

\documentclass{article}

\begin{document}

\newdimen\somelength
\somelength=1pt

\begin{picture}(0,0)
\put(\somelength,0){Some text}
\end{picture}

\end{document}

上述代码在 Linux 上编译成功(在 WSL 2 Ubuntu 和运行 Deepin Linux 的笔记本电脑上),但在 Windows 上编译失败。在 Windows 10 上,编译器给出错误消息:

Illegal unit of measure (pt inserted). \put(\somelength,0){3}

我尝试了 pdfLaTeX 和 XeLaTeX,它们都可以在 Linux 上运行,但在 Windows 上会给出相同的错误消息。我尝试添加

\setlength{\unitlength}{1pt}

在环境之前picture,但我仍然收到错误消息。但如果我改变

\put(\somelength,0){Some text}

\put(3,0){Some text}

它工作得很好。看来该\put命令不接受变量作为其坐标。

[编辑]

事实证明,这个问题实际上是由于我使用了旧版本的 TeX(2020 年 10 月之前)造成的,在那个版本中,只允许使用数字作为坐标,所以

\put(1.2em,1.5ex){text}

会导致错误。不过,在后来的版本中它变得有效(这也是我多次使用它的原因),更新 TeX 可以解决问题。这与不同的操作系统无关。

答案1

事实证明,这个问题实际上是由于我使用了旧版本的 TeX(2020 年 10 月之前)造成的,在那个版本中,只允许使用数字作为坐标,所以

\put(1.2em,1.5ex){text}

会导致错误。不过,在后来的版本中它变得有效(这也是我多次使用它的原因),更新 TeX 可以解决问题。这与不同的操作系统无关。

顺便说一下,在旧版本中,可以使用(从如何找到长度命令(例如, \textwidth)与参考值(例如, 6cm)的比率?

\documentclass{article}

\makeatletter
\newcommand{\@DivideLengths}[2]{%
    \strip@pt\dimexpr\number\numexpr\number\dimexpr#1\relax*65536/\number\dimexpr#2\relax\relax sp\relax
}
\newcommand\LengthToFloat[1]{\@DivideLengths{#1}{1pt}}
\makeatother

\begin{document}\noindent
\setlength{\unitlength}{1pt}
\begin{picture}(0,0)
    \put(\LengthToFloat{12.35pt},0){Some text}
\end{picture}
\end{document}

(虽然我认为命令名称不\LengthToFloat准确——TeX/LaTeX 没有类型系统......)

相关内容