将源代码动态提取到文件中?

将源代码动态提取到文件中?

我正在尝试为我的学生创建一份编程教材。我的目标是拥有一个环境(例如“ code”),因此,如果我在文件中输入以下内容.tex

\begin{code}{Sample script}
echo "Hi there<br/>";
\end{code}

然后我得到以下信息:

  1. 在我的.tex文件中,好像我写道:

    \begin{figure}        
    \begin{minted}{php}
    echo "Hi there<br/>";
    \end{minted}
    \caption{\href{\thefigure{}.php}{Sample script}}
    \end{figure}
    
  2. 自动生成的\thefigure{}.php文件(即文件名跟在数字计数器数值后面1.3.php)与我的文件位于同一目录中,包含我在和.tex之间编写的代码。\begin{code}\end{code}

我的目标是将所有编程代码提取到.php书中链接的文件中。

那可能吗?

提前非常感谢您!

答案1

我反过来做:包含代码(使用listings包,我相信minted是类似的)并将其包含到文档中。使用键firstlinelastline您可以选择要显示的精确范围。

答案2

我有以下解决方案:

\documentclass[a4paper,11pt]{memoir}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage[spanish,es-lcroman,es-noindentfirst]{babel}
\usepackage[pdftex]{color,graphicx}
\usepackage[minted,skins,breakable]{tcolorbox}
\usepackage[pdftex,unicode,colorlinks]{hyperref}
\usepackage{lipsum}

\chapterstyle{veelo}

\title{Text}
\author{Me}

\newtcblisting[auto counter,number within=section]{php}[1][\url{code/\thetcbcounter.php}]{
    listing engine=minted,%minted style=colorful,
    minted language=php,minted options={fontsize=\small,linenos,numbersep=3mm,startinline},
    listing file=code/\thetcbcounter.php,
    run system command={./linter.sh php \thetcbcounter},
    colback=blue!5!white,colframe=red!75!black,listing only,breakable,
    left=8mm,enhanced,title=\textbf{Listado~\thetcbcounter:} \href{code/\thetcbcounter.php}{#1},
    before title={\hypersetup{urlcolor=blue}},
    overlay={\begin{tcbclipinterior}\fill[red!20!blue!20!white] (frame.south west)
             rectangle ([xshift=8mm]frame.north west);\end{tcbclipinterior}}}

\begin{document}

\frontmatter

\maketitle
\tableofcontents

\mainmatter

\part{Basics}

\chapter{Introduction}

\section{Testing 123}

\lipsum

\begin{php}[Test]
class Products extends CI_Controller
{
    public function index()
    {
        $this->load->view('products/index');
    }
}
\end{php}

\lipsum

\end{document}

内容如下linter.sh

#!/bin/sh

fn_php()
{
    mv $1.php $1
    echo "<?php\n" | cat - $1 > $1.php
    php -l $1.php 2> $1.linter
    php -l $1.php
}

cd code
if [ "$1" = "php" ]
then
    fn_php $2
fi
cd ..

我的解决方案满足了我设定的所有目标。它生成从\begin{php}...\end{php}环境中提取包含内容的外部文件,然后使用 检查其语法php -l。希望这对其他人有所帮助 ;)。

非常感谢您的帮助!

相关内容