pandoc
저는 회사 레이아웃이 포함된 문서를 생성하기 위해 Latex 기반의 워크플로를 사용하고 있습니다 . 서식의 일부는 여백 내부에 설정된 캡션이며 때로는 텍스트와 여백 영역에 걸쳐 있는 이미지를 사용합니다. 패키지를 사용하면 두 가지 모두 쉽게 달성할 수 있습니다 sidenotes
. 환경 을 수정하는 큰 수치를 가능하게 합니다 figure*
.
일반 텍스트 문서에서 일반 문서 figure
와 일반 문서 사이를 전환하는 것은 figure*
물론 문제가 되지 않습니다. 하지만 pandoc
마크다운부터 Latex, PDF까지 자동화된 작업 흐름을 사용해야 합니다 . 불행하게도 pandoc
별표 표시된 환경과 일반 환경 간에 전환할 수 있는 기본 제공 옵션은 제공하지 않습니다. 따라서 나는 별표로 표시된 그림을 그룹 내에서 래핑하고 거기에서 figure
처럼 작동하도록 로컬로 재정의하는 Lua 필터를 작성했습니다 figure*
. pandoc
항상 일반 명령을 출력하므로 이는 필요합니다 figure
. 불행하게도 나는 그것을 작동시킬 수 없습니다. 다음은 출력이 될 수 있는 짧은 Latex 예제가 포함된 MWE입니다 pandoc
.
% !TeX lualatex
\documentclass{article}
\usepackage{sidenotes}
\usepackage[outer=4cm]{geometry}
\usepackage{blindtext}
\begin{document}
\blindtext
\begingroup
\RenewEnvironmentCopy{figure}{figure*}
\begin{figure}
\rule{\linewidth}{2ex}
\sidecaption{some text}
\end{figure}
\endgroup
\end{document}
로그에는 다음 오류 메시지가 표시됩니다.
! TeX capacity exceeded, sorry [save size=200000].
\tl_set:Nn ..._set:Ne #1{\__kernel_exp_not:w {#2}}
l.11 \rule
{\linewidth}{2ex}
If you really absolutely need more capacity,
you can ask a wizard to enlarge me.
TeX의 용량을 확대해도 문제가 해결되지 않습니다. graphicx
규칙 대신 이미지를 로드하여 사용하는 경우에도 문제가 지속됩니다 .
이 문제를 해결하는 방법에 대한 몇 가지 아이디어가 있기를 바랍니다.
지역적으로 재정의하는 다른 접근 방식 figure
도 figure*
매우 환영합니다. 그러나 Latex 문서에서 환경 자체는 단순으로 입력되어야 합니다. figure
이 출력은 pandoc
.
편집하다
@cabohas 솔루션 덕분에 작동하게 되었습니다. 다음은 pandoc과 함께 사용하는 Lua 필터입니다 pandoc -s -L path/to/filter.lua file.md -o file.tex
.
if FORMAT:match 'latex' then
function Figure (elem)
local starred = elem.content[1].content[1].attributes['starred']
if starred and starred == "true" then
return {
pandoc.RawInline('latex', '\\defaultwidefiguretrue'),
elem,
pandoc.RawInline('latex', '\\defaultwidefigurefalse')
}
else
return elem
end
end
end
답변1
문제는 의 sidenote
정의가 figure*
내부적으로 figure
. 따라서 재정의한 후 figure*
내부 사용법도 를 사용합니다 figure*
. 이로 인해 무한 루프가 발생합니다.
두 가지 새로운 환경 을 정의하는 것이 좋습니다 figure-
. 일반 의 단순 복사본일 수 있지만 대신 을 사용하는 의 복사본이어야 합니다 . 그런 다음 스위치 에 따라 또는 를 사용하도록 재정의할 수 있습니다 . 또한 다음의 별칭으로 변경되어야 합니다 .figure+
figure-
figure
figure+
figure*
figure-
figure
figure
figure-
figure+
\if…
figure*
figure+
\documentclass{article}
\usepackage{sidenotes}
\usepackage[outer=4cm]{geometry}
\usepackage{blindtext}
\NewEnvironmentCopy{figure-}{figure}
\makeatletter
\NewDocumentEnvironment{figure+}{ O{htbp} }
{
\begin{figure-}[#1]
\begin{autoadjustwidth}{}{-\@sidenotes@extrawidth}
\captionsetup{style=widefigure}
}
{
\end{autoadjustwidth}
\end{figure-}
}
\makeatother
\newif\ifdefaultwidefigure
\RenewDocumentEnvironment{figure}{ O{htbp} }
{
\ifdefaultwidefigure
\def\figureenvtype{figure+}%
\else
\def\figureenvtype{figure-}%
\fi
\begin{\figureenvtype}[#1]%
}
{
\end{\figureenvtype}
}
\RenewEnvironmentCopy{figure*}{figure+}
\begin{document}
\blindtext
\defaultwidefigurefalse% first example not wide
\begin{figure}
\rule{\linewidth}{2ex}
\sidecaption{some text}
\end{figure}
\blindtext
\defaultwidefiguretrue% second example wide
\begin{figure}
\rule{\linewidth}{2ex}
\sidecaption{some text}
\end{figure}
\blindtext
\begin{figure*}% third example wide by used environment
\rule{\linewidth}{2ex}
\sidecaption{some text}
\end{figure*}
\end{document}