随着 2020 年秋季更新,的行为发生了\input{}
变化。以前,我会有一个主 latex 文档 ( main.tex
),然后在另一个文件 ( table.tex
) 中保存表格内容。重要的是,该文件table.tex
可以位于我的 PC 上的任何位置,因为我可以添加命令\input
经过的目录。所以我的设置如下所示:
main.tex 文件:
\documentclass[11pt, a4paper]{article}
\makeatletter
\providecommand*{\input@path}{}
\g@addto@macro\input@path{{"C:/Users/me/inpath/"}}% \input finds files in this directory
\makeatother
\begin{document}
\begin{tabular}{lll}
\hline
\input{table.tex}
\hline
\end{tabular}
\end{document}
然后文件 table.tex 将被放置在目录“C:/Users/me/inpath/”中:
1 & 2 \\
3 & 4 \\
不幸的是,这种设置不再有效。我的问题是:复制此行为的最佳方法是什么?目前,我的解决方案是将其更改为main.tex
:
\documentclass[11pt, a4paper]{article}
\newcommand{\inpath}{"C:/Users/me/inpath/"}
\makeatletter\let\expandableinput\@@input\makeatother
\begin{document}
\begin{tabular}{lll}
\hline
\expandableinput{\inpath table.tex}
\hline
\end{tabular}
%%% Or alternatively
\begin{tabular}{lll}
\hline
\input \inpath table.tex
\hline
\end{tabular}
\end{document}
有没有更优雅的方法来实现这一点?与 latex fall 更新之前的工作方式类似的解决方案?我可以在其中告诉 TeX 原语\@@input
在哪里查找文件?到目前为止,我发现的信息这里和这里。
答案1
LaTeX\input
在表格中总是很棘手,因为它从来都不可扩展,然后在表格单元格的开头有时无法正常工作,所以它从未得到完全支持。现在这已经中断了,因为代码必须\input
做一些簿记后该文件被读取(之前不存在),这会中断对的扫描\noalign
,然后当\hline
出现时\noalign
,会出现在意想不到的地方。
您可以使用可扩展的\input
' expl3
s\file_full_name:n
来查找\input@path
,并\@@input
以可扩展的方式读取文件。这在某种程度上(但不完全)等同于 LaTeX\input
过去所做的(当然,没有文件挂钩):
\ExplSyntaxOn
\cs_new:Npn \expandableinput #1
{ \use:c { @@input } { \file_full_name:n {#1} } }
\ExplSyntaxOff
这是可编译的示例:
\begin{filecontents}{table.tex}
1 & 2 \\
3 & 4 \\
\end{filecontents}
\documentclass[11pt, a4paper]{article}
\ExplSyntaxOn % providing \expandableinput
\cs_new:Npn \expandableinput #1
{ \use:c { @@input } { \file_full_name:n {#1} } }
\ExplSyntaxOff
\makeatletter % setting your search path
\providecommand*{\input@path}{}
\g@addto@macro\input@path{{"C:/Users/me/inpath/"}}% \input finds files in this directory
\makeatother
\begin{document}
\begin{tabular}{lll}
\hline
% \input{table.tex}
\expandableinput{table.tex}
\hline
\end{tabular}
\end{document}