Modificar la combinación de colores

Modificar la combinación de colores

Actualmente los comandos de la sección están coloreados en azul (usando el tema Monokai). Me gustaría agregar más énfasis a los comandos de sección en el código fuente cuando se abre en Sublime Text 3, similar al efectoilustrado en la respuesta de Emacs.

Instalé el PackageResourceViewercomplemento y abrí LaTeX.sublime-syntaxel recurso. Veo:

  sections:
    - match: |-
        (?x)
        (
          (\\)
          (?:
            (?:sub){0,2}section
            | (?:sub)?paragraph
            | chapter|part|addpart
            | addchap|addsec|minisec
          )
          (?:\*)?
        )
        (?:
          (\[)([^\[]*?)(\])               # optional Title
        )?
        (\{)
      captures:
        1: support.function.section.latex
        2: punctuation.definition.backslash.latex
        3: punctuation.definition.group.brace.begin.latex
        4: entity.name.section.latex
        5: punctuation.definition.group.brace.end.latex
        6: punctuation.definition.group.brace.begin.latex
      push:
        - meta_scope: meta.section.latex
        - meta_content_scope: entity.name.section.latex
        - match: '\}'
          scope: punctuation.definition.group.brace.end.latex
          pop: true
        - include: main

Pero no sé cómo proceder.

Respuesta1

Descripción general

La forma en que Sublime Text diseña los archivos es separando el significado semántico y la representación real. Esto es similar a LaTeX: tienes un comando \section{...}que indica la intención versus la representación real, tal vez \textbf{\huge ...}para un ejemplo muy simple.

Un .sublime-syntaxarchivo sólo debe adjuntarsesemánticoes decir, a partes de un documento ("esto es una sección"), mientras que el trabajo de decidir cómo representar las cosas ("esto está en negrita") en la pantalla pertenece a .tmThemeslos archivos de combinación de colores. (Por supuesto, en la práctica las cosas no son tan claras y verás una combinación de los dos en .sublime-syntaxlos archivos. En un mundo perfecto, esto no sucedería).

Así que tienes dos opciones:

  • modifique el archivo de sintaxis, de forma análoga a reemplazar cada instancia de \section{...}con \textbf{\huge ...}para obtener secciones en negrita. No recomendado, pero hablaré sobre cómo puedes hacerlo aquí.

  • modificar el archivo de combinación de colores, de forma análoga a cambiar eldefiniciónde \sectionenvalentonar a las secciones.

Modificar la sintaxis

Aquí simplemente cambiamos las partes relevantes de LaTeX.sublime-syntaxpor ejemplo markup.bold.latex(veresteenlace para una discusión sobre los nombres de alcance en Sublime Text). Las líneas modificadas son las que tienen comentarios # ...después.

sections:
  - match: |-
      (?x)
      (
        (\\)
        (?:
          (?:sub){0,2}section
          | (?:sub)?paragraph
          | chapter|part|addpart
          | addchap|addsec|minisec
        )
        (?:\*)?
      )
      (?:
        (\[)([^\[]*?)(\])
      )?
      (\{)
    captures:
      1: support.function.section.latex
      2: punctuation.definition.backslash.latex
      3: punctuation.definition.group.brace.begin.latex
      4: entity.name.section.latex markup.bold.latex  # this is for the reference [...]
      5: punctuation.definition.group.brace.end.latex
      6: punctuation.definition.group.brace.begin.latex
    push:
      - meta_scope: meta.section.latex
      - meta_content_scope: entity.name.section.latex markup.bold.latex  # this is for the title {...}
      - match: '\}'
        scope: punctuation.definition.group.brace.end.latex
        pop: true
      - include: main

(Mantuve el alcance anterior entity.name.section.latexen caso de que las cosas dependieran de él, pero colocarlo markup.bold.latexdespués significa que la negrita tiene prioridad sobre él).

Los resultados pueden variar (variarán) entre diferentes combinaciones de colores; por ejemplo, algunos no entienden lo que markup.boldsignifica. Mencionas Monokai, la versión predeterminada no maneja markup.bold, pero, por ejemploMonokai extendidoentiende lo hace.

Modificar la combinación de colores

La otra opción es modificar la combinación de colores. Los esquemas de color en Sublime Text son .tmThemearchivos, básicamente archivos xml. Tienen este tipo de estructura:

... (preamble stuff)
<plist version="1.0">
<dict>
  <key>name</key> <string>Colour Scheme Name</string>
  <key>settings</key>
  <array>

    <dict>
      <key>settings</key> <dict> ... (general settings) </dict>
    </dict>

    <dict>
      <key>name</key> <string>First Scope Name</string>
      <key>scope</key> <string>first.scope</string>
      <key>settings</key> <dict> ... </dict>
    </dict>

    ...

    <dict>
      <key>name</key> <string>Last Scope Name</string>
      <key>scope</key> <string>last.scope</string>
      <key>settings</key> <dict> ... </dict>
    </dict>

  </array>
</dict>
</plist>

Echando un vistazo al contenido del valor predeterminado Monokai.tmTheme, la parte relevante para nosotros es esta entrada en array:

<dict>
  <key>name</key>
  <string>Entity name</string>
  <key>scope</key>
  <string>entity.name - (entity.name.filename | entity.name.section | entity.name.tag | entity.name.label)</string>
  <key>settings</key>
  <dict>
    <key>fontStyle</key>
    <string></string>
    <key>foreground</key>
    <string>#A6E22E</string>
  </dict>
</dict>

Esto es lo que controla el estilo entity.name.section.latexque adquiere nuestro alcance. Lo que podemos hacer es introducir una nueva regla dirigida específicamente a las secciones de LaTeX:

<dict>
  <key>name</key>
  <string>LaTeX section entity name</string>
  <key>scope</key>
  <string>entity.name.section.latex</string>
  <key>settings</key>
  <dict>
    <key>fontStyle</key>
    <string>bold</string>
    <key>foreground</key>
    <string>#A6E22E</string>
  </dict>
</dict>

No sé si el orden importa aquí, para estar seguro pondría esto en la <array> ... </array>lista.antesla entrada "Nombre de la entidad". Además, no sé si es posible cambiar el tamaño de fuente; si sepoderhacer, entonces éste seguramente sería el lugar para hacerlo.

información relacionada