
Ich versuche verzweifelt, \titlecap
den Druck zu machenSequenz-zu-SequenzalsSequenz-zu-Sequenz.
Das Hinzufügen des Wortes "to" zur Liste der kleingeschriebenen Wörter (also \Addlcwords
) scheint jedoch nicht auszureichen, die definierten Ausnahmen scheinen für Wörter mit Bindestrich ignoriert zu werden – was zuSequenz-zu-Sequenz.
Gibt es Optionen, um das oben genannte Ergebnis zu erreichen?
MVE:
\documentclass{article}
\usepackage{titlecaps}
\Addlcwords{to}
\begin{document}
\titlecap{sequence-to-sequence}
\end{document}
Antwort1
Ich habe nachgeschaut, warum sich das so verhält (sieheNACHTRAG). Man hätte gehofft, dass es ausreicht, es zur Liste der Kleinbuchstaben hinzuzufügen (ich habe mir den Code schon eine Weile nicht mehr angesehen). In der Zwischenzeit ... wie kann man ein solches Verhalten überschreiben?
Normalerweise würden Sie das „to“ in einschließen \textnc{to}
, was „keine Änderung“ bedeutet, was den Großschreibungsimperativ innerhalb von a außer Kraft setzt \titlecap
und außerhalb davon nichts bewirkt. In Ihrem speziellen Beispiel sequence-to-sequence
ist das Wort jedoch das erste Wort des Arguments, das speziell behandelt wird (es wird groß geschrieben, auch wenn es in der Liste der Kleinbuchstaben enthalten ist).
Sie benötigen also einen anderen Ansatz ... Siehe S. 3 der Dokumentation: „Um zu verhindern, dass ein Wort betitelt wird (um es in Kleinbuchstaben zu zwingen), kann ihm unmittelbar ein vorangestellt werden \relax
. Auf diese Weise \relax
wird das betitelt und nicht das folgende Wort. Diese Methode kann für einmalige Ausnahmen bei der Betitelung verwendet werden oder um das oben beschriebene Problem der geschweiften Klammern zu lösen, wie in \{\relax if\}
.“
Die 1. Zeile zeigt es ohne Bindestriche. Die 2. Zeile ist der vom OP dargestellte Fall mit der \relax
Überschreibung. Die 3. Zeile zeigt, wie es geht, wenn das Wort nicht Teil des ersten Wortes des Arguments ist. Die letzte Zeile zeigt, wie \textnc
man außerhalb von arbeitet \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}
NACHTRAG
Es stellt sich heraus, dass der Code zwar eine Großschreibung nach Verbindungssymbolen wie [
, (
, -
, usw. auslösen kann (was er tat, was Ihnen nicht gefiel), die einzige Möglichkeit, die Liste mit Kleinbuchstaben zu verwenden, um die Großschreibung von -to-
in Ihrem Beispiel zu verhindern (theoretisch, später mehr dazu), besteht darin, ein kleingeschriebenes Wort als zu definieren sequencetosequence
. Aber auch dies führt nicht zu dem gewünschten Ergebnis, da es die s
Großschreibung der Buchstaben zusammen mit dem verhindern würde to
.
Dieses merkwürdige Verhalten tritt auf, weil die vom Paket verwendete Methode darin besteht, Symbolzeichen wie (
, [
, usw. bei der Suche nach Kleinbuchstaben auszublenden (zu ignorieren).
Es gibt jedoch eine zusätzliche Komplikation, nämlich dass ich festgestellt habe, dass -
insbesondere der Bindestrich nicht wie die anderen Symbole ausgeblendet wird. Ich muss genauer hinschauen, um zu entscheiden, ob ich einen gültigen Grund für diese Ausnahme hatte.
Ich kann sagen, dass man den Bindestrich folgendermaßen behandeln könnte, wenn man ihn wie Klammern, eckige Klammern usw. behandeln wollte:
\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}
Wie ich jedoch oben angemerkt habe, ist dies auch nicht das gewünschte Ergebnis, da die s
Großschreibung ebenfalls unterdrückt wird.
Was Sie suchen, hängt davon ab, ob ich nach den nicht-alphabetischen Symbolen eine neue Suche nach Kleinbuchstaben durchführen kann. Ich vermute, dass ich dies bereits beim Entwurf des Pakets erfolglos versucht habe. Wenn sich jedoch eine Lösung ergibt, werde ich das Paket aktualisieren.