XeLaTeX/그래픽 스페셜

XeLaTeX/그래픽 스페셜

XeLaTeX에서 다음 코드를 사용할 때

\resizebox{\textwidth}{!}{\includegraphics{foo.pdf}}

XDV 파일에는 다음 opcode가 포함되어 있습니다.

PUSH
XXX "pdf:btrans"
XXX "x:scale 0.99667 0.99667"
PUSH
PUSH
PUSH
PUSH
PUSH
PUSH
XXX "pdf:btrans"
XXX "x:scale 1 1"
PUSH
PUSH
XXX "pdf:image matrix 1.0 0.0 0.0 1.0 0.0 0.0 page 0 pagebox cropbox (foo.pdf)"
POP
POP
XXX "pdf:etrans"
POP
POP
POP
POP
POP
POP
XXX "pdf:etrans"
POP

x네임스페이스 및 가 포함된 특수 항목에 대한 설명은 어디서 찾을 수 있나요 pdf?

pdf:btrans현재 그래픽 상태를 메모리에 유지하고 새로운 그래픽 상태를 시작하는 것 같아요 . x:scaleXeLaTeX에만 해당되는 특별한 기능인가요?

왜 먼저 0.99667 척도(에서 얻음)가 있고 \resizebox그 다음에는다른 것1.0 스케일로?

특집 에서 PostScript 그래픽 상태 행렬을 생각나게 하는 키워드를 pdf:image보았습니다 matrix. 왜 이 행렬이 스케일링에 사용되지 않습니까? 내 문서를 살펴보니 모든 그림에 동일한 "단일" 행렬이 있었는데, 어떤 상황에서 이 행렬이 달라지나요?

그리고 마지막 질문: 다음과 같은 PostScript 특수 기능과는 반대로 그런 것 같습니다.

PSfile=%0022fig1.eps%0022 llx=0 lly=0 urx=104 ury=131 rwi=1040

경계 상자가 명시적인 경우 pdf:image경계 상자가 없으며 자르기 상자를 PDF 파일에서 추출해야 합니다. 크롭박스를 안전하게 추출하는 도구를 아시나요? 테스트한 결과 pdfinfo다음 코드가 생성되었습니다.

Creator:        TeX
Producer:       pdfTeX-1.40.20
CreationDate:   Mon Aug 31 13:24:48 2020 CEST
ModDate:        Mon Aug 31 13:24:48 2020 CEST
Tagged:         no
UserProperties: no
Suspects:       no
Form:           none
JavaScript:     no
Pages:          1
Encrypted:      no
Page size:      347 x 426 pts
Page rot:       0
File size:      11745 bytes
Optimized:      no
PDF version:    1.5

"페이지 크기"가 실제로 자르기 상자입니까? 그리고 "pts"는 PostScript 포인트(= bp)입니까 아니면 TeX 포인트(= pt)입니까?

답변1

먼저, 일반적인 질문을 가지고, 스페셜은 및 매뉴얼 pdf:에 설명되어 있습니다 . 후자의 경우 파일 목록의 항목 #2를 사용하여 액세스합니다 .dvipdfmdvipdfmxdvipdfmx-special.pdftexdoc -l dvipdfmx

x:(내가 아는 한) 버전이 문서화되어 있지 않습니다. - 읽기출처, 이들은 에서 시작되지만 xdvipdfmxdvipdfmx은( xdvipdfmx는) 이제 병합되었으므로 이는 중요하지 않습니다. 핵심은 pdf:...에 대해 문서화된 버전 과 동일하게 작동한다는 점 dvipdfm이며, 더 중요한 것은 해당 버전이 수년 동안 그런 방식으로 사용되었다는 사실을 알고 있다는 것입니다. 따라서 이것들은 XeTeX에 특정한 것으로 시작되었지만 오늘날 우리는 여러분이 본 것처럼 특수한 것을 pdf:혼합 할 수 있습니다. (이들이 독립적으로 구현된다는 점은 주목할 가치가 있으므로 일반적으로 상호 작용을 테스트해야 합니다.) XeTeX 목록에는 일부 특수 기능에 대한 정보가 있습니다.x:dvipdfmxhttps://tug.org/pipermail/xetex/2004-May/000220.html.

