Как получить отчеканенный пакет для рендеринга блоков кода с копируемыми отступами?
Невооруженным глазом minted (пакет Конрада Рудольфа LaTeX для выделения кода с использованием библиотеки Pygments) достоверно отображает блоки кода, которые ему передаются, отображая их с любым отступом, содержащимся в исходном коде.
Однако, если вы попытаетесь скопировать и вставить код из одного из этих блоков, вы заметите, что их видимый отступ достигается с помощью не копируемых пробелов, так что вставленный код теряет пробелы в каждой строке. Это особенно проблематично с блоками кода Python, потому что в Python отступ имеет реальное значение как часть кода.
Итак, вот мой вопрос: есть ли какой-нибудь способ получить отчётливость для рендеринга блоков кода, которые при копировании и вставке сохраняют отступ исходного кода, который они отображают?
Для примеров того, что я имею в виду, посмотрите любой из нескольких блоков кода с отступами в подробном руководстве (см. Здесь) или скомпилируйте следующий воспроизводимый пример с минимальным изом:
\documentclass{article}
\usepackage{minted}
\newminted[python]{python}{frame=single}
\begin{document}
\begin{python}
def example1():
if verbose:
print 'Running example1'
verbose = True
example1()
\end{python}
\end{document}
1 ответ
Это работает в Acrobat Reader, по крайней мере, в моей системе, но не в SumatraPDF и, возможно, в некоторых других программах. Могут быть и другие, лучшие решения.
\usepackage{color}
\usepackage{minted}
\newminted[python]{python}{frame=single}
\fvset{showspaces}
\renewcommand\FancyVerbSpace{\textcolor{white}{\char32}}
Это устанавливает fancyvrb
, который Pygments использует для форматирования вывода, чтобы использовать символы видимого пространства (␣
), а затем делает персонажей "невидимыми", делая их белыми. В конечном счете, это в конечном итоге вопрос TeX, так как Pygments использует fancyvrb
пакет для его вывода, и хитрость заключается в том, чтобы получить fancyvrb
создать (ведущие) места, которые можно скопировать.