
나는 그림의 배치를 개선하기 위해 문서 의 큰 부분 {figure}
과 코드를 복사하여 붙여넣는 경우가 많습니다. {table}
오류가 발생하기 쉽고 약간 짜증스럽습니다.
나는 float 환경에 대한 [H] 인수에 대해 알고 있습니다. 여기서는 결과(예: PDF 문서)의 부동 위치를 내 부동 환경의 위치와 정확히 일치시키려는 것이 아닙니다. 나는 큰 코드 덩어리를 복사하여 붙여넣는 작업을 포함하지 않고 내 tex 파일 주위에 부동 소수점에 대한 코드를 이동하는 더 간단한 방법을 원합니다.
이런 일을 할 수 있는 새로운 환경과 매크로를 갖춘 시스템을 만드는 것이 가능할지 궁금합니다.
\begin{placer}{tag}
\begin{figure}
...
\end{figure}
\end{placer}
내 생각은 새로운 placer
환경이 모든 것을 캡처하고 인수 태그를 기반으로 한 이름으로 저장한다는 것입니다.
그런 다음 새 매크로를 사용하여 원하는 위치에 그림을 배치합니다.
\place{tag}
이상적으로는 사용이 가능할 것입니다.\place{tag}
~ 전에위의 코드 조각을 사용해도 여전히 원하는 결과를 얻을 수 있습니다. 그리고 이상적으로는 파일 쓰기나 추가 컴파일 단계에 의존하지 않습니다. 기본적으로 플로트가 호출되지 않은 \begin{placer}{tag}
경우 기본적으로 그 자리 에 배치된다면 매우 좋을 것이라고 생각합니다 \place{tag}
.
이런 시스템이 가능할까요?
그렇다면 더 나아가고 싶습니다. 위와 같이 내용을 자동으로 캐시하도록 그림 및 테이블 부동 환경을 재정의하고 일부 레이블을 사용하여 위와 같이 장소 매크로를 통해 배치할 수 있도록 하고 싶습니다.
이를 구현한 일부 패키지를 로드하고 관련 그림의 일부 태그에 해당하는 인수와 함께 \place{fig:whatever} 명령을 추가하기만 하면 문서에서 그림과 표를 이동할 수 있습니다. 이 같은
\usepackage{placer}
\begin{document}
This is a document with one figure.
\begin{figure}
...
\label{fig:whatever}
\end{figure}
Actually, let’s put the figure code below this text.
\place{fig:whatever}.
답변1
xparse
콘텐츠를 저장하는 환경을 정의하는 데 사용할 수 있습니다 . 속성 목록이 적절한 도구인 것 같습니다.
\documentclass{article}
\usepackage{xparse}
\usepackage{graphicx}
\usepackage{booktabs}
\usepackage{lipsum} % just for mock text
\ExplSyntaxOn
\prop_new:N \g_innisfree_floats_prop
\NewDocumentEnvironment{placer}{m +b}
{
\prop_gput:Nnn \g_innisfree_floats_prop { #1 } { #2 }
}
{}
\NewDocumentCommand{\place}{m}
{
\prop_item:Nn \g_innisfree_floats_prop { #1 }
}
\ExplSyntaxOff
%%% define the objects (can be in a different file to be \input)
\begin{placer}{fig:example}
\begin{figure}[htp]
\centering
\includegraphics[width=4cm]{example-image}
\caption{A figure\label{fig:example}}
\end{figure}
\end{placer}
\begin{placer}{tab:example}
\begin{table}[tp]
\centering
\caption{A table\label{tab:example}}
\begin{tabular}{lc}
\toprule
X & Y \\
\midrule
A & 1 \\
B & 2 \\
\bottomrule
\end{tabular}
\end{table}
\end{placer}
\begin{document}
\lipsum[2]
\place{fig:example}
\lipsum[3-5]
\place{tab:example}
\lipsum
\end{document}