Отключить умные (контекстные) кавычки для всего документа?

Отключить умные (контекстные) кавычки для всего документа?

Это возможнозапрещатьумные (контекстные) кавычки для всего документа? Если да, то как?

В частности, можно ли оставить одинарную кавычку ', двойную кавычку " и обратную кавычку ` как есть, используя какой-либо параметр или метод, чтобы напрямую отключить такие замены?

\documentclass{article}
% minimal document which illustrates the issue.
\begin{document}

Can "double quotes", 'single quotes' and `backticks`
substitutions to any curly, smart, quote, contextual 
be switched off for the whole document?

\end{document}

Пакетupquoteкажется, ограничен разделами \ver­ba­timтипа. Пакетcsquotesимеет команды и среды для определяемых пользователем «умных кавычек»… тем не менее, некоторые не смогли полностью отключить смарт-кавычки.

Вопрос«Есть ли пакет upquote для основного текста, а не только дословного текста?»ищетпакет плюс макросыи вместо того, чтобывыключатель.

Системное воздействиедобавить пакетыпротив.переключить переключатель (опция?)имеют внутренние различия.

С одной стороны,"добавление пакета"этовниз по течениюподход. Файлы нижестоящего уровня добавили кластер и сложность в файлах авторов. Такой как, добавьте этот пакет xдля макроса y, затем добавьте этот пакет z, затем переопределите a, затем определите b, чтобы он bсам мог быть переопределен. Каждый добавленный пакет, определение и переопределение также, вероятно, добавляет некоторую вычислительную сложность к динамическому выполнению во время выполнения.

С другой стороны,"переключить переключатель"этовверх по течениюподход. Я предполагаю, что эти замены кавычек берут начало в различных движках TeX/LaTeX. Гипотетически или в идеале, умный переключатель опции кавычек может быть скомпилирован и связан для эффективного выполнения в источнике … с некоторой псевдологикой, например:

// over simplified pseudo code
if smartQuotesOption == true {
  // make quote substitutions happen
}
else {
  // just skip the substitutions.
  // so, maybe nothing or little to do.
}

тогда концептуально пользователи будут использовать параметр командной строки:

pdflatex --no-smart-quotes document.tex

или используйте какой-либо прямой переключатель, например, следующий, в файлах LaTeX/TeX:

\smartquotesdisable
\smartquotesenable % default for backward compatibility

Подобные переключатели включения/выключения интеллектуальной подстановки существуют в средах создания документов, таких как различные инструменты разметки pandocи основные текстовые процессоры.

Итак, «Могут ли быть просто умные замены кавычеквыключено?" ...

Если да, то отлично.

Если нет, то где можно подать запрос на функцию для переключателя умной замены? Или узнать, есть ли такая функция в дорожной карте? :-)

решение1

У меня есть некоторые сомнения по поводу изменения catcode asciigraveи , quotedblпоскольку эти символы часто используются для изменения catcode других символов. Но, возможно, это нормально.

Обновлено для работы с pdflatex, xelatex, и lualatex.

\documentclass{article}

\usepackage{ifxetex}
\usepackage{ifluatex}
\newif\ifxetexorluatex
\ifxetex
  \xetexorluatextrue
\else
  \ifluatex
    \xetexorluatextrue
  \else
    \xetexorluatexfalse
  \fi
\fi

\ifxetexorluatex
  \usepackage{fontspec}
  \begingroup
    \catcode 34=13
    \catcode 39=13
    \catcode 96=13
    \gdef"{\textquotedbl}
    \gdef'{\textquotesingle}
    \gdef`{\textasciigrave}
  \endgroup
\else
  \usepackage[TS1,T1]{fontenc}
  \begingroup
    \catcode 39=13
    \catcode 96=13
    \gdef'{{\fontencoding{TS1}\selectfont\textquotesingle}}
    \gdef`{{\fontencoding{TS1}\selectfont\textasciigrave}}
  \endgroup
\fi

\def\smartquotedisable{%
  \ifxetexorluatex
    \catcode 34=13
  \fi
  \catcode 39=13
  \catcode 96=13
}
\def\smartquoteenable{%
  \ifxetexorluatex
    \catcode 34=12
  \fi
  \catcode 39=12
  \catcode 96=12
}

\begin{document}

`Hello'

"Hello"

``Hello''

\smartquotedisable

`Hello'

"Hello"

``Hello''

\smartquoteenable

`Hello'

"Hello"

``Hello''

\end{document}

выход

Связанный контент