lstinputlisting から LaTeX の方程式を参照する

lstinputlisting から LaTeX の方程式を参照する
  • 外部ファイルのコードを LaTeX ドキュメントに挿入したいと思います。
    • このコードは単独で実行できます。
    • このコードのコメントでは、ドキュメントの式ラベルが参照されています。
  • これらの方程式が更新され、キャプション、ラベル、ボックス内、番号付き行などで最終文書に参照されるようになることを望みます。

ラベル付き方程式を含む LaTeX ドキュメントの例:

%doc.tex
\documentclass[]{article}
\usepackage{amsmath}
\usepackage{hyperref}
\usepackage{listings}
\begin{document}
    \begin{align}
    \label{eq:my equation}
    y = \sin(x) \cos(x)
    \end{align}
    \lstinputlisting[caption={Code},
        frame=single,
        numbers=left,
        escapeinside={tex:}{:tex}
    ]{code.py}
\end{document}

ドキュメントに含めるサンプルコード:

#code.py
import math
def y(x):
    return math.sin(x)*math.cos(x) #tex: Equation \ref{eq:my equation} :tex
print y(math.pi/4)

ただし、\lstinputlisting を使用するとエラーが発生します。このような式を参照するにはどうすればよいでしょうか?

どうもありがとうございます。

答え1

escapeinside区切り文字として単一の文字を使用します。

\documentclass[]{article}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.py}
#code.py
import math
def y(x):
    return math.sin(x)*math.cos(x) # % Equation \ref{eq:my equation} %
print y(math.pi/4)
\end{filecontents*}
\usepackage{amsmath}
\usepackage{hyperref}
\usepackage{listings}
\begin{document}
\begin{align}
  \label{eq:my equation}
  y = \sin(x) \cos(x)
\end{align}

\lstinputlisting[caption={Code},
frame=single,
numbers=left,
escapeinside=\%\%
]{\jobname.py}

\end{document}

関連情報