タイトルケースの頭字語

タイトルケースの頭字語

文書の中で頭字語を使用したい場合があります。頭字語をタイトルケースで表示したい場合もあります (たとえば、タイトルに表示される場合)。*

*タイトルに限らず、すべての環境で動作する必要があります。

この質問のバリエーションはサイト全体で尋ねられていますが、提案された解決策はどれも実際には機能しません。最も近い例は、用語集ファイル全体を書き直す必要があるものですが、これは他のドキュメントや他の人々と共有されているため、やりたくありません。

提案された 3 つのソリューションでは titlecaps、mfirstuc、stringstrings が使用されていますが、いずれも頭字語では機能しません。

\documentclass{article}
\usepackage{glossaries}
\usepackage{titlecaps}
\usepackage{mfirstuc}
\usepackage{stringstrings}

\newacronym{srs}{SRS}{spaced repetition system}

\begin{document}
  \titlecap{\gls{srs}}
  \capitalisewords{\gls{srs}}
  \capitalizetitle{\gls{srs}}
\end{document} 

用語集を修正することなく、できればTexファイルに膨大な量の不可解なコードを含めずに、頭字語の最初の文字を大文字にするにはどうすればよいでしょうか。時々?

編集: 明確にするために、 やSpaced Repetition Systemではなくおよび を取得する方法を探しています 。Spaced repetition systemSPACED REPETITION SYSTEM

答え1

\capitialisewordsは、引数のスペースで区切られた各要素に適用することで機能します\makefirstuc。 の場合\capitalisewords{\gls{src}}、引数にスペースがないため、単に が実行されます\makefirstuc{\gls{src}}

\makefirstuc大文字と小文字を変更する方法を決定する際に、一連のルールを適用します。

  1. 引数がコマンドで始まり、そのコマンドの後に引数が続く場合、内部引数の最初のオブジェクトに大文字化が適用されます。
  2. 引数がコマンドで始まり、そのコマンドの後に引数が続かない場合は、コマンドに大文字化が適用されます (コマンドが である場合は\protect、大文字化は破棄され、ルールが再適用されます)。
  3. 引数がコマンドで始まらない場合は、コマンドの最初のオブジェクトに大文字化が適用されます。

例:

  • \makefirstuc{\emph{word}}\emph{\uppercase word}(最初のケース)になる
  • \makefirstuc{\oe-ligature}\uppercase\oe-ligature(2番目のケース)
  • \makefirstuc{word}なる\uppercase word

(実際に使用される大文字のコマンドは であり、または\mfirstucMakeUppercaseとして定義できます。)\MakeUppercase\MakeTextUppercase

\makefirstuc{\gls{src}}最初のケースに該当します。これは、 を実行しようとしていることを意味します\gls{\uppercase src}。つまり、 のケースを変更しようとしているのです。ラベル

大文字と小文字の変更を必要とする実際のテキストが の引数\makefirstuc(または\capitialisewords) 内に隠れている場合、最初の文字にはアクセスできません。 は\gls堅牢であるため、引数として渡される前に展開することさえできません。大文字と小文字の変更はコマンドの内部深くで実行する必要があるため、glossariesパッケージが を提供するのはこのためです。\Gls

同様のパッケージが、大文字と小文字を変更する必要があるテキスト内の書式設定コマンド (など\emph) の存在をどのように処理するかはわかりませんが、堅牢なコマンド内に埋め込まれている場合は、どのパッケージもテキストにアクセスできません。

ここでの唯一の解決策は、拡張可能次のようなコマンドです:

\documentclass{article}

\usepackage{glossaries}

\newacronym{srs}{SRS}{spaced repetition system}

\begin{document}
  \ecapitalisewords{\glsentrylong{srs}}
\end{document}

