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>처럼 입력하시면 좋습니다.
긴 superscript
2016.04.11 18:42
댓글 12
-
메타
2016.04.11 19:38
-
DohyunKim
2016.04.11 21:48
루아텍을 이용하면 되지만, 그건 일단 논외로 하겠습니다.
어깨글에 하이픈이 없어도 된다면
\protected\def\mysuperscript#1{%
\begingroup
\hskip0pt
\scriptsize
\mymysuperscript#1 @ %
\endgroup
}
\def\mymysuperscript#1 {%
\ifx @#1%
\unskip
\else
\raise1ex\hbox{#1}
\expandafter\mymysuperscript
\fi
}
\let\textsuperscript\mysuperscript하이픈이 있어야 하겠다면
\def\mysuperscript#1{%
\begingroup\addfontfeature{VerticalPosition=Superior}#1\endgroup
}
\let\textsuperscript\mysuperscript
\setmainfont{Linux Libertine O}다만, 테스트해보니 libertine 글꼴은 숫자와 소문자만 sups 속성을 지원하더군요. 대문자나 구두점은 작은 글자로 바꾸지 않습니다. 글꼴만 잘 선택하면 작동한다는 말이겠지요. 그런 글꼴이 과연 있는가, 그게 무언가가 문제입니다.
-
Progress
2016.04.11 22:36
김도현 교수님 말씀대로 대문자와 구두점도 superscript로 바뀌는 폰트는 별로 없는데 EB Garamond와 윈도에 기본으로 설치되는 Palationo Linotype 정도인 것 같습니다.
*EB Garamond는 폰트 만든 사람의 철학 때문인지 볼드 폰트가 없습니다. (저는 잠깐 오토페이크볼드 옵션을 주었음)
역시 윈도7 이상 운영체제에 기본으로 포함된 폰트 가운데 Cambria와 Calibri가 있는데(세리프와 산세리프 짝으로 괜찮음) 안타깝게도 구두점이 superscript에 없습니다.
===
대/소문자, 구두점 superscript를 포함한 폰트는 참 찾기 어렵습니다.
Adobe 폰트 계열/ 텍라이브에 있는 Latin Modern/ gemtium/ junicode/ source serif pro/ source sans pro/ noto serif/ noto sans/ TeX Gyre 시리즈/ Libertine 시리즈... 다 안 들어있습니다.
-
yihoze
2016.04.12 13:58
고맙습니다. Superior 해법이 한글에는 역시나 통하지 않네요.
http://www.ktug.org/xe/index.php?document_srl=214192&mid=KTUG_QnA_board#comment_214226
을 참고하여 알려주신 방법을 expl3로 구현해 봤습니다.
\documentclass[language=korean]{hzguide}
%%\SupernoteSetup{
%% superscript=true,
%% font=\footnotesize,
%% color=darkgray,
%% space=\thinspace,
%% opening=(,
%% closing=)
%%}
\def\mystr{Lorem is simply dummy text of the printing and typesetting industry 호불호.}
\begin{document}
\mystr\supernote{\mystr}
\mystr\supernote[superscript=false]{\mystr}
\end{document}
-
DohyunKim
2016.04.12 21:35
기왕 말 나왔으니 루아텍으로도 시도해봅니다. 하이픈도 먹고 한글도 될 걸로 봅니다.
\newattribute\mysuperscriptattr \protected\def\mysuperscript#1{\begingroup \hskip0pt \mysuperscriptattr=\number\dimexpr1ex\relax \scriptsize #1\endgroup} \directlua{ local super = luatexbase.attributes.mysuperscriptattr local glyph, disc = node.id "glyph", node.id "disc" local function raise (head) for curr in node.traverse(head) do if curr.id == glyph then local yoff = node.has_attribute(curr,super) if yoff then curr.yoffset = yoff end elseif curr.id == disc and node.has_attribute(curr,super) then for _,v in ipairs{"pre","post","replace"} do curr[v] = raise(curr[v]) end end end return head end luatexbase.add_to_callback("pre_linebreak_filter", raise, "mysuperscript") } \let\textsuperscript\mysuperscript
-
yihoze
2016.04.14 08:35
루어도 expl3만큼이나 요상해 보여요. ^^
-
Progress
2016.04.15 11:40
루아 스크립트도 잘 되네요.
*fontspec 패키지의 AutoFakeBold 옵션이 지텍에서만 적용되는 줄 처음 알았습니다.
(매뉴얼에 나와 있더라고요)
-
메타
2016.04.16 13:23
저는 컴파일이 실패하던데요.
소스:
\documentclass{article}
\newattribute\mysuperscriptattr
\protected\def\mysuperscript#1{\begingroup \hskip0pt
\mysuperscriptattr=\number\dimexpr1ex\relax \scriptsize
#1\endgroup}
\directlua{
local super = luatexbase.attributes.mysuperscriptattr
local glyph, disc = node.id "glyph", node.id "disc"
local function raise (head)
for curr in node.traverse(head) do
if curr.id == glyph then
local yoff = node.has_attribute(curr,super)
if yoff then
curr.yoffset = yoff
end
elseif curr.id == disc and node.has_attribute(curr,super) then
for _,v in ipairs{"pre","post","replace"} do
curr[v] = raise(curr[v])
end
end
end
return head
end
luatexbase.add_to_callback("pre_linebreak_filter", raise, "mysuperscript")
}
\let\textsuperscript\mysuperscript
\begin{document}
Lorem Ipsum is simply dummy text of the printing and typesetting industry.\textsuperscript{Lorem Ipsum is simply dummy text of the printing and typesetting industry.}
\end{document}
에러메시지:
! Undefined control sequence.
<recently read> \newattribute
l.2 \newattribute
\mysuperscriptattr
?
뭐가 잘못된 것일까요?
-
메타
2016.04.16 13:39
oblivoir를 쓰니 위의 에러 메세지는 통과하네요.
oblivoir전용 매크로인 듯합니다.
그런데 컴파일하다 아래와 같은 메세지가 뜨면서 먹통이 되네요.
luaotfload | db : Font names database not found, generating new one.
luaotfload | db : This can take several minutes; please be patient.
LaTeX의 구조상 이호재님이 원하는 결과를 깔끔하게 출력하기 쉽지 않은데...
혹시 알고리즘이 기존에 있던 폰트를 기반으로 새로운 폰트를 만들어서 출력하는 것인가요?
-
yihoze
2016.04.18 08:27
oblivoir와 관계없습니다. \usepackage{fontspec}을 추가해 보세요.
-
메타
2016.04.18 09:46
\usepackage{fontspec}을 넣으니
oblivoir를 사용했을 때하고 똑같은 상태로 되네요.
이 글타래와 연관된 것 중에 재밌는 주제가 꽤 있더군요.
이런 것을 다루는데 고수인 이호재님이 요상하다는 생각이 들 정도이니
저같은 사람는 디따 햇갈리네요.
-
yihoze
2016.04.18 12:26
이걸 먼저 실행해 보세요.
c:\>luaotfload-tool --update --force
\documentclass{article}
\begin{document}
\begin{sloppypar}
Lorem Ipsum is simply dummy text of the printing and typesetting industry.\textsuperscript{Lorem Ipsum is simply dummy text of the printing and typesetting industry.}
\end{sloppypar}
\end{document}
textsuperscript는 원래 주석용으로 만든 것이 아니라 6^{th} Edition 같은 작은 문자열을 염두해두고 만들어서 글자들을 한 단어로 처리하는 것으로 보입니다. 위와 같이 sloppypar를 쓰면 되기는 하지만, 제 방식이 썩 좋아 보이지는 않네요.