[latex] LaTeX에서 강조되는 소스 코드

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

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

필요한 결과

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

s = %q!this is a string.!

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

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

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

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

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

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

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



답변

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에게 다시 한 번 감사드립니다.


답변

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

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


답변

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

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

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


답변