Apóstrofos automáticos para aspas

Apóstrofos automáticos para aspas

Existem algumas outras perguntas deste lado abordando questões relacionadas, mas não encontrei nenhuma que cubra exatamente o meu problema.

Tenho um texto (convertido de XML) que utiliza o apóstrofo 'com três significados diferentes: Citação inicial, citação final e para abreviações e genitivo ( can't, cats', etc.). Existe uma maneira de manter o apóstrofo 'do jeito que estátodos os casos, exceto as aspas iniciais, onde deve ser substituído por `? Para sua informação, na verdade estou usando XeLaTeX em meu documento original, mas não tenho certeza se isso fará diferença.

\documentclass{memoir}

\begin{document}

He said, 'the cats' hats can't fit me'.

\end{document}

Acho que a maneira de determinar qual usar é:

  • Se o apóstrofo for precedido por um caractere de texto, mantenha-o
  • Se for precedido por qualquer outra coisa (incluindo espaço e nada), altere-o para `

Observação:É improvável que apóstrofos de abreviaturas no início das palavras (como em 'tis) apareçam em meus documentos.

Responder1

Eu acho que você deseja (aspas abertas) somente quando 'for precedido de espaço ou nada.

Isso também funciona com o modo matemático.

\documentclass{memoir}

\makeatletter
\let\apostrophe'
\catcode`'=\active
\protected\def'{%
  \ifvmode
    `%
  \else
    \ifmmode
      \expandafter\expandafter\expandafter\active@math@prime % for math
    \else
      \ifdim\lastskip>0pt
        `%
      \else
        \apostrophe
      \fi
    \fi
  \fi
}
% redefine \pr@m@s to look for an active '
\def\pr@m@s{%
  \ifx'\@let@token
    \expandafter\pr@@@s
  \else
    \ifx^\@let@token
      \expandafter\expandafter\expandafter\pr@@@t
    \else
      \egroup
    \fi
  \fi}
\makeatother

\begin{document}

He said, 'the cats' hats can't fit me'.

'Ouch,' he said.

Some 'derivatives' $f'+f''+f'''$.

\end{document}

insira a descrição da imagem aqui

Observe que a segunda linha teria uma aspa aberta após a vírgula, conforme sua especificação.

Notas

  • \protectedé usado ou \section{A 'quoted'}falharia
  • \section{'quoted'}irá falhar e não há muito o que fazer sobre isso

O seguinte parece resolver o problema com títulos de seções e capítulos, quando uma citação final aparece.

Compilando com ambos pdflatexe xelatexo resultado é o mesmo.

\documentclass{memoir}

\usepackage{ifxetex}
\ifxetex
  \usepackage{fontspec}
%  \setmainfont{Linux Libertine O}
\fi

\makeatletter
% fix latex's habit of resetting ' during \write
\begingroup
\obeylines\obeyspaces%
\catcode`\'\active%
\gdef\@resetactivechars{%
\def^^M{\@activechar@info{EOL}\space}%
\def {\@activechar@info{space}\space}}%
\endgroup

\renewcommand{\cftchapteraftersnumb}{\hskip1sp\relax}
\let\ORIM@sect\M@sect
\def\M@sect#1#2#3#4#5#6[#7][#8]#9{%
  \ORIM@sect{#1}{#2}{#3}{#4}{#5}{#6}[\hskip1sp\relax#7][\hskip1sp\relax#8]{\hskip1sp\relax#9}%
}
\catcode`'=\active
\protected\def'{%
  \ifvmode
    `%
  \else
    \ifmmode
      \expandafter\expandafter\expandafter\active@math@prime % for math
    \else
      \relax
      \ifdim\lastskip=1sp
        `%
      \else
        \ifdim\lastskip>0pt
          `%
        \else
          \rq
        \fi
      \fi
    \fi
  \fi
}
% redefine \pr@m@s to look for an active '
\def\pr@m@s{%
  \ifx'\@let@token
    \expandafter\pr@@@s
  \else
    \ifx^\@let@token
      \expandafter\expandafter\expandafter\pr@@@t
    \else
      \egroup
    \fi
  \fi}
\makeatother

\begin{document}
\tableofcontents
\chapter{'Chapter'}

\section{'Quoted'}

He said, 'the cats' hats can't fit me'.

'Ouch,' he said.

Some 'derivatives' $f'+f''+f'''$.

\end{document}

Responder2

Se o apóstrofo e a aspa final não precisarem ser distinguidos, você pode tentar:

\def\leftquote{`}\def\rightquote{'}

\catcode`\'=13
\def'{\ifvmode\leftquote \else \ifdim\lastskip=0pt \rightquote \else \leftquote\fi\fi}

He said, 'the cats' hats can't fit me'.

Se o documento usar essas "aspas duplas" e você precisar digitá-las, poderá usar a seguinte definição:

\def\leftqquote{``}\def\rightqqoute{''} % or another definition, can depend on fonts
                                        % put this definition before \catcode`\'=13
\catcode`\"=13
\def"{\bgroup\def"{\rightqqoute\egroup}\leftqquote}

The normal "quotes" are here.

Editar: como houve comentários sobre 'o modo matemático, como `$f'$, adicionei esta funcionalidade aqui:

\def\leftquote{`}\def\rightquote{'}

\catcode`\'=13
\def'{\ifmmode \expandafter\mathprime \else\ifvmode \leftquote \else
        \ifdim\lastskip=0pt \rightquote \else \leftquote\fi\fi\fi}
\def\mathprime{^\bgroup\catcode`\'=12 \csname prim@s\endcsname}

Ao contrário da resposta aceita, não reescrevo a \pr@m@smacro, apenas defino o catcode temporário como 12. Esta solução funciona tanto no TeX simples quanto no LaTeX, porque \prim@sa macro é usada em ambos os pacotes de macro com o mesmo significado.

Responder3

Se entendi seu fluxo de trabalho corretamente, parece que (a) há um processo que cria um arquivo .tex compilável que apresenta alguns problemas e (b) você precisa resolver esses problemas antes de executar o arquivo .tex por meio do LaTeX. Além disso, o principal problema parece ser que aspas "burras" (simples) são usadas em todo o arquivo tex e que você deseja encontrar uma maneira de substituir alguns dos caracteres de aspas simples (também conhecidos como caracteres de apóstrofo) por caracteres de aspas crases ( também conhecido como crases). Você não indicou explicitamente em qual idioma seu documento está definido, então presumirei por enquanto que está em inglês.

  • Se os caracteres de apóstrofo problemáticos ocorrerem apenas no meio da frase (e, portanto, forem precedidos por caracteres de espaço) e não no início das linhas, suponho que você possa iniciar um editor e substituir todas as instâncias de space-apostrophepor space-backtick.

  • Se os caracteres de apóstrofo problemáticos puderem ocorrer no início das linhas, você precisará verificar se o seu editor pode realizar uma pesquisa e substituição de newline_char-apostrophefor newline_char-backtick. Como você não indicou qual editor (se houver) escolher, não posso oferecer conselhos mais específicos sobre como realizar essa tarefa.

Embargo: Ambos os métodos (e métodos automatizados de forma semelhante)nãoproduza resultados corretos se você tiver expressões "literárias" como 'tis- abreviação de "it is" - em seu texto de entrada. (O apóstrofo indica uma elisão em vez do início de uma citação em tais circunstâncias, e o apóstrofo deve, portanto,nãoser substituído por um backtick.)

informação relacionada