![当文件丢失时,如何让 \InputIfFileExists 强制结束编译并显示描述性错误消息?](https://linux22.com/image/426033/%E5%BD%93%E6%96%87%E4%BB%B6%E4%B8%A2%E5%A4%B1%E6%97%B6%EF%BC%8C%E5%A6%82%E4%BD%95%E8%AE%A9%20%5CInputIfFileExists%20%E5%BC%BA%E5%88%B6%E7%BB%93%E6%9D%9F%E7%BC%96%E8%AF%91%E5%B9%B6%E6%98%BE%E7%A4%BA%E6%8F%8F%E8%BF%B0%E6%80%A7%E9%94%99%E8%AF%AF%E6%B6%88%E6%81%AF%EF%BC%9F.png)
下面的消息告诉我,Process exited normally
尽管没有任何名为 的文件,但输出的 PDF 文件已损坏dummy
。
因此,我需要出现编译停止错误,并显示有关缺少输入文件的消息。
\documentclass{article}
\begin{document}
\InputIfFileExists{dummy}{}{}
\end{document}
为什么我无法在日志文件中获取预期的以下消息?
错误:缺少文件:dummy
\documentclass{article}
\begin{document}
\InputIfFileExists{dummy}{}{%
% https://tex.stackexchange.com/a/377312/2288
% https://tex.stackexchange.com/a/383190/2288
\typeout{Error: Missing file: #1}
\ExitDueToUndefinedControlSequence
}
\end{document}
答案1
\documentclass{article}
\makeatletter
\newcommand{\thereisnosuchfile}{%
\@latex@error{No file to input}{The file you asked for doesn't exist}%
}
\makeatother
\begin{document}
\InputIfFileExists{dummy}{}{\thereisnosuchfile}
\input{dummy}
\end{document}
有什么区别?第一种情况不需要输入其他文件名。而第二种情况,只要按回车键就可以输入空.tex
文件并退出循环。
! LaTeX Error: No file to input.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.10 ...tIfFileExists{dummy}{}{\thereisnosuchfile}
?
! LaTeX Error: File `dummy.tex' not found.
Type X to quit or <RETURN> to proceed,
or enter new name. (Default extension: tex)
Enter file name: <<hit return>>
(/usr/local/texlive/2020/texmf-dist/tex/latex/tools/.tex File ignored)
\stop
如果在定义的末尾添加\thereisnosuchfile
,则 LaTeX 运行将在按回车键后停止。
一个expl3
版本:
\documentclass{article}
\ExplSyntaxOn
\NewDocumentCommand{\saferinput}{m}
{
\file_if_exist_input:nF { #1 } { \msg_error:nnn { diaa } { no-file } { #1 } }
}
\msg_new:nnnn { diaa } { no-file }
{ No~file~'#1' }
{ The~file~'#1'~you~asked~for~does~not~exist }
\ExplSyntaxOff
\begin{document}
\saferinput{dummy}
\end{document}
控制台输出
! Package diaa Error: No file 'dummy'
For immediate help type H <return>.
...
l.15 \saferinput{dummy}
? h
The file 'dummy' you asked for does not exist
?