상대 페이지 참조 사용자 정의

상대 페이지 참조 사용자 정의

다른 텍스트와 관련된 라벨 위치에 대한 자세한 정보를 얻고 이 정보를 기반으로 사용자 정의 텍스트를 표시하려면 어떻게 해야 합니까?

  • 라벨이 바로 이전 페이지에 나오는 경우(이 페이지는 오른쪽 페이지임) "왼쪽 페이지에" 인쇄하십시오.
  • 라벨이 바로 이전 페이지에 나오는 경우(이 페이지도 마찬가지) "이전 페이지에" 인쇄하십시오.
  • 라벨이 바로 다음 페이지에 나오는 경우(이 페이지는 반대) "오른쪽 페이지에" 인쇄하십시오.
  • 라벨이 바로 다음 페이지에 나오는 경우(이 페이지는 바로 옆 페이지임) "다음 페이지에"를 인쇄하세요.

그렇지 않으면:

  • 레이블이 같은 줄 앞에 오면 "이 줄 앞"이라고 인쇄하세요.
  • 라벨이 같은 페이지 위에 있으면 "이 페이지 위에"를 인쇄하세요.
  • 레이블이 같은 줄 뒤에 오면 "after, on this line"을 인쇄하십시오.
  • 라벨이 같은 페이지 아래에 있는 경우 "아래, 이 페이지에"를 인쇄하세요.

그렇지 않으면:

  • 라벨이 이전 페이지(이전 페이지) 앞에 오면 "이전 페이지에" 인쇄하세요.
  • 레이블이 (이후 페이지) 뒤에 오면 "나중 페이지에" 인쇄하십시오.

패키지 varioref에는 다음 기능 중 일부가 있는 것으로 보이지만 이는 몇 가지 문제를 나타냅니다.

  • 나는 일반적으로 페이지 번호를 인쇄하지 않습니다 vpageref.
  • 내 문서는 영어를 사용하지 않으므로 공백 제어를 포함하여 표시되는 텍스트를 더 효과적으로 제어해야 합니다.

답변1

이는 다음을 사용할 때 가능합니다.zref패키지. 모듈 을 로드 user하거나 패키지를 통해 직접 zref-usera와 관련된 여러 속성에 액세스할 수 있습니다 \zlabel(LaTeX의 와 유사 \label).

여기에 이미지 설명을 입력하세요

\documentclass[twoside]{article}
\usepackage[margin=5mm,paperheight=2in,paperwidth=4in,bottom=15mm]{geometry}% http://ctan.org/pkg/geometry
\usepackage[user]{zref}% http://ctan.org/pkg/zref

\newcounter{refcnt}% Counter used with every reference
\makeatletter
\newcommand{\myref}[1]{%
  \stepcounter{refcnt}\zlabel{#1@\therefcnt}%
  \texttt{#1} is on page~\zref[page]{#1}.
  This is page~\zref[page]{#1@\therefcnt}. \par
  \texttt{#1} is on a~\ifodd\zref@extract{#1}{page}recto\else verso\fi~page.
  This is a~\ifodd\zref@extract{#1@\therefcnt}{page}recto\else verso\fi~page. \par
  \texttt{#1} is
    \ifnum\zref@extract{#1@\therefcnt}{page}=\zref@extract{#1}{page} % same page
      on this page.
    \else
        \ifnum\numexpr\zref@extract{#1@\therefcnt}{page}-\zref@extract{#1}{page}\relax=1 % previous page
          \ifodd\zref@extract{#1@\therefcnt}{page}
            on the left-hand page.
          \else
            on the previous page.
          \fi
        \else
          \ifnum\numexpr\zref@extract{#1}{page}-\zref@extract{#1@\therefcnt}{page}\relax=1 % next page
            \ifodd\zref@extract{#1@\therefcnt}{page}
              on the next page.
            \else
              on the right-hand page.
            \fi
          \else
            \ifnum\zref@extract{#1}{page}>\zref@extract{#1@\therefcnt}{page} %
              \strip@pt\dimexpr\zref@extract{#1}{page}pt-\zref@extract{#1@\therefcnt}{page}pt\relax~pages ahead.
            \else
              \strip@pt\dimexpr\zref@extract{#1@\therefcnt}{page}pt-\zref@extract{#1}{page}pt\relax~pages before.
            \fi
          \fi
        \fi
      \fi
}
\makeatother

\begin{document}
This is~\texttt{foo}.\zlabel{foo} \par \medskip
\myref{foo}

\newpage

\myref{foo} \par \medskip
\myref{bar}

\newpage

\myref{foo} \par
This is~\texttt{bar}.\zlabel{bar}

\newpage

\myref{bar}
\end{document}

<lab>를 통해 참조되는 각 레이블에 대해 일반 실행 카운터인 \myref{<lab>}새 레이블이 \zlabel <lab>@<refcnt>설정됩니다 . <refcnt>이를 통해 계산을 수행하기 위해 관련된 속성을 추출할 수 있습니다 <lab>@<refcnt>.

\zref@extract{<ref>}{<prop>}계산이 가능하도록 <prop>label 속성의 확장 가능한 버전을 제공합니다 . 위의 예에서는 홀수/짝수 여부 <ref>에 따라 오른쪽 페이지와 반대 페이지가 결정됩니다 .page

\myref모듈 을 사용하여 줄 참조를 포함하도록 확장할 수 있으며 savepos, 이는 "...이 페이지의...위"를 참조할 수 있게 해줍니다. 또는 "...이 페이지 아래." 이는 확장형을 사용하여 페이지에 있는 \zposy{<lab>}라벨의 y좌표를 추출 하고 이를 다른 라벨과 비교함으로써 달성됩니다 .<lab>

LaTeX가 처음 실행하는 동안 불평할 수 있는 오류에도 불구하고 "settle"에 대한 참조를 위해 적어도 두 번 컴파일해야 한다는 점에 유의하십시오.

관련 정보