![为什么 \input 不可扩展?](https://linux22.com/image/245401/%E4%B8%BA%E4%BB%80%E4%B9%88%20%5Cinput%20%E4%B8%8D%E5%8F%AF%E6%89%A9%E5%B1%95%EF%BC%9F.png)
latex.ltx
我在 中找到了 可扩展的\def\input{\@ifnextchar\bgroup\@iinput\@@input}
版本\@@input
。我想知道 是否有 的可扩展版本\input
。
该问题来自我的包中的一个示例alterqcm
。
\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\newcommand*{\square}{\vbox{\hrule\hbox to 6pt{\vrule height 5.2pt \hfil\vrule}\hrule}}%
% \usepackage{fourier} % \square is defined with fourier
\usepackage{alterqcm}
\begin{document}
\begin{alterqcm}
\AQmessage{Soit $h$ la fonction telle que: $h:x\longmapsto x(x-1)$.}
\AQquestion{Par cette fonction: L'image de}{
{4 est 8},
{0 est 2},
{8 est 4},
{2 est 0}
}
\end{alterqcm}
\end{document}
现在可以将问题放入名为“question_1_2.tex”的文件中
\AQmessage{Soit $h$ la fonction telle que: $h:x\longmapsto x(x-1)$.}
\AQquestion{Par cette fonction: L'image de}{
{4 est 8},
{0 est 2},
{8 est 4},
{2 est 0}
}
现在
\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\newcommand*{\square}{\vbox{\hrule\hbox to 6pt{\vrule height 5.2pt \hfil\vrule}\hrule}}%
\usepackage{alterqcm}
\begin{document}
\begin{alterqcm}
\input{question_1_2.tex}
\end{alterqcm}
\end{document}
给出错误\omit misplaced
。我需要写:
\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\newcommand*{\square}{\vbox{\hrule\hbox to 6pt{\vrule height 5.2pt \hfil\vrule}\hrule}}%
\usepackage{alterqcm}
\makeatletter
\newcommand*\ExpandableInput[1]{\@@input#1 }
\makeatother
\begin{document}
\begin{alterqcm}
\ExpandableInput{question_1_2.tex}
\end{alterqcm}
\end{document}
1)是否可以使用另一个宏或版本\input
?
2)为什么我输入
\begin{alterqcm}
...
\end{alterqcm}
里面question_1_2.tex
?
答案1
\input
根据 Lamport 的选择,LaTeX命令必须同时支持
\input{file}
和
\input file
因此有必要以这种方式定义它:当原语\input
以非常特殊的方式扫描其参数时,需要对以下字符进行测试。
如果你不想在你的环境中支持原始语法,那么
\def\input#1{\@@input #1 }
在环境的定义是可以的(除非非常狡猾的用户\input file
在输入的文件中写入),并且不应该给出“放错位置\omit
”的问题。
问题是由于文件\input
以 我理解的 开头\AQmessage
正在执行\multicolumn
:对于 的内核定义来说已经太晚了\input
,因为\multicolumn
必须出现在表格单元格的第一位(\omit
实际上,它是 ,由 生成的第一个标记\multicolumn
);但是执行 业务的代码\input
已经存在了。
为什么当环境在内部时问题没有显示出来question_1_2.tex
?好吧,对齐从文件内部开始,当\input
已经完成其服务时。