LaTeX에서 강조되는 소스 코드


196

LaTeX에서 소스 코드를 강조해야합니다. 패키지 listings는 대부분의 유스 케이스에 가장 적합한 것으로 보이며 지금까지는 그랬습니다.

그러나 이제는 더 많은 유연성이 필요합니다. 일반적으로 내가 찾고있는 것은 실제 어휘 분석기입니다. 특히, 나는 자신의 숫자 스타일을 정의하고 강조하기 위해 (자신의 언어 정의를 위해) 필요합니다. listings코드에서 숫자 강조 표시를 허용하지 않습니다. 그러나 다음과 같은 것을 생산해야합니다.

필요한 결과

listings또한 문자열에 대한 임의의 구분 기호를 처리 할 수 ​​없습니다. 다음과 같은 유효한 루비 코드를 고려하십시오.

s = %q!this is a string.!

여기서 !거의 모든 구분 기호 로 바꿀 수 있습니다 .

( listings유니 코드를 처리 할 수없는 것도 매우 까다로운 문제이지만 다른 문제입니다.)

이상적으로 listings는 더 복잡한 어휘 규칙을 제공 할 수 있는 확장 기능을 찾고 있습니다. 그러나 그것을 막기 위해, 나는 또한 실행 가능한 대안을 찾고 있습니다.

다른 스레드 는 LaTeX 출력을 생성 할 수있는 피그먼트 사용을 제안했습니다 . texments전환을 쉽게하기 위한 패키지도 있습니다 .

그러나 이것은 기능이 부족합니다. 특히, 나는 listings스타일 라인 번호 매기기, 소스 코드 라인 참조 및 LaTeX를 소스 코드 (옵션 texclmathescapelistings) 에 포함시킬 수있는 가능성에 관심이 있습니다 .

예를 들어, 다음 listings은 대체 프로그램에서 제공해야 할 사항을 보여주는 소스 코드 조판입니다 .

LaTeX 리스팅 예 : 옆으로 추가 [Bit Twiddling Hacks에서 수정 된 "Sideways 추가"]


피그먼트와 같은 외부 도구를 가져 오는 것을 꺼리지 않는다면 문서 용 메이크 파일을 작성하는 것이 어떻습니까?
Mica

6
이것은 tex.stackexchange.com 으로 마이그레이션하면 됩니까? ^^
Matthias

1
@Matthias 확실하지 않습니다. 내가 게시했을 때 tex.se는 없었지만 지금은 매우 유용합니다. 질문은 엄청난 반향을 보였고 TeX.SE에서는 아무도 비슷한 질문을 게시하지 않았습니다. 또한 실제로 프로그래밍 및 프로그래밍 도구와 관련이 있으므로 프로그래머 가 그 이점을 얻는 사람들이라고 생각 합니다.
Konrad Rudolph

1
현재 작성중인 문서에 대해 LaTeX를 잊어 버린 사람들을 위해 : Office Word 또는 LibreOffice Writer를 사용하면 Eclipse와 같은 코드를 복사 / 붙여 넣기하여 색상을 보존 할 수 있습니다.
MohamedEzz

3
@MemoryLeaks이 조언이 누구에게 도움이되는지 잘 모르겠습니다. Office 소프트웨어는 LaTeX의 올바른 대체품이 아닙니다 ( 사무실 소프트웨어 가 아니라 데스크탑 출판 시스템입니다). Office 소프트웨어에 대한 다른 모든 장점과는 별도로).
Konrad Rudolph

답변:


355

Norman의 조언을 마음에 새기면서 나는 ( 패치 된 ) 피그먼트를 사용하여 가능한 많은 기능을 강조 표시하고 파열시키지 않고 밀어 넣는 솔루션을 함께 해킹했습니다.

Pygments 패치가 1.2 버전 으로 출시되면 LateX 패키지도 만들었습니다 .

제시 주조

minted 는 피그먼트를 사용하여 LaTeX에서 최고 수준의 구문 강조를 제공하는 패키지입니다. 예를 들어 다음과 같은 출력을 허용합니다.

멋진 LaTeX 예제

위의 코드를 재현 할 수있는 최소한의 파일이 있습니다 (유니 코드 문자를 포함하면 XeTeX가 필요할 수 있음).

\documentclass[a4paper]{article}
\usepackage{fontspec}
\usepackage{minted}

\setsansfont{Calibri}
\setmonofont{Consolas}

\begin{document}
\renewcommand{\theFancyVerbLine}{
  \sffamily\textcolor[rgb]{0.5,0.5,0.5}{\scriptsize\arabic{FancyVerbLine}}}

\begin{minted}[mathescape,
               linenos,
               numbersep=5pt,
               gobble=2,
               frame=lines,
               framesep=2mm]{csharp}
  string title = "This is a Unicode π in the sky"
  /*
  Defined as $\pi=\lim_{n\to\infty}\frac{P_n}{d}$ where $P$ is the perimeter
  of an $n$-sided regular polygon circumscribing a
  circle of diameter $d$.
  */
  const double pi = 3.1415926535
\end{minted}
\end{document}

