titlecap – не пишите заглавными буквами слово «to» с дефисом

titlecap – не пишите заглавными буквами слово «to» с дефисом

Я отчаянно пытаюсь сделать \titlecapпечатьпоследовательность-к-последовательностикакПоследовательность-в-последовательность.

Однако добавление слова «to» в список слов, написанных строчными буквами (т. е. \Addlcwords), по-видимому, недостаточно, определенные исключения, по-видимому, игнорируются для слов, написанных через дефис, что приводит кПоследовательность-в-последовательность.

Существуют ли какие-либо варианты достижения вышеупомянутого результата?

МВЕ:

\documentclass{article}
\usepackage{titlecaps}
\Addlcwords{to}
\begin{document}
    \titlecap{sequence-to-sequence}
\end{document}

решение1

Я попытался выяснить, почему это так себя ведет (см.ПРИЛОЖЕНИЕ). Можно было бы надеяться, что добавления его в список строчных букв будет достаточно (я давно не заглядывал в код). А пока... как переопределить такое поведение?

Обычно вы заключаете "to" в \textnc{to}, что означает "без изменений", что переопределяет заглавный императив внутри a \titlecapи не делает ничего за его пределами. Однако в вашем конкретном примере слово sequence-to-sequenceявляется первым словом аргумента, которое обрабатывается особым образом (оно пишется с заглавной буквы, даже если находится в списке строчных букв).

Итак, вам нужен другой подход... См. стр. 3 документации: "Чтобы предотвратить озаглавливание слова (чтобы принудительно перевести его в нижний регистр), ему можно сразу же предшествовать \relax. Таким образом, \relaxозаглавлено будет , а не следующее слово. Этот метод можно использовать для одноразовых исключений из озаглавливания или для преодоления проблемы с фигурными скобками, описанной выше, как в \{\relax if\}".

Первая строка показывает это без дефисов. Вторая строка — случай, представленный автором, с переопределением \relax. Третья — как это сделать, когда слово не является частью первого слова аргумента. Последняя показывает \textncработу за пределами \titlecap.

\documentclass{article}
\usepackage{titlecaps}
\Addlcwords{to}
\begin{document}
\titlecap{sequence to sequence}% WITHOUT HYPHENS WORKS AS EXPECTED

\titlecap{sequence-\relax to-sequence}% PREPEND \relax FOR SPECIAL CASE EXCEPTIONS

\titlecap{a sequence-\textnc{to}-sequence}% ENCLOSE WITH \textnc

          a sequence-\textnc{to}-sequence
\end{document}

введите описание изображения здесь

ПРИЛОЖЕНИЕ

Ну, оказывается, что, хотя код может инициировать заглавные буквы после соединительных символов, таких как [, (, -, и т. д. (что он и делал, что вам не понравилось), единственный способ использовать список строчных слов для предотвращения заглавных букв -to-в вашем примере (теоретически, подробнее позже) — это определить строчное слово как sequencetosequence. Но это также не даст вам желаемого, потому что это помешает sбуквам стать заглавными, вместе с to.

Такое странное поведение происходит из-за того, что метод, используемый пакетом, заключается в отсеивании (игнорировании) символов, таких как (, [и т. д., при поиске слов в нижнем регистре.

Однако есть еще одно осложнение, и я обнаружил, что дефис -в частности не экранируется, как другие символы. Мне придется присмотреться внимательнее, чтобы решить, была ли у меня веская причина сделать это исключение.

Могу сказать, что если бы кто-то хотел обращаться с дефисом так же, как со скобками, квадратными скобками и т. д., то это можно было бы сделать следующим образом:

\documentclass{article}
\usepackage{titlecaps}
\makeatletter
% THESE ARE THE PUNCTUATION MARKS SCREENED OUT FOR 
% LOWER CASE WORD SEARCH
\renewcommand\kill@punct{%
\catcode`-=9 %
\catcode`.=9 %
\catcode`,=9 %
\catcode`:=9 %
\catcode`;=9 %
\catcode`(=9 %
\catcode`)=9 %
\catcode`[=9 %
\catcode`]=9 %
\catcode`?=9 %
\catcode`!=9 %
\catcode``=9 %
\catcode`'=9 %
}

\renewcommand\restore@punct{%
\catcode`-=12 %
\catcode`.=12 %
\catcode`,=12 %
\catcode`:=12 %
\catcode`;=12 %
\catcode`(=12 %
\catcode`)=12 %
\catcode`[=12 %
\catcode`]=12 %
\catcode`?=12 %
\catcode`!=12 %
\catcode``=12 %
\catcode`'=12 %
}
\makeatother
\Addlcwords{sequencetosequence}
\begin{document}
\titlecap[x]{sequence-to-sequence}
\end{document}

Однако, как я отметил выше, это также не является желаемым результатом, поскольку sтакже происходит подавление капитализации.

введите описание изображения здесь

То, что вы ищете, будет определяться тем, смогу ли я выполнить новый поиск строчных слов после неалфавитных символов. Я предполагаю, что я уже безуспешно пытался сделать это во время проектирования пакета. Однако, если решение появится, я обновлю пакет.

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