在 fancyvrb verbatim 环境中使用 \input - 连字符问题

在 fancyvrb verbatim 环境中使用 \input - 连字符问题

我已经设置了一个自定义环境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}}%
}

相关内容