때때로 내 문서에서 약어를 사용하고 싶습니다. 때로는 제목에 두문자어가 표시되기를 원할 때도 있습니다(예: 제목에 표시되는 경우).*
*특히 타이틀이 아닌 모든 환경에서 작동하려면 이 기능이 필요합니다.
이 질문에 대한 변형이 사이트 전체에서 요청되었지만 제안된 솔루션 중 어느 것도 실제로 작동하지 않습니다. 가장 가까운 예는 용어집 파일 전체를 다시 작성해야 하는 경우인데, 이 파일은 다른 문서 및 다른 사람들과 공유되기 때문에 나는 원하지 않습니다.
제안된 세 가지 솔루션은 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 system
SPACED REPETITION SYSTEM
답변1
\capitialisewords
\makefirstuc
인수의 각 공백으로 구분된 요소에 적용하여 작동합니다 . 의 경우 \capitalisewords{\gls{src}}
인수에 공백이 없으므로 단순히 입니다 \makefirstuc{\gls{src}}
.
\makefirstuc
사례 변경 방법을 결정할 때 일련의 규칙을 적용합니다.
- 인수가 명령으로 시작하고 해당 명령 뒤에 인수가 오는 경우 대문자는 내부 인수의 첫 번째 개체에 적용됩니다.
- 인수가 명령으로 시작하고 해당 명령 뒤에 인수가 없으면 명령에 대문자가 적용됩니다(명령이 가 아닌 경우
\protect
해당 명령은 삭제되고 규칙이 다시 적용됩니다). - 인수가 명령으로 시작하지 않으면 명령의 첫 번째 개체에 대문자가 적용됩니다.
예:
\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
하지만 두 번째 인수는 필드 이름(예: first
or text
or 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}