Eu preciso destacar o código fonte no LaTeX. O pacote listings
parece ser a melhor opção para a maioria dos casos de uso e, para mim, até agora.
No entanto, agora eu preciso de mais flexibilidade. Geralmente, o que estou procurando é um verdadeiro lexer. Em particular, preciso (para uma definição de linguagem própria) definir (e destacar!) Estilos de número próprios. listings
não permite destacar números no código. No entanto, preciso produzir algo como isto:
listings
também não pode lidar com delimitadores arbitrários para seqüências de caracteres. Considere o seguinte código Ruby válido:
s = %q!this is a string.!
Aqui, !
pode ser substituído por quase qualquer delimitador.
(Isso listings
não pode lidar com Unicode também é bastante irritante, mas isso é outro problema.)
Idealmente, estou procurando uma extensão listings
que permita fornecer regras de lexing mais complexas. Mas, exceto por isso, também estou procurando alternativas viáveis.
Outros tópicos sugeriram o uso de pigmentos que podem produzir saída LaTeX. Existe até um pacote - texments
- para facilitar a transição.
No entanto, isso carece de recursos. Em particular, eu estou interessado em listings
numeração de estilo linha, as referências de linha de código fonte, bem como a possibilidade de incorporar LaTeX no código fonte (opções texcl
e mathescape
em listings
).
Como exemplo, aqui está um código-fonte digitado com o listings
qual mostra algumas das coisas que uma substituição também deve fornecer:
["Adição lateral" modificada a partir de Bit Twiddling Hacks]
fonte
Respostas:
Levando em consideração o conselho de Norman, criei uma solução que usava pigmentos (com patches ) para destacar e introduzi o maior número possível de recursos sem estourar ;-)
Também criei um pacote LateX, uma vez que meu patch de pigmentos foi lançado na versão 1.2 …
Apresentando cunhado
minted é um pacote que usa pigmentos para fornecer destaque de sintaxe de alto nível no LaTeX. Por exemplo, ele permite a seguinte saída.
Aqui está um arquivo mínimo para reproduzir o código acima (observe que a inclusão de caracteres Unicode pode exigir o XeTeX)!
Isso pode ser digitado usando o seguinte comando:
(Mas o cunhado também funciona com
latex
epdflatex
…)minted.sty
funciona de maneira semelhante,texments.sty
mas permite recursos adicionais.Como conseguir isso
minted está listado no CTAN ( informações do pacote )
documentação está obviamente incluída.
minted agora é mantido por Geoffrey Poore. A versão de desenvolvimento, incluindo o
.sty
arquivo mais recente , está disponível em github.com/gpoore/minted e pode ser clonada a partir daí.Mais uma vez, obrigado a Norman por me motivar a produzir este pacote.
fonte
easy_install
) o processo nunca será muito bom.O TeX é (famosamente) completo em Turing, mas tenho certeza que você precisará escrever essa extensão. A documentação deixa claro que o autor original o
listings
tornou órfão 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 o definição de\lst@ProcessDigit
. Se isso não funcionar, você precisará entender em detalhes como as opções "estilo de identificador" funcionam e duplicar esse mecanismo para seus literais numéricos.Não entendo muito bem por que você é tão relutante em introduzir uma ferramenta externa em sua cadeia de ferramentas, mas, como você é, terá que fazer um trabalho extra. Após uma olhada no código fonte, espero que a modificação
listings
seja possível, mas eu pessoalmente escolheria pré-processar meu LaTeX.fonte
\label
s dentro do código.listings
, eu já dei uma olhada em sua fonte - e, infelizmente, não a compreendo. Minhas habilidades em TeX não estão nem perto desse nível. Até agora, só usei o subconjunto LaTeX do TeX.minted
o processo de publicação LNCS da Springer.Este é um pacote que converte o código fonte em TeX e LaTeX com destaque de sintaxe. É possível adicionar definições personalizadas da linguagem de programação facilmente.
O Highlight suporta 100 linguagens de programação e inclui 50 temas de cores. Possui reformatação e recuo de código.
Eu não o usei para saber como funciona, mas alguém que eu conheço disse que funcionou muito bem. Se eu tiver uma chance, vou experimentar e ver.
fonte
highlight
compartilha todos os problemas dos pigmentos. Em particular, não é um pacote LaTeX , apesar do que diz sua descrição. É simplesmente um programa independente. O problema, assim como com os pigmentos, é como usá-lo de maneira significativa a partir do LaTeX e fornecer todas as coisas boas que elelistings
tem.