引用符の自動アポストロフィ

引用符の自動アポストロフィ

関連する問題を取り上げた他の質問もいくつかありますが、私の問題を正確にカバーするものは見つかりませんでした。

XMLから変換したテキストで、アポストロフィを'3つの異なる意味(引用開始、引用終了、略語と属格(can'tcats'など))で使用しています。アポストロフィを'そのまま維持する方法はありますか?引用符の先頭以外のすべてのケースを ` に置き換える必要がありますか? ちなみに、私は元の文書で実際に 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}

ここに画像の説明を入力してください

仕様では、2 行目にはカンマの後に引用符が開いていることに注意してください。

ノート

  • \protected使用されるか\section{A 'quoted'}失敗する
  • \section{'quoted'}失敗するだろうし、これについてできることはあまりない

次の方法は、末尾に引用符が付く場合のセクションと章のタイトルの問題を修正するようです。

両方でコンパイルするpdflatexxelatex結果は同じになります。

\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 に戻すだけです\prim@s。マクロは両方のマクロ パッケージで同じ意味で使用されるため、このソリューションはプレーン TeX と LaTeX の両方で機能します。

答え3

あなたのワークフローを正しく理解しているなら、(a) コンパイル可能な .tex ファイルを作成するプロセスがあり、そのプロセスにいくつかの問題がある (b) .tex ファイルを LaTeX で実行する前にこれらの問題に対処する必要があるようです。さらに、主な問題は、tex ファイル全体で「ダム」(単一) 引用符が使用されており、一部の単一引用符文字 (別名アポストロフィ文字) をバッククォート文字 (別名バックティック) に置き換える方法を見つけたいということのようです。ドキュメントがどの言語で設定されているかは明示的に示されていないため、今のところは英語であると想定します。

  • 問題のあるアポストロフィ文字が文の途中の位置にのみ出現し(したがって、その前にスペース文字がある)、行の先頭には出現しない場合は、エディターを起動して、 のすべてのインスタンスを に置き換えることができると思いspace-apostropheますspace-backtick

  • newline_char-apostrophe問題となるアポストロフィ文字が行の先頭に出現する可能性がある場合には、エディターがの検索と置換を実行できるかどうかを確認する必要がありますnewline_char-backtick。どのエディター (ある場合) を選択するかを指定していないため、このタスクを実行する方法についてより具体的なアドバイスを提供することはできません。

警告: これらの方法(および同様に自動化された方法)は両方ともない入力テキストに「it is」の略語のような「文学的な」表現が含まれている場合、正しい結果を生成します'tis。(このような状況では、アポストロフィは引用符の開始ではなく省略を示すため、アポストロフィはないバックティックに置き換えられます。

関連情報