精美的代码环境

精美的代码环境

我正在写一个关于 LaTeX 的小教程。所以我想插入一些代码并获得右边的结果。

我快完成了。我得到了想要的输出,但我希望得到更清晰的结果,也就是更容易输入代码。

考虑以下 MWE:

\documentclass[draft,11pt,a4paper]{article}
\usepackage{showexpl}

\usepackage[section]{minted}

\newminted{tex}{
    bgcolor=bg,
    gobble=1,
    linenos=true,
    firstline=1,
    firstnumber=1,
    fontfamily=courier,
    fontsize=\footnotesize,
    numberblanklines=false,
    numbersep=3mm,
    xleftmargin=6mm,
    xrightmargin=5mm,
}

\definecolor{bg}{rgb}{0.95,0.95,0.95}


\usepackage{lipsum}

\newlength\ideal
\setlength{\ideal}{.5\linewidth - 2\fboxsep -2\fboxrule}

\begin{document}

\lipsum[4]
\begin{listing}
\begin{texcode}
 \begin{equation}
  \frac{3}{2}=\frac{a}{b}
 \end{equation}
\end{texcode}
\end{listing}
\lipsum[4]
\begin{listing}
\begin{minipage}{\ideal}
\begin{texcode}
 \begin{equation}
  \frac{3}{2}=\frac{a}{b}
 \end{equation}
\end{texcode}
\end{minipage}
\hfill
\begin{minipage}{\ideal}
 \begin{equation}
  \frac{3}{2}=\frac{a}{b}
 \end{equation}
\end{minipage}
\caption{title}
\end{listing}
\lipsum[4]

\end{document}

输出为:

在此处输入图片描述

我想知道这是否是正确的方法或者是否有可能避免输入两次代码。

我想定义一个环境myenv,然后使用以下命令获得与清单 0.1 相同的结果

\begin{myenv}
 \begin{equation}
  \frac{3}{2}=\frac{a}{b}
 \end{equation}
\end{myenv}

而且标题也是可选的。我尝试过,showexpl但到现在还没有成功。

编辑

我刚刚发现这个话题但那里的结果并没有产生右边的输出。

答案1

你知道吗tcolorbox? 它被开发用于帮助格式化 LaTeX 教程。

下一个代码使用默认设置,从那里您可以自定义几乎所有内容。

\documentclass[11pt,a4paper]{article}

\usepackage[most]{tcolorbox}

\usepackage{lipsum}

\begin{document}

\lipsum[4]

\begin{tcblisting}{listing only}
 \begin{equation}
  \frac{3}{2}=\frac{a}{b}
 \end{equation}
\end{tcblisting}
\lipsum[4]
\begin{tcblisting}{listing side text}
 \begin{equation}
  \frac{3}{2}=\frac{a}{b}
 \end{equation}
\end{tcblisting}
\lipsum[4]

\end{document}

在此处输入图片描述

答案2

这只是对 Konrad 答案的改进,更加符合您的规格。

在此处输入图片描述

\documentclass{article}

\usepackage{minted}

\definecolor{bg}{rgb}{0.95,0.95,0.95}

% conditional caption (only gets printed if the argument is not empty)
\newcommand\condcaption[1]{%
  \if\relax\detokenize{#1}\relax
  \else
    \caption{#1}
  \fi
}

\newenvironment{myenv}[1]
  {%
    \listing
      \condcaption{#1}
      \VerbatimEnvironment
        \begin{VerbatimOut}{example.out}%
  }{%
        \end{VerbatimOut}%
        \vspace{1ex}%
        \setlength{\parindent}{0pt}%
              \begin{minipage}{0.5\linewidth}%
                \inputminted[
                    resetmargins,
                    bgcolor          = bg,
                    gobble           = 1,
                    linenos          = true,
                    firstline        = 1,
                    firstnumber      = 1,
                    fontfamily       = courier,
                    fontsize         = \footnotesize,
                    numberblanklines = false,
                    numbersep        = 3mm,
                    xleftmargin      = 6mm,
                    xrightmargin     = 5mm,
                  ]{latex}{example.out}%
              \end{minipage}%
        \hspace{0.05\linewidth}%
        \begin{minipage}{0.4\linewidth}%
          \input{example.out}%
        \end{minipage}
   \endlisting
}

\begin{document}
\begin{myenv}{A simple equation}
 \begin{equation}
  \frac{3}{2}=\frac{a}{b}
 \end{equation}
\end{myenv}

\begin{myenv}{}
 \begin{equation}
  \frac{3}{2}=1+\frac{1}{2}
 \end{equation}
\end{myenv}

\end{document}

答案3

看看minted 的源代码,它对在文档中排版其示例执行的操作完全相同。

以下是相关部分:

\newenvironment{example}
  {\VerbatimEnvironment
   \begin{VerbatimOut}[gobble=3]{example.out}}
  {\end{VerbatimOut}%
   \vspace{1ex}%
   \setlength{\parindent}{0pt}%
   \fbox{\begin{minipage}{0.5\linewidth}%
     \inputminted[resetmargins]{latex}{example.out}%
   \end{minipage}%
   \hspace{0.05\linewidth}%
   \begin{minipage}{0.4\linewidth}%
     \input{example.out}%
   \end{minipage}%
   \vspace{1ex}}}

它使用两个并排的minipage来相邻地放置示例代码和输出。在内部,\VerbatimOut用于将示例代码逐字存储在临时文件中,然后将其传递给该文件minted进行漂亮打印(左侧),并\input直接将其用于排版(右侧)。

相关内容