输入包含“#”、“_”等特殊字符的文件,无需使用外部包

输入包含“#”、“_”等特殊字符的文件,无需使用外部包

我知道这是一个奇怪而愚蠢的问题,但我确实需要实现这一点。
我有一个文件,其中包含一些字符,例如“#”,“_”。例如,该文件是:

abc_def#gh

我需要输入(或将文件显示到 pdf 中)到 latex,而无需使用外部就像verbatim。只需使用内置的 latex 即可实现这一点。

我需要某种函数来替换特殊字符或以\verb样式显示它而不会出现任何错误。

一些限制

  • 我也无法在 latex 中运行 Bash 脚本。因为-no-shell-escape
  • 无法通过\usepackage命令使用外部包

答案1

如果您不想使用 LaTeX 软件包,那么以下解决方案根本不需要 LaTeX。这里只使用 TeX 基元和 Plain TeX 基本宏。但该解决方案在 LaTeX 中也有效,因为提到的 Plain TeX 宏\dospecials\obeylines也在\obeyspacesLaTeX 内核中实现。

\def\inputverbatim #1{\bgroup
  \def\do##1{\catcode`##1=12 }\dospecials
  \def\par{\endgraf\noindent\null}\obeylines\obeyspaces
  \tt \noindent
  \input{#1}
  \egroup
}

%%% test:
\inputverbatim {file.txt}

答案2

在此处输入图片描述

很难理解为什么你不能使用\verbatiminput

但如果myfile2

line 1
   abc_def#gh
line 3
   $$$$$$
line 5

然后

\documentclass{article}

\makeatletter
\edef\qqq#1{%
\noexpand\begin{verbatim}
\noexpand\input{#1}%
\@backslashchar end\string{verbatim\string}}
\makeatother

\begin{document}


\qqq{myfile2}

\end{document}

但是如果verbatim.sty无法使用,article.cls也不应该可用,两者都是核心 latex 版本的一部分。所以我不明白任何 latex 文档如何工作。

答案3

我建议listingsutf8按如下方式打包和使用它:

\lstinputlisting[输入编码=utf8/cp1250,框架=hnone,数字=none,扩展字符=true]{source.txt}

第二种选择是使用\detokenize类似命令

\detokenize{abc_def\#gh}

但正如您所见,# 必须用反斜杠引起来。

答案4

我可能会这样做:

%-----------------------------------------------------------------
% Let's create an external text file  SomeFile.tex  which is to be 
% input verbatim:
%-----------------------------------------------------------------
\begin{filecontents*}{SomeFile.tex}
Line 1: abc_def#gh
Line 2: $$$_def#gh
Line 3: %%%_def#gh

\end{verbatim}

Line 7: bla~~~bla
\end{filecontents*}
%-----------------------------------------------------------------


\documentclass{article}

\newcommand\Exchange[2]{#2#1}

\begin{document}

Text

\Exchange{\input{SomeFile.tex}}{\begin{verbatim}}\end{verbatim}

Text

\end{document}

在此处输入图片描述



如果你不希望以打字机模式排版,而只是希望 TeX 将特殊字符视为在排版时出现在文本中的普通字符,你可以尝试如下操作:

%-----------------------------------------------------------------
% Let's create an external text file  SomeFile.tex  which is to be 
% input:
%-----------------------------------------------------------------
\begin{filecontents*}{SomeFile.tex}
Line 1: $&#^_~%\{}
Line 2: $&#^_~%\{}
\end{filecontents*}
%-----------------------------------------------------------------

\documentclass{article}

\makeatletter
\@ifdefinable\secondwhentypesetting{\protected\def\secondwhentypesetting#1#2{#2}}
\newcommand\unexpandedwhennottypesetting[1]{\noexpand\unexpandedwhennottypesetting{\unexpanded{#1}}}
\DeclareRobustCommand\myactivateasnospecial{\@dblarg\@myactivateasnospecial}%
\newcommand\@myactivateasnospecial[2][]{%
  \begingroup\lccode`\~=`#2\relax
  \lowercase{\endgroup\def~}{\secondwhentypesetting\unexpandedwhennottypesetting{#1}}%
  \catcode`#2=13\relax
}%
\makeatother

\DeclareRobustCommand\TypesetFileWithSpecialsAsOrdinaryCharacters[1]{%
  \begingroup
  % switch special characters %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  \let\do=\myactivateasnospecial
  \do\$%
  \do\&%
  \do\#%
  \do[\ifmmode\hat{}\else\textasciicircum\fi]\^%
  \do[\ifmmode\_\else\textunderscore\fi]\_%
  \do[\ifmmode\sim\else\textasciitilde\fi]\~%
  \do\%%
  \do[\csname\ifmmode\else text\fi backslash\endcsname]\\%
  \do\{%
  \do\}%
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  \input{#1}%
  \endgroup
}%

\begin{document}

\TypesetFileWithSpecialsAsOrdinaryCharacters{SomeFile.tex}

$$\TypesetFileWithSpecialsAsOrdinaryCharacters{SomeFile.tex}$$

\end{document}

在此处输入图片描述

相关内容