제목 케이스 약어

제목 케이스 약어

때때로 내 문서에서 약어를 사용하고 싶습니다. 때로는 제목에 두문자어가 표시되기를 원할 때도 있습니다(예: 제목에 표시되는 경우).*

*특히 타이틀이 아닌 모든 환경에서 작동하려면 이 기능이 필요합니다.

이 질문에 대한 변형이 사이트 전체에서 요청되었지만 제안된 솔루션 중 어느 것도 실제로 작동하지 않습니다. 가장 가까운 예는 용어집 파일 전체를 다시 작성해야 하는 경우인데, 이 파일은 다른 문서 및 다른 사람들과 공유되기 때문에 나는 원하지 않습니다.

제안된 세 가지 솔루션은 titlecaps, mfirstuc 및 stringstring을 사용하지만 둘 중 어느 것도 두문자어에서는 작동하지 않습니다.

\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(두 번째 경우 )
  • \makefirstuc{word}된다\uppercase word

(사용된 대문자 명령은 실제로 이며 , 또는 \mfirstucMakeUppercase로 정의될 수 있습니다 .)\MakeUppercase\MakeTextUppercase

따라서 \makefirstuc{\gls{src}}첫 번째 경우에 속합니다. 이는 을 시도한다는 것을 의미합니다 \gls{\uppercase src}. 즉, 케이스를 변경하려고 시도합니다.상표.

\makefirstuc대소문자 변경이 필요한 실제 텍스트가 (or ) 인수 내에 숨겨져 있으면 \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}}

이는 잘못된 것입니다. 두 가지 해결책이 있습니다. 강력한 명령만 사용하십시오.

\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}항목을 정의한 후 를 사용하여 값을 표시할 수 있습니다 . 이는 \show필드 값을 저장하는 데 사용되는 내부 명령에 사용됩니다 long.) 이는 키에 대해 필드 확장이 기본적으로 켜져 있기 때문에 발생합니다 long. 다음을 사용하여 이 기능을 끌 수 있습니다 \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하지만 두 번째 인수는 필드 이름(예: firstor textor 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} 

여기에 이미지 설명을 입력하세요


버전은 stringstrings아래와 같습니다("capitalize" 철자 참고). 그러나 stringstrings와 의 저자로서 titlecaps나는 효율성을 위해 이 작업 titlecaps보다는 사용하는 것을 강력히 권장합니다 stringstrings.

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

관련 정보