Pergunta

Preciso destacar o código -fonte no LaTex. O pacote listings Parece ser a melhor escolha para a maioria dos casos de uso e para mim foi, até agora.

No entanto, agora preciso de mais flexibilidade. Geralmente, o que estou procurando é um real Lexer. Em particular, preciso (para uma definição de idioma próprio) definir (e destacar!) Estilos de números próprios. listings não permite destacar números no código. No entanto, preciso produzir algo assim:

Required result

listings Também não pode lidar com delimitadores arbitrários para cordas. Considere o seguinte código rubi válido:

s = %q!this is a string.!

Aqui, ! pode ser substituído por quase algum delimitador.

(Este listings Não é possível lidar com o Unicode também é bastante irritante, mas isso é outra questão.)

Idealmente, estou procurando uma extensão de listings Isso me permite fornecer regras de lexing mais complexas. Mas, exceto isso, também estou procurando alternativas viáveis.

Outros tópicos sugeriram o uso Pigmentos que pode produzir saída de látex. Existe até um pacote - texments - para facilitar a transição.

No entanto, isso não tem recursos. Em particular, estou interessado em listings-NOUS Numeração da linha, referências de linha de código -fonte e a possibilidade de incorporar o látex no código -fonte (opções texcl e mathescape dentro listings).

Como exemplo, aqui está um código -fonte com tipo de compensação com listings que mostra algumas das coisas que um substituto também deve fornecer:

LaTeX listings example: Sideways addition “Adição lateral” modificado a partir de bits twidling hacks

Foi útil?

Solução

Levando o conselho de Norman a sério, eu invadi uma solução que usou (um remendado) Pigmentos para destacar e empurrar o maior número possível de recursos sem estourar ;-)

Eu também criei um pacote de látex, uma vez que meu patch de pigmentos foi lançado em Versão 1.2

Apresentando cunhado

cunhado é um pacote que usa pigmentos para fornecer destaque de sintaxe de alto nível no látex. Por exemplo, ele permite a seguinte saída.

fancy LaTeX example

Aqui está um arquivo mínimo para reproduzir o código acima (observe que a inclusão de caracteres Unicode pode exigir 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}

Isso pode ser digitado usando o seguinte comando:

xelatex -shell-escape test.tex

(Mas cunhado Também funciona com latex e pdflatex …)

minted.sty funciona semelhante a texments.sty mas permite recursos adicionais.

Como conseguir isso

Mais uma vez, obrigado a Norman por me motivar a produzir este pacote.

Outras dicas

Tex é (famoso) Turing-complete, mas tenho certeza de que você terá que escrever essa extensão você mesmo. A documentação deixa claro que o autor original de listings Orfã em 2004 e que não foi atualizado desde 2006. O pacote não foi projetado para substituir a formatação de literais numéricos, mas você pode modificá -lo alterando a definição de \lst@ProcessDigit. Se isso não funcionar, você terá que entender em detalhes como as opções "estilo identificador" funcionam e terá que duplicar essa maquinaria para seus literais numéricos.

Não entendo por que você está tão relutante em introduzir uma ferramenta externa em sua cadeia de ferramentas, mas porque você está, terá que fazer um trabalho extra. Após uma olhada no código -fonte, espero que modifique listings Deveria ser possível, mas eu pessoalmente escolheria pré -processar meu látex.

este é um pacote que converte código -fonte em tex e látex com destaque de sintaxe. É possível adicionar definições de linguagem de programação personalizadas facilmente.

O destaque suporta 100 linguagens de programação e inclui 50 temas de cores. Apresenta o código reformatante e recuo.

Não o usei para saber o quão bem funciona, mas outra pessoa que eu conheço disse que funcionou muito bem. Se eu tiver a chance, vou tentar sozinho e ver.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top