btrans/ 쌍 은 etrans변환 행렬의 범위를 형성합니다. ( l3backend동일한 코드 버전 에서는 전체 그래픽 상태를 저장/복원하는 x:gsave/ 를 사용합니다. 이를 통해 일부 코드를 다른 작업과 공유할 수 있습니다.) / 쌍은 명시적인 상태를 원할 때 유용합니다.x:grestorebtransetrans짝을 이루는스페셜 세트; 대조적 x:rotate이거나 유사한 것, 이는 '원샷' 작업이므로 '빌드업'에 가장 적합합니다.이내에아우터 x:gsave/ x:grestore페어. ( l3backend코드에서는 다른 백엔드의 API와 일치하므로 이러한 이유로 두 가지를 모두 사용합니다.)

등을 사용하는 것은 백엔드가 변환을 '추적'하도록 하기 때문에 를 x:scale사용하는 것과 동일하다고 생각해야 합니다 . pdf:brans scale예를 들어 이러한 공간 내에 하이퍼링크가 중첩되어 있을 때 이런 현상이 나타납니다. PDF cm작업에 대한 원시 호출은 이러한 작업이 엉망이 된다는 것을 의미합니다. 위에서 언급했듯이 두 버전의 주요 차이점은 버전 x:이 일련의 변환 내에서 '독립형'일 수 있는 반면 pdf:btrans일치 pdf:etrans작업이 필요하다는 것입니다.

'왜 두 번 크기를 조정해야 하는가'라는 질문은 크기가 조정된 상자 안에 이미지가 있기 때문입니다. XeTeX에서는 이미지를 '직접'(이미지를 포함하는 특수 수준에서) 크기를 조정하지 않고 상자 안에 이미지를 삽입한 다음 크기를 조정합니다(이것은 pdfTeX와 공유됩니다. 아래 참조). 따라서 이미지를 포함하면 전체 크기로 설정되고( 에 대한 선택적 인수로 크기 조정 없음 \includegraphics) 이는 무작동 크기 조정으로 표시됩니다. 그런 다음주변상자는 '큰 포인트'로 수행되므로 값이 약간 이상합니다.

(XeTeX를 사용하면 포함 지점에서 이미지 크기를 조정할 수 있지만 dvipdfmx코드를 공유하기 위해 작동하지 않습니다. 기본적으로 최신 백엔드 코드는 pdfTeX를 따르는 경향이 있으며 이미지에 사용하는 기본 코드는 포함은 모든 이미지 유형에 대한 크기 조정을 제공하지 않으므로 가장 좋은 공유 코드 경로는 포함 상자의 크기를 조정하는 것입니다.)

마지막으로 경계 상자를 살펴보겠습니다. 경로 에서 경계 상자를 얻으려면 dvipdfmx보조 프로그램을 사용해야 합니다 . 그러나 XeTeX에는 PDF를 직접 읽을 수 있는 extractbb이미지 기본 요소가 있습니다 . \XeTeXpdffile말하려면 키워드 인수가 필요합니다.어느읽을 상자: 이 내용은 에서 다룹니다 texdoc xetex. 을 사용하는 것과 달리 이 기본 요소는 이미지 크기 조정을 수행할 수 있지만 \special{pdf:image ...}위에서 언급한 것처럼 해당 기능은 사용되지 않습니다. 레벨에서 이미지의 크기를 조정/회전하기로 선택한 경우 \XeTeXpdffile다음과 같이 표시됩니다 matrix. 이 경우 하이퍼링크와 얼마나 잘 상호 작용하는지 잘 모르겠습니다.

PDF 이미지를 삽입하면 원하는 경계 상자 주변이 잘리므로 단위에 대해 걱정할 필요가 없습니다. 결과 이미지의 크기를 알고 싶다면 이미지가 들어가는 TeX 상자를 측정하십시오. 예를 들어

\setbox0=\hbox{\XeTeXpdffile "foo.pdf" media }%
\edef\pictureheight{\the\ht0 }%
\edef\picturewidth{\the\wd0 }%

이미지는 항상 깊이 없이 상자의 기준점에 삽입되기 때문입니다. xetex.def왼쪽 아래 좌표가 항상 있다고 가정하기 위해 이를 사용하는 것을 볼 수 있습니다 (0,0)( dvips인생이 더 '흥미로운' 곳).

비트맵 그래픽의 경우 기본 요소를 \XeTeXpicfile사용할 수 있으며 미리 경계 상자 없이 이미지를 삽입할 수 있습니다. 방금 본 것처럼 \XeTeXpdffile이러한 기본 요소는 이미지의 경계 상자를 인식하고 이를 '실제' 크기로 TeX에 삽입하므로 모든 경우에 TeX 상자를 사용하여 결과를 측정할 수 있습니다.

관련 정보