Làm cách nào để sử dụng \ input inside \ setlength?

Aug 30 2020

Tôi đang thử cái này:

\documentclass{article}
\usepackage{calc}
\newlength{\foo}
\newcommand{\zzz}{\input{size.txt}}
\setlength{\foo}{2in * \zzz}
\usepackage[paperwidth=\foo,paperheight=\foo]{geometry}
\begin{document}
\end{document}

Nhưng tôi nhận được:

! Missing number, treated as zero.
<to be read again>
                   \let
l.5 \setlength{\foo}{2in * \zzz}

Làm thế nào để khắc phục điều này?

Trả lời

3 JosephWright Aug 30 2020 at 15:13

Lệnh LaTeX \inputkhông thể mở rộng: điều này một phần là do nó kiểm tra 'an toàn' sự tồn tại của tệp và một phần do hỗ trợ cả cú pháp TeX nguyên thủy ( \input <file> ) và LaTeX ( \input{<file>}). Điều này có nghĩa là nếu bạn muốn làm việc bằng cách mở rộng, như bạn làm ở đây, bạn cần sử dụng

\begin{filecontents*}[overwrite]{size.txt}
5%
\end{filecontents*}
\documentclass{article}
\usepackage{calc}
\newlength{\foo}
\makeatletter
\let\primitiveinput\@@input
\makeatother
\newcommand{\zzz}{\primitiveinput size.txt }
\setlength{\foo}{2in * \zzz}
\usepackage[paperwidth=\foo,paperheight=\foo]{geometry}
\begin{document}
\end{document}

Bạn sẽ cần đảm bảo rằng tệp đầu vào của mình không có \parmã thông báo trong đó: Tôi đã thêm một ví dụ bằng cách sử dụng ký tự nhận xét.