
그래프 설명이기 때문에 특정 공간에 텍스트를 맞추려고 합니다. 아래 그래프와 같은 것을 만들고 싶습니다.
그 공간에 텍스트를 맞추는 것이 가능합니까? LaTex가 자체적으로 수행합니까? 패키지나 명령을 사용해야 합니까?
감사합니다.
답변1
수정된 답변(완전 자동화):
이 수정된 답변에서는 을 호출하여 \constraintext
5개의 인수를 전달합니다.
#1
제한된 텍스트 높이
#2
제한된 텍스트 너비
#3
제한할 텍스트 내용
#4
콘텐츠의 자연적인(크기 조정되지 않은) 너비보다 크거나 같은 추측(너무 크게 선택하면 몇 번의 추가 반복이 발생함)
#5
원하는 종횡비를 만족시키기 위해 각 반복마다 자연 너비에서 뺄 길이의 양수 증분입니다.
언급한 대로, \parbox
자연 너비(input #4
)를 상자 너비로 사용하여 크기 조정되지 않은 글꼴이 (현재 글꼴 크기로) 생성됩니다. 종횡비가 테스트됩니다. 충분히 크게 선택한 경우 #4
종횡비는 목표 값보다 낮습니다. 그런 다음 크기가 조정되지 않은 상자는 주어진 양만큼 좁아지고 #5
종횡비가 다시 테스트됩니다. 이전 테스트에 비해 증가할 예정입니다. 이 프로세스는 테스트된 종횡비가 목표 값과 같거나 이를 초과할 때까지 반복적으로 반복됩니다.
이 시점에서 상자는 제한된 높이( #1
) 로 설정될 수 있으며 \parbox
너비는 제한된 너비 또는 그 약간 아래로 유지됩니다. 패딩은 \hfill
조판 너비를 제한된 너비와 동일하게 만들기 위해 일치하는 s로 수행됩니다.
진단 인쇄를 제거하기 위해 설명해야 할 사항에 대해 MWE에 메모를 배치했습니다.
\documentclass{article}
\usepackage{scalerel}
\usepackage{fp}
\usepackage{lipsum}
\usepackage{stackengine}
\newcount\boxheight
\newcount\boxwidth
\newlength\constrainedwidth
\newsavebox\testbox
\newlength\currentwidth
\newcommand\aspect[1]{%
\boxheight=\ht#1\relax%
\boxwidth=\wd#1\relax%
\FPdiv\testaspect{\the\boxheight}{\the\boxwidth}%
\testaspect\\% COMMENT THIS LINE TO REMOVE ASPECT-RATIO PRINTS
}
% TARGET-HEIGHT, TARGET-WIDTH, CONTENT, GUESS>NATURAL-WIDTH, dWIDTH
\newcommand\constraintext[5]{%
\def\svfboxsep{\the\fboxsep}%
\setlength\fboxsep{0pt}%
\setlength\constrainedwidth{#2}%
\sbox\testbox{\rule{#2}{#1}}%
TARGET ASPECT RATIO\\% COMMENT THIS LINE TO REMOVE COMMENT
V\\% COMMENT THIS LINE TO REMOVE COMMENT
\aspect{\testbox}%
\edef\aspectratio{\testaspect}%
\constrainsize{#1}{\aspectratio}{#3}{#4}{#5}%
\setlength\fboxsep{\svfboxsep}%
}
\newcommand\constrainsize[5]{%
\sbox{\testbox}{\fbox{\parbox[b]{#4}{#3}}}%
\aspect{\testbox}%
\FPiflt{\testaspect}{#2}%
\setlength{\currentwidth}{#4}%
\addtolength{\currentwidth}{-#5}%
\constrainsize{#1}{#2}{#3}{\currentwidth}{#5}%
\else
\setlength\constrainedwidth{#1}%
\FPdiv\result{1.0}{#2}%
% CHANGE \framebox TO \makebox TO REMOVE FRAME
\framebox[\result\constrainedwidth]{\hfill%
\scaleto{\parbox[b]{\currentwidth}{#3}}{#1}%
\hfill%
}%
\fi%
}
\parindent 0in
\begin{document}
\constraintext{5in}{2.8in}{\lipsum[1-2]}{3in}{.02in}
\rule[-\fboxsep]{.2ex}{5in}\\
\rule{2.8in}{.2ex}
\clearpage
\constraintext{5in}{2.8in}{\lipsum[3]}{2.25in}{.02in}
\rule[-\fboxsep]{.2ex}{5in}\\
\rule{2.8in}{.2ex}
\end{document}
아래에는 입력 스트림 크기가 서로 다르지만 둘 다 동일한 크기(5인치 x 2.8인치) 최종 상자로 설정된 두 가지 결과가 나와 있습니다. 상자 크기의 정확성을 확인하기 위해 상자 옆과 아래에 규칙이 설정되어 있습니다.
먼저 대상 종횡비를 제공한 다음 각 반복마다 종횡비를 제공하는 진단이 표시됩니다. 가로 세로 비율이 갑자기 바뀌면 줄 바꿈으로 인해 조판 상자에 추가 텍스트 줄이 필요함을 나타냅니다. 최종 종횡비가 대상에 가까울수록 상자를 제한하는 데 필요한 수평 패딩이 줄어듭니다.
원래 답변(완전 자동화되지 않음):
완전히 자동화되지는 않았지만 약간의 반복을 통해 작업이 완료됩니다. 높이 5인치, 너비 2인치인 상자에 처음 두 개의 lipsum 단락을 넣고 싶다고 가정해 보겠습니다. 이는 높이/너비 종횡비가 2.5로 작동합니다. 나는 그 단락들을 프레임에 배치 \parbox
하고 편리한 매크로를 사용하여 올바른 종횡비를 얻기 위해 상자 너비를 가지고 노는 것(반복은 여기에 있습니다) 으로 시작했습니다 \aspect
(이 반복 단계에는 약 4번의 반복이 걸렸고 아마도 1분 정도 걸렸습니다).
2.5+/-엡실론 종횡비의 결과를 얻은 후에는 패키지 \scaleto
의 를 사용하여 scalerel
상자 높이를 5인치로 늘렸습니다. 종횡비는 너비가 2임을 보장합니다. 원래의 10pt 조판 상자(\x)와 크기가 조정된 동반 항목을 보여줍니다.
\documentclass{article}
\usepackage{scalerel}
\usepackage{fp}
\usepackage{lipsum}
\newcount\boxheight
\newcount\boxwidth
\newcommand\aspect[1]{%
\boxheight=\ht#1\relax%
\boxwidth=\wd#1\relax%
\FPdiv\result{\the\boxheight}{\the\boxwidth}\result%
}
\begin{document}
\newsavebox\x
\sbox{\x}{\fbox{\parbox[b]{2.42in}{\lipsum[1-2]}}}
\aspect{\x}
\usebox{\x}
\scaleto{\usebox{\x}}{5in}
\end{document}
그리고 특정 샘플 이미지의 레이아웃과 관련하여 해당 종횡비를 목표로 1.75로 재평가하여(단락 크기가 5" x 20/7"이 됨) 이를 생각해냈습니다 \rule
. 와 함께 \includegraphics
. 물론 제 5인치 키는 단지 추측일 뿐이지만 수정 가능합니다.
\documentclass{article}
\usepackage{scalerel}
\usepackage{fp}
\usepackage{lipsum}
\usepackage[oldsyntax]{stackengine}
\newcount\boxheight
\newcount\boxwidth
\newcommand\aspect[1]{%
\boxheight=\ht#1\relax%
\boxwidth=\wd#1\relax%
\FPdiv\result{\the\boxheight}{\the\boxwidth}\result%
}
\begin{document}
\newsavebox\x
\sbox{\x}{\fbox{\parbox[b]{2.84in}{\lipsum[1-2]}}}
%\aspect{\x}
\def\hgp{\hspace{.1in}}
\def\plotA{\protect\rule{1.36in}{0.66in}}
\def\plotB{\protect\rule{1.36in}{1.36in}}
\def\plotC{\protect\rule{1.36in}{1.36in}}
\def\plotD{\protect\rule{1.36in}{1.36in}}
\def\plotE{\protect\rule{1.36in}{1.36in}}
\def\plotF{\protect\rule{1.36in}{1.36in}\hgp}
\def\plotG{\protect\rule{1.36in}{1.36in}}
\def\stackalignment{l}
\Sstackgap=.1in
\Shortstack{{\plotA} {\plotB} {\plotC} {\plotD} {\plotE}}\hgp%
\stackon{\plotF \plotG}{\scaleto{\usebox{\x}}{5in}}
\end{document}
추신: 저는 V2.0 stackengine을 사용하고 있는데 아직 사용하지 않았을 수도 있습니다. 업그레이드할 수 있을 때까지 두 번째 MWE가 작동하도록 하려면 [oldsyntax]
패키지 옵션을 제거하면 됩니다.
답변2
\tcolorbox
fitting
명령과 함께 라이브러리를 포함합니다 \tcboxfit
. 주어진 너비와 높이의 상자 안에 내용이 들어맞습니다.
다음 몇 가지 예:
\documentclass{article}
\usepackage[most]{tcolorbox}
\usepackage{lipsum}
\usepackage{lmodern}
\tcbset{colframe=blue!50!black,colback=green!10!white,
boxsep=0pt,top=1mm,bottom=1mm,left=1mm,right=1mm,
nobeforeafter, arc=0pt, outer arc=0pt}
\begin{document}
\lipsum[1]
\noindent\tcboxfit[width=.5\linewidth,height=6cm]{\lipsum[1]}
\hfill
\tcboxfit[width=.45\linewidth, height=4cm]{\lipsum[1]}
\noindent\tcboxfit[width=\linewidth, height=2cm]{\lipsum[1]}
\end{document}