¿Cómo se puede activar regular cotizaciones (es decir,’, «) dentro de LaTeX/TeX cotizaciones (es decir,`,`»)

Dado un documento escrito con la normal de la cita, por ejemplo,

Ben said "buttons, dear sir".
I replied "Did you say 'buttons'?" to him.

Qué maneras se puede activar este tipo de cosas en Látex de comillas, con la correspondiente de la semántica. es decir,

Ben said ``buttons, dear sir''.
I replied ``Did you say `buttons'?'' to him.

Para que el Látex produce:

Ben said buttons, dear sir”.
I replied Did you say buttons’?”

Mi primer pensamiento es, a su vez, a una expresión regular. Sin embargo, no estoy recibiendo ningún éxitos de Google o el regex bibliotecas para «Látex cotizaciones de la expresión regular», y, por supuesto, «TeX cotizaciones de la expresión regular» parece volver demasiados.

Gracias.

  • expresiones regulares no son la herramienta adecuada para ello.

7 Kommentare

  1. 4

    En general, este problema es más difícil de lo que parece.

    El más simple de los casos puede ser tratados con expresiones regulares, pero para situaciones de carácter más general es casi seguro que necesitará para construir un recursiva analizador: expresión regular sólo funcionará si no hay anidación.

    El gran problema va a ser asociados con la identificación único "'"s que no están emparejados—como se contracciones (el "'" en "don't" no debe ser cambiado, y no debe ser emparejado).


    Vamos a ver si podemos escribir un utilizable EBNF descripción:

    input:       text+
    text:        uquote|squote|dquote
    squote       "'" text "'"
    dquote       """ text """
    uquote:      [contraction|.]+
    contraction: [A-Za-z]+ "'" [A-Za-z]+

    que se limita a las contracciones que tienen el "'" en el medio de la palabra. Toda la acción asociada sólo el eco de la entrada, excepto que el squote y dquote términos reemplazar las comillas de la forma adecuada.


    He utilizado expresiones regulares seguido por humanos fix-ups para uno bastante sencillo, pero que sería intensivo de mano de obra para los trabajos en curso.

    • Además, se puede añadir que en los editores como emacs, cuando escriba un " utiliza Tex-insert-quote recordar si sus cotizaciones están abiertos (no anidación), y usted tiene que abrir manualmente las comillas simples.
  2. 2

    Aquí es el de python regex que yo uso para mi los documentos de Latex:

    '([ \w-]+)'", " `\\1'

    Hay una secuencia de comandos de python que se aplica la expresión regular en un archivo latex (aquí). Funciona la mayoría del tiempo. Feliz tipografía! 🙂

  3. 1

    Aquí son algunas de las expresiones regulares de Perl sustituciones que podría ser lo suficientemente bueno para lo que quieres hacer.

    s/"(\w)/``$1/g;
    s/'(\w)/`$1/g;
    s/([\w\.?!])"/$1''/g;

    El código se supone que una sola o de doble cotización seguido por un carácter alfanumérico comienza una cita. También, se supone que una doble cita siguiente un carácter alfanumérico o de los signos de puntuación termina la cita. Estos supuestos son probablemente cierto que la mayoría del tiempo, pero puede haber excepciones.

    • Esto es similar a lo que he usado en el pasado. Necesita intervención humana a partir de tiempo al tiempo, pero toma la mayor parte de la obra…
  4. 1

    Gracias por el aporte útil y apreciado.

    También he llegado a través de este, a partir del CPAN Látex::Encode.pm:

        # A single or double quote before a word character, preceded
        # by start of line, whitespace or punctuation gets converted
        # to "`" or "``" respectively.
    
        $text =~ s{ ( ^ | [\s\p{IsPunct}] )( ['"] ) (?= \w ) }
                  { $2 eq '"' ? "$1``" : "$1`" }mgxe;
    
        # A double quote preceded by a word or punctuation character
        # and followed by whitespace or end of line gets converted to
        # "''".  (Final single quotes are represented by themselves so
        # we don't need to worry about those.)
    
        $text =~ s{ (?<= [\w\p{IsPunct}] ) " (?= \s | $ ) }
                  { "''" }mgxe
  5. 0

    Yo estaba buscando una respuesta a este problema y decidió aprender un poco de lisp hoy en día. Pongo esta función lisp en mi ~/.emacs archivo y, a continuación, ejecute con M-x tex-set-quotes:

    (defun tex-set-quotes ()  
      (interactive)  
      (latex-mode)  
      (while (search-forward "\"" nil t)  
       (replace-match "" nil t)  
       (tex-insert-quote nil)))

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein