2010-05-05 8 views
8

Estoy usando Latex y el paquete listings para mostrar un código C++ (con resaltado de sintaxis) dentro de un documento.latex y listados: destacando algunas partes del código

Necesito resaltar algunas partes del código. Este resaltado específico no tiene nada que ver con el resaltado de sintaxis, solo son algunas partes del código que me gustaría destacar para que el lector pueda enfocarse en él.

Ojalá pudiera hacer algún nombre de variable, por ejemplo, mostrar en negrita y sobre un fondo amarillo. Aquí hay algo que hice con MSWord que me gustaría reproducir con Latex (por supuesto, no el subrayado rojo y verde):

http://img210.imageshack.us/img210/5302/coden.png.

No he encontrado una manera de hacerlo con el paquete listings. ¿Es posible?

Respuesta

6

Puede activar los comandos de LaTeX arbitrarias dentro de su región listings:

\begin{listings}[escapeinside=\{\}] 
{\highlight{Colonnes[3] = 9}} 
\end{listings} 

\highlight es la macro para marcar (es necesario escribir usted mismo). Consulte la documentación de listados, sección 4.14 ("Escaping to LaTeX") para obtener más detalles. Tenga en cuenta que ahora necesita escapar cada otra aparición de los caracteres especiales en su código, por lo que para el código C++, {} es probablemente una mala elección.

+1

¡Gracias por la pista! No pude hacerlo funcionar usando 'escapeinside' (no sé por qué, obtuve el error que no entendí), pero lo hice funcionar con' escapechar = \% '. Para el registro, que define el '\ highlight' macro de esta manera: \ newcommand \ destacado [1] {\ {colorbox amarilla #} {1}} usando el paquete' xcolor'. –

10

Desafortunadamente @Konrad's approach realmente escapa de listings formateando por completo. Si el texto resaltado contiene palabras clave de programa, esas palabras clave no se resaltarán en el paquete listings, ya que estarían en líneas no resaltadas. Lo ideal podría ser utilizar \highlight{\lstinline{...}}, pero parece que no se puede anidar una macro \lstinline dentro de un entorno listings.

El sitio de TeX StackExchange tiene essentially the same question, con nice answer based on the tikz package y further refinement thereof. Se superpone al resaltar y al mismo tiempo permite que listings formatee automáticamente el texto resaltado.

Todo este tikz enfoque basado en took on a life of its own, que finalmente conduce a un good, robust solution. Ese es actualmente el enfoque más conocido (para mí) para resaltar las líneas listings seleccionadas, manteniendo el resaltado de sintaxis automático. En realidad, funcionará igual de bien para acariciar luces entre cualquier par de ubicaciones en una página determinada.

3

En el código C o C++, creo que el carácter ` es libre de ser el carácter de escape.

lstset { 
... 
escapeinside=\`\`, 
... 
} 

a continuación, se puede usar como

\begin{lstlisting} 
const_cast<T>(`\it{exception}`) 
\end{lstlisting} 

la palabra exception convertirá entonces en excepción. Por cierto, el carácter ` es el carácter de formato Markdown para el código, por lo que es muy fácil de usar en C o C++ como el listado de código.

+0

Esto debería recibir más votos ascendentes. Funciona bien. – meijuh

Cuestiones relacionadas