\documentclass{article}
\usepackage{unicode-math}
\setmainfont{Georgia}
\setmathfont[Scale=MatchLowercase]{Cambria Math}
\begin{document}
n $n \sqrt[n]{n}$
\end{document}
XeTeX로 조판할 때 위의 코드는 '차원이 너무 큽니다'라는 오류를 생성합니다. 제거하면 [Scale=MatchLowercase]
문제가 해결되지만 사용 중인 다른 텍스트와 수학 글꼴을 조합하는 옵션이 필요합니다.
이 문제는 최근에 발생한 것 같습니다. 내가 마지막으로 사용 unicode-math
하고 포함 하는 XeTeX 문서를 조판한 것은 \sqrt[n]{n}
약 1년 전이었고 당시에는 문제가 없었습니다. 뭔가 문제가 있는 걸까요최신 버전 중 하나, 즉 unicode-math
0.8m 또는 0.8n?
그럼에도 불구하고 출력 PDF 파일은 괜찮습니다. 걱정해야 할지 모르겠지만 계속해서 오류를 무시해야 하는 것은 불편합니다. 해결 방법으로 ^{1/n}
지금은 표기법을 사용하겠습니다 .
답변1
업데이트
v0.8o(2019/03/04) 부터 unicode-math
이 버그는 정상적인 Scale
사용이 가능하도록 수정되었습니다. 업데이트에는 다음이 포함됩니다.Ulrike Fischer의 답변 변형, 그리고 더 결정적으로,fam 2와 3의 글꼴 크기에 대한 더 엉성한 설정.
변화 는 ScaleAgain = 1.00001
효과적으로ScaleAgain = 0.99999
ScaleAgain = 1.0001
ScaleAgain = 0.9999
낮아진집합의 상한 비아래 정리 1에서. 세트 비이제 around 에서 종료됩니다 . k=10000
이는 around 입니다 Scale=0.153
. 즉, 사용자가 요청한 Scale
한~ 위에 0.153이면 unicode-math
글꼴 크기가 올바르게 설정됩니다.
요청된 값이 Scale
0.153 미만이면 글꼴 크기 문제가 지속됩니다. 그러나 정상적인 사용은 결코 생산되거나 감소하지 않을 것이라고 간주되었으므로 Scale=0.153
우리는 대부분의 부분에 대해 안전합니다. 더 자세한 분석 보기여기그리고여기.
오래된 답변
이것이 버그라는 Ulrike Fischer의 의견에는 동의하지만 " 깨졌다" unicode-math
는 주장에는 동의하지 않을 수 없을 것 같습니다 . \__um_fontdimen_to_percent:nN
실제로 사용하는 \dim_to_decimal_in_sp:n
것은 큰 개선이지만~ 아니다실제 문제는 어디에 있는가. 먼저 해결책을 제시한 다음 근본 원인에 대해 논의해 보겠습니다.
unicode-math
다음 해결 방법은 다음 릴리스에서 이 문제가 수정될 때까지 일시적입니다 .
해결책
비교적 간단한 해결 방법으로 새 기능을 사용하여 ScaleAgain
글꼴 크기를 약간 왜곡할 수 있습니다(사람의 눈에는 보이지 않음).
\documentclass{article}
\usepackage{unicode-math}% v0.8n, 2019/02/15
\setmainfont{Georgia}
\setmathfont[Scale=MatchLowercase,ScaleAgain=0.99999]{Cambria Math}
\begin{document}
n $n \sqrt[n]{n}$
\end{document}
ScaleAgain
실제로 컴파일하려면 1 에 가까운 범위를 시도해야 합니다 . 이 문제도 다음 릴리스에서 수정될 예정입니다 unicode-math
.
unicode-math
v0.8n 의 오버플로 동작에 대한 정리
이상한 오버플로 동작에 관심이 있는 사람들을 위해 v0.8n ScaleAgain
의 두 가지 고정 요소를 기반으로 한 정리가 있습니다.unicode-math
Scale
먼저 가 안전하고 문제를 일으킬 수 있는 시각화가 나옵니다 .
가까운
Scale=1
:
가까운Scale=1.2
:
가까운Scale=1.5
:
모두녹색선분은 안전
Scale
요인을 나타내고,빨간색선분은 문제가 있는 부분을 나타냅니다.특히 ,
Scale=1.031369386
,Scale=1.031374755
및Scale=1.031384644
Scale=1.031390014
모두로 이어진다! Dimension too large
. 가까운Scale=1.03138
:
토론
Georgia와 Cambria Math의 x 높이는 각각 986/2048
과 입니다 956/2048
. 그리고 는 로 Scale=MatchLowercase
올바르게 변환됩니다 . 이제,Scale=1.03138
fontspec
의 재정의를 제안함\__um_fontdimen_to_percent:nN
라틴 현대 수학을 사용할 때 다음과 같은 사실을 알게 되면 놀랄 것입니다.
\documentclass{article}
\usepackage{unicode-math}% v0.8n, 2019/02/15
% https://tex.stackexchange.com/a/475802, by Ulrike Fischer:
\ExplSyntaxOn
\cs_set:Nn \__um_fontdimen_to_percent:nN
{
\fp_eval:n { \dim_to_decimal_in_sp:n { \fontdimen #1 #2 } / 100 }
}
\ExplSyntaxOff
\newcommand*\tempscale{1.03138}% Also fails at 1.02, 1.05, 1.07
\setmathfont[Scale=\tempscale]{latinmodern-math.otf}
\begin{document}
n $n \sqrt[n]{n}$
\end{document}
여전히 ! Dimension too large.
오류가 발생합니다.
더 이상하게도 또는 스케일 팩터를 대신 사용하면 1.03137
Georgia 1.03139
+ Cambria Math 예제가 성공적으로 컴파일되고 라틴 현대 수학 예제도 컴파일됩니다( 재정의 여부에 관계없이 \__um_fontdimen_to_percent:nN
).
문제의 근본 원인은 오랜 문제를 해결하기 위한 의 ScaleAgain
새로운 기능입니다(참조:fontspec
스케일링과 함께 유니코드 수학을 사용한 위 첨자 배치그리고확장 옵션이 LuaLaTeX에서 완벽하게 작동하지 않습니다.). 아, 그리고 TeX이 "수학을 잘 못한다"는 사실도요.
수학 관련 레거시 글꼴 크기를 올바르게 설정하려면 unicode-math
동일한 수학 글꼴을 로드해야 합니다 .세 번. 그러나 TeX에서는 동일한 글꼴을 동일한 크기로 두 번 로드하는 것을 허용하지 않으므로 unicode-math
두 번째와 세 번째에는 약간 다른 크기로 글꼴을 로드해야 합니다. 이 약간 다른 크기는 다음과 같이 얻습니다.합성이전 축척 계수. 이것이 ScaleAgain
에서 소개된 주된 이유 fontspec
이므로 2번째와 3번째에도 unicode-math
가능합니다 . 처럼ScaleAgain=1.00001
ScaleAgain=0.99999
내 댓글unicode-math
TeX의 이진 연산으로 인해 세 가지 크기를 구분하지 못하는 경우가 가끔 있습니다 .
귀하의 예는 를 가질 만큼 "불운"했습니다 Scale=1.03138
. 이는 로 해석됩니다 Round( 1.03138 * 2^16 ) = 67593
. 이후에 TeX는 로 해석되는 을 ScaleAgain=1.00001
봅니다 . 그래서 TeX는 두 번째 계열과 첫 번째 계열이 동일한 글꼴이라고 생각하고 의 지시에 따라 글꼴 크기를 덮어쓰게 됩니다 . 새로운 글꼴 크기는 더 이상 1보다 작은 백분율이 아니라 상당히 커질 수 있는 물리적 길이이기 때문에 이로 인해 오버플로가 발생합니다.1.03139
Round( 1.03139 * 2^16 ) = 67593
unicode-math
를 사용하면 \setmathfont[Scale=MatchLowercase,ScaleAgain=0.99999]{Cambria Math}
기본적으로 TeX가 실수로 같은 크기의 수학 글꼴을 로드하는 것을 방지하려고 합니다.
답변2
Imho의 정의에 결함이 있으므로 대신 \__um_fontdimen_to_percent:nN
사용해야 합니다 .\dim_to_decimal_in_sp
\dim_to_decimal:n
\documentclass{article}
\usepackage{unicode-math}
\ExplSyntaxOn
\cs_set:Nn \__um_fontdimen_to_percent:nN
{
\fp_eval:n { \dim_to_decimal_in_sp:n { \fontdimen #1 #2 } / 100 }
}
\ExplSyntaxOff
\setmainfont{Georgia}
\setmathfont[Scale=MatchLowercase]{Cambria Math}
\begin{document}
n $n \sqrt[n]{n}$
\end{document}