为什么 \input 不可扩展?

为什么 \input 不可扩展?

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已经完成其服务时。

相关内容