我已经设置了一个自定义环境DefineVerbatimEnvironment
。在该环境中,我想要\input{}
文件,一切运行正常,直到其中一个文件包含连字符。以下是演示该问题的示例:
\documentclass{article}
\usepackage{fancyvrb}
\DefineVerbatimEnvironment{terminal}{Verbatim}{commandchars=\\\{\}}
\begin{document}
\begin{terminal}
\input{some-file}
\end{terminal}
\end{document}
如果我尝试,\input{file}
文件内容就会如我所料显示在 verbatim 环境中。但如果我尝试,\input{some-file}
我会收到以下错误:
! LaTeX Error: File `more\unhbox \voidb@x \kern \z@ \char `\discretionary {-}{}{}input.tex' not found.
显然,我的连字符被翻译成了\unhbox ... {-}{}{}
——我怎样才能阻止这种情况发生?
答案1
您只需要将其移动到-
安全的地方,例如:
\documentclass{article}
\usepackage{fancyvrb}
\DefineVerbatimEnvironment{terminal}{Verbatim}{commandchars=\\\{\}}
\newcommand\somefile{\input{some-file}}
\begin{document}
\begin{terminal}
\somefile
\end{terminal}
\end{document}
答案2
这主要取决于您想要输入的内容,但无论您是否需要在输入文件中解释 TeX 命令,\VerbatimInput
似乎都可以这样做:
\begin{filecontents*}{v-inp.sh}
#!/bin/env bash
echo "${PATH}"
exit
\end{filecontents*}
\begin{filecontents*}{v-inp.tex}
\textcolor{red}{abc}def
\end{filecontents*}
\documentclass{article}
\usepackage{color}
\usepackage{fancyvrb}
\begin{document}
\VerbatimInput{v-inp.sh}
\bigskip
\VerbatimInput[commandchars=\\\{\}]{v-inp.tex}
\end{document}
请注意,您的施工
\begin{terminal}
\input{\hyphenate{v}{inp.sh}
\end{terminal}
不会给出预期的结果 break。另一方面,如果你想输入一个 TeX 文件,将其视为“几乎逐字逐句”,你只需要这个alltt
包:
\documentclass{article}
\usepackage{color}
\usepackage{alltt}
\begin{document}
\begin{alltt}
\expandafter\input\expandafter{\detokenize{v-inp.tex}}
\end{alltt}
也可以。你可以定义一个更好的命令:
\newcommand{\vinput}[1]{%
\expandafter\input\expandafter{\detokenize{#1}}%
}