따옴표에 대한 자동 아포스트로피

따옴표에 대한 자동 아포스트로피

이쪽에는 관련 문제를 해결하는 몇 가지 다른 질문이 있지만 내 문제를 정확히 다루는 질문은 찾지 못했습니다.

세 가지 다른 의미로 아포스트로피를 사용하는 텍스트(XML에서 변환됨)가 있습니다 '. 인용 시작, 인용 종료, 약어 및 속격( can't, cats'등)에 사용됩니다. 아포스트로피를 '그대로 유지하는 방법이 있나요?시작 따옴표를 제외한 모든 경우, 여기서 `?로 바꿔야 합니다. 참고로 저는 원본 문서에서 실제로 XeLaTeX를 사용하고 있는데, 문제가 될지는 잘 모르겠습니다.

\documentclass{memoir}

\begin{document}

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

\end{document}

어느 것을 사용할지 결정하는 방법은 다음과 같습니다.

  • 아포스트로피 앞에 텍스트 문자가 있으면 그대로 유지하세요.
  • 앞에 다른 항목(공백 포함)이 있으면 `로 변경하세요.

메모:단어 시작 부분(예: 'tis)에 약어 아포스트로피가 내 문서에 표시될 가능성이 없습니다.

답변1

나는 앞에 공백이 있거나 전혀 아무것도 없을 때만 (인용 열기)을 원한다고 생각합니다 .'

이것은 수학 모드에도 대응합니다.

\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}

여기에 이미지 설명을 입력하세요

두 번째 줄에는 귀하의 사양에 따라 쉼표 뒤에 열린 따옴표가 있습니다.

노트

  • \protected사용되었거나 \section{A 'quoted'}실패할 것입니다.
  • \section{'quoted'}실패할 것이고 이에 대해 할 수 있는 일이 많지 않습니다.

다음은 후행 인용문이 나타날 때 섹션 및 장 제목 문제를 해결하는 것으로 보입니다.

pdflatex둘 다 컴파일하면 xelatex결과는 동일합니다.

\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}

답변2

아포스트로피와 끝 따옴표를 구별할 필요가 없으면 다음을 시도해 볼 수 있습니다.

\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'.

문서에서 이러한 "큰따옴표"를 사용하고 이를 조판해야 하는 경우 다음 정의를 사용할 수 있습니다.

\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.

편집: `$f'$와 같은 수학 모드에 대한 주석이 있었기 때문에 '여기에 이 ​​기능을 추가합니다.

\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}

허용된 답변과 달리 매크로를 다시 작성하지 않고 \pr@m@s임시 catcode를 12로 다시 설정합니다. 이 솔루션은 일반 TeX와 LaTeX 모두에서 작동합니다. \prim@s매크로는 동일한 의미로 두 매크로 패키지 모두에서 사용되기 때문입니다.

답변3

귀하의 작업 흐름을 올바르게 이해하면 (a) 몇 가지 문제가 있는 컴파일 가능한 .tex 파일을 생성하는 프로세스가 있고 (b) LaTeX를 통해 .tex 파일을 실행하기 전에 이러한 문제를 해결해야 하는 것처럼 보입니다. 더욱이 주요 문제는 tex 파일 전체에서 "멍청한"(작은 따옴표)이 사용되며 일부 작은 따옴표 문자(일명 아포스트로피 문자)를 역따옴표 문자( 일명 백틱). 문서가 어떤 언어로 설정되어 있는지 명시적으로 지정하지 않았으므로 지금은 영어로 가정하겠습니다.

  • 문제가 있는 아포스트로피 문자가 줄의 시작 부분이 아닌 문장 중간 위치에만 발생하고(따라서 공백 문자가 앞에 표시되는 경우) 편집기를 실행하고 의 모든 인스턴스를 로 바꿀 수 있다고 가정 space-apostrophe합니다 space-backtick.

  • newline_char-apostrophe문제가 있는 아포스트로피 문자가 줄 시작 부분에 나타날 수 있는 경우 편집기에서 for 검색 및 바꾸기를 수행할 수 있는지 확인해야 합니다 newline_char-backtick. 어떤 편집기(있는 경우)를 선택했는지 지정하지 않았으므로 이 작업을 수행하는 방법에 대해 더 구체적인 조언을 제공할 수 없습니다.

경고: 이 두 가지 방법(및 유사하게 자동화된 방법)은 모두~ 아니다'tis입력 텍스트에 "it is"의 약어 인 "문학적" 표현이 있는 경우 올바른 결과를 생성합니다 . (아포스트로피는 그러한 상황에서 인용의 시작보다는 생략을 의미하므로 아포스트로피는~ 아니다백틱으로 대체됩니다.)

관련 정보