Q&A 마당은 텍 관련 질문/답변을 위해 만들었습니다.
- 로그인 없이 자유롭게 글을 읽고 쓸 수 있는 철학은 처음과 같이 계속됩니다.
- 질문 전에 아래를 읽어 보세요. 좋은 질문이 좋은 답을 받을 수 있는 좋은 방법입니다.
- 질문에 맞는 제목을 붙이세요. 질문의 내용과 관련없는 "고수님", "긴급질문", "도와주세요"와 같은 제목은 답이 잘 올라오지 않습니다. 이 게시판에 올라오는 모든 글은 질문입니다. 굳이 [질문], [Q]를 적으실 필요도 없습니다.
- 내용을 충실히 적어 주시고, 같은 상황을 재현할 수 있는 최소한의 예제가 같이 있어야 합니다.
- 최소 예제는 "Minimal working example"을 읽어 보세요.
- 파일을 첨부하실 때에는 가능한 압축하여 파일 크기를 줄여서 올려주시길 바랍니다.
- 개인적으로 사용하신 글꼴이 들어 있는 경우, preparefont.sty에 관한 답변을 참조하세요.
- 스팸 글을 막기 위하여 짧은 시간 내에 다시 글이 등록되는 IP를 막거나, 광고 글을 막기 위하여 금지어로 .com, .net 등을 설정하고 있습니다. 다소간의 불편함이 있으시더라도 양해 바랍니다.
- 금지어에서 stackexchange, stackoverflow, ctan, overleaf, , github, google.com, gmail.com, .org, .io, sil.org, wiki.com, tistory.com등은 해제하였습니다.
- MathJax를 이용한 수식조판을 사용하실 수 있습니다. 여기를 참조하세요.
- 사용하는 편집기는 CKeditor입니다.
- 편집기에서 [enter]를 누르면 <p> 태그가 들어가고, 문단으로 생각하고 한 줄을 비웁니다.
- 글줄만 바꾸려면 [shift-enter]를 누르면 <BR> 태그가 들어가므로 용도에 맞게 나누어 쓸 수 있습니다.
- 수식를 문서내에 삽입하시려면 에디터를 툴바에서 [소스]를 눌러 HTML로 입력할 수 있게 바꾸신 후 <pre> </pre> tag를 사용하셔서 <pre> 여러 줄의 수식 </pre>처럼 입력하시면 좋습니다.
단어의 첫 글자만 다르게
2015.10.23 10:55
한글도 가능하면 좋겠고, 아니면 영어만 되어도 좋겠습니다.
필요한 건 아니고, 그냥 이런 게 되면 재미있겠다 싶은데요.
I am happy to join with you today in what will go down in history as the greatest ...
각 단어의 첫 글자를 대문자로 바꾸거나 색을 주거나 글꼴을 바꾸거나 하는 거죠.
첫 글자를 가져오는 것 \str_head를 쓰면 되겠는데, 그 전에 한 단어씩 가져와는 하는데 그 방법을 모르겠습니다.
댓글 7
-
negatropy
2015.10.23 11:17
-
yihoze
2015.10.23 13:11
고맙습니다.
\@gobble을 대신할 게 expl3에 있을 것 같은데 뭔지 모르겠네요.
\documentclass{article}
\usepackage{xparse}
\usepackage{xcolor}
\ExplSyntaxOn
\makeatletter
\NewDocumentCommand \emphini { +m }
{
\seq_set_split:Nnn \l_tmpa_seq {~} {#1}
\seq_map_inline:Nn \l_tmpa_seq
{
\str_set:Nx \l_tmpa_str { \str_head:n {##1} }
\textcolor{blue}{\bfseries \l_tmpa_str}\@gobble##1\space
}
}
\makeatother
\ExplSyntaxOff
\begin{document}
\emphini{I am happy to join with you today in what will go down in history as the greatest.}
\end{document}
-
negatropy
2015.10.23 14:16
굳이 \@gobble을 쓸 필요는 없어보이는데요.
\ExplSyntaxOn
\NewDocumentCommand \emphini { +m }
{
\seq_set_split:Nnn \l_tmpa_seq {~} {#1}
\seq_map_inline:Nn \l_tmpa_seq
{
\str_set:Nx \l_tmpa_str { \str_head:n {##1} }
\str_set:Nx \l_tmpb_str { \str_tail:n {##1} }
\textcolor{blue}{\bfseries \l_tmpa_str}\l_tmpb_str\space
}
}
\ExplSyntaxOff
head 제외하고 나머지 tail 부분을 정의하면 되지싶습니다.
-
yihoze
2015.10.24 12:59
지레짐작으로 \str_tail이 마지막 글자만 떼어낸다 생각했는데, 첫 글자를 제외한 나머지 전부가 꼬리군요. 매뉴얼을 읽을 때 좀 더 집중해야겠어요. 고맙습니다.
-
NDH
2015.10.24 15:34
위의 해법이 너무 심심하다;;;고 생각하시는 분이 계실까봐서... 소위 "꼬리 재귀"를 적용한 버전입니다.\documentclass{oblivoir}
\usepackage{xcolor}
\ExplSyntaxOn
\tl_new:N \l_mystr_tl
\NewDocumentCommand \test { m }
{
\test_fn:n #1 \q_nil
}
\cs_new:Npn \test_fn:n #1
{
\quark_if_nil:NTF #1
{
\display_fn:V \l_mystr_tl
\tl_clear:N \l_mystr_tl
}
{
\peek_catcode:NTF \c_space_token
{
\tl_put_right:Nn \l_mystr_tl { #1 }
\display_fn:V \l_mystr_tl
\tl_clear:N \l_mystr_tl
\space \test_fn:n
}
{
\tl_put_right:Nn \l_mystr_tl { #1 }
\test_fn:n
}
}
}
\cs_new:Npn \display_fn:V #1
{
\textcolor{blue}
{ \bfseries \exp_args:Nf \tl_to_uppercase:n { \tl_head:V #1 } }
\tl_tail:V #1
}
\ExplSyntaxOff
\begin{document}
\test{I am happy to join with you today in what will go down in history as the greatest demonstration for freedom in the history of our nation.}
\test{유구한 역사와 전통에 빛나는 우리 대한국민은}
\end{document}
-
NDH
2015.10.24 16:26
마지막의 \display_fn:V를 다음과 같이 정의하고
\cs_new:Npn \display_fn:V #1
{
\clist_if_in:NoTF \l_tmpa_clist #1
{
#1
}
{
\textcolor{blue}
{ \bfseries \exp_args:Nf \tl_to_uppercase:n { \tl_head:V #1 } }
\tl_tail:V #1
}
}
\l_tmpa_clist에 다음 단어들을 등록해두면\clist_set:Nn \l_tmpa_clist {am, in, as, for, of }
이 단어들에 대해서 첫문자 조작이 일어나지 않게 할 수 있습니다. -
yihoze
2015.10.26 09:14
\seq_set_split과 \seq_map_inline을 대신하도록, 스페이스가 올 때까지 글자를 하나씩 읽어서 하나의 단어를 식별하는 게 핵심이군요.
http://goo.gl/hjWTxv
링크에 보시면 각 단어 첫문자를 대문자화 하는 예가 있군요.
부가적으로 어떤 단어에 대해서는 변화없도록 하는 코드까지(\NoChangeCase)...