다음 명령을 사용하여 조판 할 수 있습니다.

xelatex -shell-escape test.tex

(단, 발행 년도 도 함께 작동 latex하고 pdflatex...)

minted.sty유사하게 작동 texments.sty하지만 추가 기능을 허용합니다.

그것을 얻는 방법

이 패키지를 제작하도록 동기를 준 Norman에게 다시 한 번 감사드립니다.


19
LaTeX에서 피그먼트를 사용하는 방법에 대해 수 시간 동안 검색하고 내 솔루션을 해킹하려고 더 많은 시간을 보낸 후에 이것이 내가 찾은 최고입니다. 더 나은 방법은 실제로 작동합니다. 고마워
sykora

2
여기에 당신이 해왔 던 일을 고맙게 생각하십시오;)!
Filip Dupanović

4
@Paul : Windows에서 모든 것이 상당히 지저분하다는 것은 사실입니다. :-( 다행스럽게도, 다음 버전의 피그먼트는 이것을 다소 완화시킬 것이지만, 파이썬으로 자주 일하지 않는 사람들에게는 easy_install프로세스가 결코 매끄럽지 않을 것입니다.
Konrad Rudolph


1
@ Paŭlo 감사합니다. 패키지에 대한 모든 언급을 읽으려고 시도하지만 (Google 알림이 있음) 항상 성공하지는 않습니다. 당신이 언급 한 질문은 실제로 읽었습니다 (분명히 말했지만 기억하지 못했습니다). 그러나 전혀 간단하지 않습니다. "AB를"이것에 대한 TikZ를 사용하여 ... 나쁜 해킹 것 같아
콘라드 루돌프

6

TeX는 (유명하게) Turing-complete이지만,이 확장 기능을 직접 작성해야한다고 확신합니다. 이 설명서를 통해 listings2004 년 에 고아 의 원래 작성자가 2006 년 이후로 업데이트되지 않았 음을 알 수 있습니다.이 패키지는 숫자 리터럴의 형식을 재정의하도록 설계되지 않았지만 의 정의 \lst@ProcessDigit. 그래도 작동하지 않으면 "식별자 스타일"옵션의 작동 방식을 자세히 이해해야하며 숫자 리터럴에 대해 해당 메커니즘을 복제해야합니다.

툴체인에 외부 툴을 도입하는 것을 꺼려하는 이유를 잘 모르겠지만, 그 이유 때문에 추가 작업을해야합니다. 소스 코드를 살펴본 후에는 수정 listings이 가능할 것으로 기대 하지만 개인적으로 LaTeX를 사전 처리하도록 선택합니다.


외부 도구를 소개하는 것을 꺼려하지는 않습니다. 실제로 피그먼트를 사용하는 것이 가장 좋은 해결책이라고 생각합니다. 문제는 어떻게 아직도 라텍스 탈출을 할 수 있도록 현명한 방법으로이 작업을 수행하는 \label코드 내부에요.
Konrad Rudolph

변경에 관해서는 listings, 나는 이미 그 출처를 살펴 보았습니다. 불행히도, 나는 그것을 전혀 이해하지 못합니다. 내 TeX 기술은 그 수준에 가깝지 않습니다. 지금까지는 TeX의 LaTeX 하위 세트 만 사용했습니다.
Konrad Rudolph

1
외부 도구를 도입 할 때 가장 큰 문제는 게시하는 경우입니다. 많은 저널 출판사 (기침 기침 SPRINGER 등)는 원시 LaTex로 제출해야하며, 그런 다음 서버에서 컴파일됩니다. 말할 필요도없이, 타사 도구가 서버에없는 경우 사전 처리하지 않으면 SOL이됩니다 (Tex 드라이브를 사용하는 유틸리티의 대부분을 상실 함).
Namey

문서가 올바른 경우 리스팅 패키지는 계속 유지되지만 관리자가 변경되어 버그 수정이 수신되었습니다. ctan.org/pkg/listings?lang=en
DetlevCM

1
@Namey, 단지 데이터 포인트 : mintedSpringer의 LNCS 게시 프로세스 를 통해 종이를 성공적으로 몰래 옮겼습니다 .
Volker Stolz

3

구문 강조와 텍 라텍스 소스 코드를 변환하는 패키지입니다. 사용자 정의 프로그래밍 언어 정의를 쉽게 추가 할 수 있습니다.

Highlight는 100 가지 프로그래밍 언어를 지원하며 50 가지 색상 테마를 포함합니다. 코드 재 포맷 및 들여 쓰기 기능이 있습니다.

나는 그것이 잘 작동하는 방법을 알기 위해 그것을 사용하지는 않았지만, 내가 아는 다른 사람은 그것이 잘 작동한다고 말했다. 기회가된다면 직접 시험해보고 볼게요.


1
highlight그래도 피그먼트의 모든 문제를 공유합니다. 특히 LaTeX 패키지아닙니다 . 단순히 독립형 프로그램입니다. 피그먼트와 마찬가지로 문제는 LaTeX 내에서 의미있게 사용하고 가지고있는 모든 장점을 제공하는 방법 listings입니다.
Konrad Rudolph
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.