如何从外部 tex 文件包含突出显示的源代码?

如何从外部 tex 文件包含突出显示的源代码?

我已尝试在此最小化我的场景。基本上,我想通过 beamer 类从外部 tex 文件中调用每段突出显示的代码。

有两个 .tex 文件

  • 代码
  • 主文本

我的目标是将代码存储在 code.tex 中,并根据标题在 main.tex 中调用它们,以便整理所有内容。如果我在 main.tex 上调用 \testCode{},则会出现各种问题。有什么想法可以处理这个过程吗?

代码

\def\testCode{
    \begin{lstlisting}[style=CStyle]
        #include <stdio.h>
        int main(void)
        {
           printf("Hello World!"); 
        }
    \end{lstlisting}
}

\def\testText{
    Test input text
}

主文本

\documentclass{beamer}

\mode<presentation>
{
  \usetheme{Madrid}         % or try Darmstadt, Madrid, Warsaw, ...
  \usecolortheme{beaver}    % or try albatross, beaver, crane, ...
  \usefonttheme{serif}      % or try serif, structurebold, ...
  \setbeamertemplate{navigation symbols}{}
  \setbeamertemplate{caption}[numbered]
} 


\usepackage{xcolor}
\usepackage{listings}

\definecolor{mGreen}{rgb}{0,0.6,0}
\definecolor{mGray}{rgb}{0.5,0.5,0.5}
\definecolor{mPurple}{rgb}{0.58,0,0.82}
\definecolor{backgroundColour}{rgb}{0.95,0.95,0.92}

\lstdefinestyle{CStyle}{
    backgroundcolor=\color{backgroundColour},   
    commentstyle=\color{mGreen},
    keywordstyle=\color{magenta},
    numberstyle=\tiny\color{mGray},
    stringstyle=\color{mPurple},
    basicstyle=\footnotesize,
    breakatwhitespace=false,         
    breaklines=true,                 
    captionpos=b,                    
    keepspaces=true,                 
    numbers=left,                    
    numbersep=5pt,                  
    showspaces=false,                
    showstringspaces=false,
    showtabs=false,                  
    tabsize=2,
    language=C
}

\input{code.tex}

\begin{document}
\begin{frame}{title here}
    \testText{}
    \testCode{}
\end{frame}
\end{document}

答案1

如果这对您来说是一个解决方案,我宁愿将我的代码放在其专用文件(例如,code.c)中,然后使用此命令:

\lstinputlisting[style=CStyle]{code.c}

否则,这里有一个答案:\newcommand 内的环境

编辑

您还可以使用命令的可选参数firstline和将同一文件中的多个代码包含在文档的不同位置。您还可以应用不同的样式,这样您就可以在同一源文件中混合不同的语言,无论您出于什么原因想要这样做。lastline\lstinputlisting

我先给你看结果。然后按照代码操作。

渲染效果

问题的主要代码,并扩展了建议的答案:

\documentclass{beamer}

\mode<presentation>
{
    \usetheme{Madrid}         % or try Darmstadt, Madrid, Warsaw, ...
    \usecolortheme{beaver}    % or try albatross, beaver, crane, ...
    \usefonttheme{serif}      % or try serif, structurebold, ...
    \setbeamertemplate{navigation symbols}{}
    \setbeamertemplate{caption}[numbered]
} 

\usepackage{xcolor}
\usepackage{listings}

\definecolor{mGreen}{rgb}{0,0.6,0}
\definecolor{mGray}{rgb}{0.5,0.5,0.5}
\definecolor{mPurple}{rgb}{0.58,0,0.82}
\definecolor{backgroundColour}{rgb}{0.95,0.95,0.92}

\lstdefinestyle{CStyle}{
    backgroundcolor=\color{backgroundColour},   
    commentstyle=\color{mGreen},
    keywordstyle=\color{magenta},
    numberstyle=\tiny\color{mGray},
    stringstyle=\color{mPurple},
    basicstyle=\footnotesize,
    breakatwhitespace=false,         
    breaklines=true,                 
    captionpos=b,                    
    keepspaces=true,                 
    numbers=left,                    
    numbersep=5pt,                  
    showspaces=false,                
    showstringspaces=false,
    showtabs=false,                  
    tabsize=2,
    language=C
}
\lstdefinestyle{LatexStyle}{
    language=[LaTeX]TeX
}

\begin{document}
    \begin{frame}{title here}
        A C code:
        \lstinputlisting[style=CStyle,firstline=2,lastline=7]{code.tex}

        A \LaTeX\ code from same file:
        \lstinputlisting[style=LatexStyle,firstline=10,lastline=10]{code.tex}
    \end{frame}
\end{document}

包含要包含在文档中的不同代码片段的源文件:

% First code: C
#include <stdio.h>

int main(void)
{
    printf("Hello World!"); 
}

% Second code: LaTeX
\newcommand{\testText}{Test input text}

享受!

相关内容