- Я хотел бы поместить код из внешнего файла в документ 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}