我想知道是否可以制作一个文本(可点击或不可点击),lstlisting
将其重定向到文档中的某个图形。例如,像这样:
...
\begin{figure}[t]
\includegraphics{myfigure}
\label{figx}
\end{figure}
...
\begin{lstlisting}
# plot figure~\hyperref[figx]{\ref{figx}}
some code
\end{lstlisting}
...
提前感谢您分享任何想法。
答案1
你可以通过定义一个方法来在列表中包含或多或少你想要的任何 LaTeX 宏逃脱escapeinside
从逐字代码格式化到通常的 LaTeX 处理。下面是使用定义两个字符序列的示例,这两个字符序列开始 ( /*!
) 和结束 ( !*/
) 转义区域。我通常使用相应语言的常用注释分隔符加上一些我通常不在注释中使用的字符,这样代码在没有 LaTeX 解析的编辑器中仍然看起来不错(但您实际上可以使用任何您喜欢的分隔符)。
更新:您还可以使用选项escapebegin
和escapeend
在转义序列周围添加一些 LaTeX 宏。假设您总是在注释中使用转义,并且注释以灰色打印,您可以传递选项escapebegin=\color{gray}
以相同的颜色打印转义文本。
最小示例:
\documentclass{article}
\usepackage{graphicx}
\usepackage{hyperref}
\usepackage{xcolor}
\usepackage{listings}
\lstset{
language=C++,
commentstyle=\color{gray},
escapeinside={/*!}{!*/},
escapebegin=\color{gray},
}
\begin{document}
\begin{figure}[h]
\centering
\includegraphics[width=0.3\textwidth]{example-image-a}
\caption{My figure}
\label{figx}
\end{figure}
\begin{lstlisting}
void test() {
figure->display(); // Output: /*!\ref{figx}!*/
}
\end{lstlisting}
\end{document}