
Я отчаянно пытаюсь сделать \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
также происходит подавление капитализации.
То, что вы ищете, будет определяться тем, смогу ли я выполнить новый поиск строчных слов после неалфавитных символов. Я предполагаю, что я уже безуспешно пытался сделать это во время проектирования пакета. Однако, если решение появится, я обновлю пакет.