Вставка программного кода в LaTeX-документ.
Мне нужно вставить в LaTeX’овский (или LyX’овский) документ куски кода с форматированием — С++, bash etc. Куда копать?
Гугль не в ту степь посылает.
JackYF ★★★★
12.04.08 19:35:30 MSD
Re: Вставка программного кода в LaTeX-документ.
eXire ★★
( 12.04.08 19:57:32 MSD )
Re: Вставка программного кода в LaTeX-документ.
vden ★★
( 12.04.08 20:03:30 MSD )
Ответ на: Re: Вставка программного кода в LaTeX-документ. от eXire 12.04.08 19:57:32 MSD
Re: Вставка программного кода в LaTeX-документ.
Спасибо, добрый человек.
Записки разработчика
Помнится, ещё на студенческой скамье я встречал задачу оформления исходного кода в LaTeX. В ту пору я использовал пакет listings. И я страдал. О, как же я страдал! Русские буквы не хотели дружить с UTF-8, а глаза мои текли кровавыми слезами при взгляде на итоговое форматирование. И вот, вновь я встретился с этой тяжёлой задачей. В поисках решения я наткнулся на замечательный пост в записках дебианщика Как оформить исходный код программ в LaTeX без адских страданий. Название подсказывало мне, что развлечение это не простое. Я аккуратно перепробовал все рецепты из статьи, но ни один меня не устроил. И в самом конце поста я обнаружил ссылку на замечательный пакет minted, который должен был положить конец моим страданиям.
Пакет minted базируется на Python-овской библиотеке Pygments, которая умеет на отличненько раскрашивать код, поддерживается около 300 разных языков и форматов разметки. Для начала нам понадобится её установить (предполагаем, что Python и easy_install уже имеются):
easy_install Pygments
Переходим в любимый LaTeX-редактор и начинаем писать код (опять-таки предполагаем, что версия нашего LaTeX-дистрибутива включает пакет minted и все его зависимости):
\documentclass[11pt] \usepackage[utf8] \usepackage[english,russian] \usepackage \begindocument> \beginminted> using System; namespace HelloWorld < class Hello < static void Main() < Console.WriteLine("Hello, World!"); >> > \endminted> \enddocument>
При трансляции запускаем latex/pdflatex c ключём -shell-escape . Получаем красивый результат:
Проблемы возникнут, если мы захотим в UTF-8 кодировке использовать русские буквы. Но мне удалось найти другой замечательный пост, в котором приводилось немного магии в преамбуле для поддержки кириллицы. Оттранслируем следующий файл:
\documentclass[11pt] \usepackage[utf8] \usepackage[english,russian] \usepackage \makeatletter \newcommand<\minted@write@detok>[1]% \immediate\write\FV@OutFile<\detokenize>>% \newcommand<\minted@FVB@VerbatimOut>[1]% \@bsphack \begingroup \FV@UseKeyValues \FV@DefineWhiteSpace \def\FV@Space<\space>% \FV@DefineTabOut %\def\FV@ProcessLine<\immediate\write\FV@OutFile>% %Old, non-Unicode version \let\FV@ProcessLine\minted@write@detok %Patch for Unicode \immediate\openout\FV@OutFile #1\relax \let\FV@FontScanPrep\relax %% DG/SR modification begin - May. 18, 1998 (to avoid problems with ligatures) \let\@noligs\relax %% DG/SR modification end \FV@Scan> \let\FVB@VerbatimOut\minted@FVB@VerbatimOut \renewcommand\minted@savecode[1]< \immediate\openout\minted@code\jobname.pyg \immediate\write\minted@code<\expandafter\detokenize\expandafter>% \immediate\closeout\minted@code> \makeatother \begindocument> \beginminted> using System; namespace HelloWorld < class Hello < static void Main() < Console.WriteLine("Привет, мир!"); >> > \endminted> \enddocument>
И возрадуемся появлению русских букв:
Пакет содержит большое количество опций для стилизации листингов: можно добавить рамку, номера строк и кучу прочих вкусностей.
\beginminted>[mathescape, linenos, numbersep=5pt, gobble=2, frame=lines, framesep=2mm] string title = "This is a Unicode π in the sky" /* Defined as $\pi=\lim_n\to\infty>\fracP_n>d>$ where $P$ is the perimeter of an $n$-sided regular polygon circumscribing a circle of diameter $d$. */ const double pi = 3.1415926535 \endminted>
Больше информации вы найдёте на GitHub-е и в документации
Вставка JS кода в latex
Подскажите пожалуйста, как мне вставить JS код в Latex Для того чтобы он выглядел после преобразования из tex в pdf код выглядел в своем первоначальном виде , а не так:
Отслеживать
задан 13 дек 2022 в 22:52
166 10 10 бронзовых знаков
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
\usepackage
\begin class Node < constructor(value, next) < this.value = value this.next = next >> \end
Отслеживать
ответ дан 13 дек 2022 в 23:56
Vadik Sirekanyan Vadik Sirekanyan
8,576 4 4 золотых знака 21 21 серебряный знак 36 36 бронзовых знаков
Предложу альтернативу — пакет minted: ctan.altspu.ru/macros/latex/contrib/minted/minted.pdf Его использовать несколько сложнее (нужен Python в ОС и разрешить редактору обращаться к консоли), но он понимает многие языки и подсвечивает синтаксис. Особенно удобно, если кода не 3 строки, а отдельный файл, который можно подключить.
Listing code in LaTeX
Чтобы использовать listing пакет, Вы должны его подключить:
usepackagelistings>
Для того чтобы вставить программный код, мы должны использовать следующую конструкцию:
beginlstlisting> put your code here endlstlisting>
Другой способ вставить код, очень полезен, если Вы еще занимаетесь его редактированием. Таким образом, если вы изменяете исходный код, вы просто должны перекомпилировать код LaTeX и ваш документ будет обновлен. Для этого используйте следующий код:
lstinputlistingsource_filename.py>
В примере мы используем Python файл, но Вы можете добавлять любой файл содержащий программный код.
Если код не подсвечивается, значит компилятор не смог определить язык на котором написан код. Мы можем определить язык вручную следующей командой.
lstinputlisting[language=Python]source_filename.py>
Пакет listing поддерживает следующие языки программирования:
Также поддерживаются другие диалекты. Полный список Вы можете найти в документации.
Ниже приведен пример конфигурации пакета listing:
usepackagelistings> usepackagecolor> definecolordkgreen>rgb>0,0.6,0> definecolorgray>rgb>0.5,0.5,0.5> definecolormauve>rgb>0.58,0,0.82> lstset % language=Octave, % Язык программирования numbers=left, % С какой стороны нумеровать numberstyle=tinycolorgray>, % Стиль который будет использоваться для нумерации строк stepnumber=2, % Шаг между линиями. Если 1, то будет пронумерована каждая строка numbersep=5pt, backgroundcolor=colorwhite>, % Цвет подложки. Вы должны добавить пакет color - usepackage showspaces=false, showstringspaces=false, showtabs=false, frame=single, % Добавить рамку rulecolor=colorblack>, tabsize=2, % Tab - 2 пробела breaklines=true, % Автоматический перенос строк breakatwhitespace=true, % Переносить строки по словам title=lstname, % Показать название подгружаемого файла keywordstyle=colorblue>, % Стиль ключевых слов commentstyle=colordkgreen>, % Стиль комментариев stringstyle=colormauve> % Стиль литералов >