これは実際にはページ見出しでよりうまく機能します。各ページヘッダーをエントリの場所リストに追加することはほとんど望ましくないためです。これは、\glsセクションまたは章の見出しで使用した場合に発生する可能性があります。(\section、\chapter、\caption などで \gls などのコマンドを使用しないのはなぜですか?

もちろん、次のようなカスタム コマンドを定義することもできます。

\newcommand*{\TCac}[1]{\ecapitalisewords{\glsentrylong{#1}}}

または(インデックスとハイパーリンク)

\newcommand*{\iTCac}[2][]{\glsdisp[#1]{#2}{\ecapitalisewords{\glsentrylong{#2}}}}

編集:

\ecapitialisewords使用の際はご注意ください完全に引数を展開します。テキストにコマンドが含まれている場合は予期しない結果が生じる可能性があります。例:

\documentclass{article}

\usepackage{xcolor}
\usepackage{glossaries}

\newcommand*{\strong}[1]{\textcolor{red}{\textbf{#1}}}

\newacronym{srs}{SRS}{\strong{spaced} repetition system}

\newcommand*{\TCac}[1]{\ecapitalisewords{\glsentrylong{#1}}}

\begin{document}

\TCac{srs}.

\end{document}

これは一見するとケース1のように見えます\strong{spaced}が、完全な展開は、今度は次のことをしようとしていることを意味します。

\capitialisewords{\protect\leavevmode{\protect\color{red}\protect\textbf{spaced}}  repetition system}

これは規則に従います。初期値を破棄し\protect、ケース1を適用します。これは次のようになります。

\leavevmode{\uppercase\protect\color{red}\protect\textbf{spaced}}

これは誤りです。解決策は 2 つあります。堅牢なコマンドのみを使用するか、

\newrobustcmd*{\strong}[1]{\textcolor{red}{\textbf{#1}}}

または、まずフィールドの値を取得し、それをコマンドに保存して\glsfetchfield、次に適用します\capitialisewords

\documentclass{article}

\usepackage{xcolor}
\usepackage{glossaries}

\newcommand*{\strong}[1]{\textcolor{red}{\textbf{#1}}}

\newacronym{srs}{SRS}{\strong{spaced} repetition system}

\newrobustcmd*{\TCac}[1]{%
 \glsfieldfetch{#1}{long}{\phrase}%
 \expandafter\capitalisewords\expandafter{\phrase}%
}

\begin{document}

\TCac{srs}.

\end{document}

ここでもまだ問題があります。キーの値は完全に拡張されたままです。(エントリを定義した後、longを使用して値を表示できます。これは、フィールドの値を格納するために使用される内部コマンドで を使用します。) これは、キーのフィールド拡張がデフォルトでオンになっているために発生します。これをオフにするには、 を使用します。\showglslong{srs}\showlonglong\glsnoexpandfields

\documentclass{article}

\usepackage{xcolor}
\usepackage{glossaries}

\glsnoexpandfields

\newcommand*{\strong}[1]{\textcolor{red}{\textbf{#1}}}

\newacronym{srs}{SRS}{\strong{spaced} repetition system}

\newrobustcmd*{\TCac}[1]{%
 \glsfieldfetch{#1}{long}{\phrase}%
 \expandafter\capitalisewords\expandafter{\phrase}%
}

\begin{document}

\TCac{srs}.

\end{document}

これで正常に動作するようになりました。

\xcapitalisewordsはのショートカットなので、\expandafter\capitalisewords\expandafter次のように実行できます。

\newrobustcmd*{\TCac}[1]{%
 \glsfieldfetch{#1}{long}{\phrase}%
 \xcapitalisewords{\phrase}%
}

v4.22以降ではglossaries

\glsentrytitlecase{src}{long}

これは実質的に上記の例と同じことを行います\TCacが、2 番目の引数はフィールド名 (例:firstまたはtextまたはdesc) です。

答え2

パッケージを使用していますtitlecaps

\documentclass{article}
\usepackage{glossaries}
\usepackage{titlecaps}
\newacronym{srs}{SRS}{spaced repetition system}
\begin{document}
\titlecap{\glsentrylong{srs}}
\end{document} 

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

\Addlcwords{}指定した単語を大文字から除外する機能を使用できることに注意してください。さらに、何を大文字にするかを判断するときに、(ほとんどの)句読点と括弧を自動的にマスクします。

\documentclass{article}
\usepackage{glossaries}
\usepackage{titlecaps}
\newacronym{srs}{SRS}{spaced repetition, of an (ocular) system}
\begin{document}
\titlecap{\glsentrylong{srs}}

\Addlcwords{an of}
\titlecap{\glsentrylong{srs}}
\end{document} 

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

補足(編集済み)

OPはコメントで、この方法はセクションの見出しでは機能しないようだと述べている。 新しいACMフォーマットhttps://www.acm.org/publications/proceedings-template) 問題は ではないようです\titlecapが、これは\glsentrylongセクション見出しでは機能しません。次の回避策で、\edefセクション見出しで使用する前に頭字語を入力します。

\documentclass{sig-alternate-05-2015}
\usepackage{glossaries}
\usepackage{titlecaps}
\Addlcwords{an of}
\newacronym{srs}{SRS}{spaced repetition, of an (ocular) system}
\begin{document}
\edef\tmp{\glsentrylong{srs}}
\section{This is  \expandafter\titlecap\expandafter{\tmp} ok? }
\titlecap{\glsentrylong{srs}}
\end{document} 

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


バージョンは、以下に示すとおりです (「capitalize」のスペルに注意してください)。ただし、とstringstringsの両方の著者として、効率性の観点から、このタスクにはではなくを使用することを強くお勧めします。stringstringstitlecapstitlecapsstringstrings

\documentclass{article}
\usepackage{glossaries}
\usepackage{stringstrings}
\newacronym{srs}{SRS}{spaced repetition system}
\begin{document}
\capitalizewords{\glsentrylong{srs}}
\end{document} 

関連情報