표의 숫자에 대한 텍스트 내 참조

표의 숫자에 대한 텍스트 내 참조

텍스트에서 참조하는 숫자가 표에서 변경될 때마다 텍스트 내 숫자가 변경되도록 표의 특정 숫자에 대한 텍스트 내 상호 참조를 만드는 것이 가능한지 궁금합니다. 내 텍스트에서는 표의 특정 합계를 반복적으로 참조해야 합니다. 문제는 합계를 도출하는 데 사용되는 요소가 지속적으로 변경되기 때문에 텍스트 내 숫자를 수동으로 여러 번 변경해야 한다는 것입니다. 텍스트에 포함된 숫자 중 일부를 수정하지 못할까 봐 걱정됩니다. 예를 들어, 표 1이 다음 형식을 취한다고 가정합니다.

$$\begin{array}{|c|c|} 
 & \text{Sum}  \\ \hline
Bla bla & 5  \\ \hline
\end{array}$$

표 1에서 합계는 5입니다.

합계에 대해 비슷한 언급을 반복하면서 다음과 같은 해결책을 기대했습니다.

"표 1은 합계가 \ref{표 1의 합계}와 같음을 보여줍니다."

, 여기서 나는 표 1 "표 1의 합계"에서 5라는 숫자를 '레이블'했습니다. (예제를 만들고 싶었지만 불가능할 것 같습니다.) 마지막으로 실제 논문에는 '이런 종류의' 테이블이 여러 개 있기 때문에 좀 더 '일반적인 솔루션'을 기대하고 있습니다.

답변1

질문 텍스트에서 환경을 사용하여 array테이블을 만듭니다. 그러나 환경은 array수학 모드에서 행렬을 생성하는 데 사용됩니다. array테이블 생성 환경을 오용하지 말고 tabular테이블 생성 환경을 활용하는 것이 좋습니다 .


패키지를 통해서zrefLaTeX 2ε-커널에 구현된 \label- - 메커니즘 과 유사하게 자신만의 상호 참조 시스템을 쉽게 도입할 수 있습니다 .\ref

다음 예에서는 다음을 정의합니다.

\StoreNumber{⟨ID/label⟩}{⟨something that in the text should denote a number⟩}

그리고

\RetrieveNumber{⟨ID/label⟩}


2020년 11월 5일에 편집됨:

나(Ulrich Diez)는 "숫자"가 "정수"를 의미하지 않는다는 점을 간과했습니다. 에서 -thingie를
제거했습니다 .\number\numexpr...\relax\StoreNumber

와 함께⟨텍스트에서 숫자를 나타내는 것⟩확장 방지 및 .pdf 파일의 북마크에 대한 PDF 문자열 생성을 처리해야 합니다.

zref-things에서는 babel-shorthands를 활성화하기 위해 zref의 래퍼를 사용하지 않았습니다.
내가 그렇게 하고 \RetrieveNumberpdf-bookmarks로 끝날 수 있는 sectioning-command 인수의 일부로 끝났다면 babel-shorthands에 대한 zref의 래퍼는 문제의 섹션에 대한 책갈피를 만드는 동안 문제를 일으킬 것입니다.


\documentclass{article}

\usepackage[unicode=true]{hyperref}
\usepackage[overload]{textcase}
\usepackage{zref}
\makeatletter
\@ifpackageloaded{hyperref}{%
  \@ifdefinable\RetrieveNumber@RefUndefText{%
    \DeclareRobustCommand\RetrieveNumber@RefUndefText{%
      \texorpdfstring{\nfss@text{\reset@font\bfseries ??}}{??}%
    }%
  }%
  \@ifdefinable\RetrieveNumber{%
    \DeclareRobustCommand\RetrieveNumber[1]{%
      \texorpdfstring{\zref@refused{#1}}{}%
      \zref@extractdefault{#1}{numbertostore}{\RetrieveNumber@RefUndefText}%
    }%
  }%
}{%
  \@ifdefinable\RetrieveNumber@RefUndefText{%
    \DeclareRobustCommand\RetrieveNumber@RefUndefText{%
      \nfss@text{\reset@font\bfseries ??}%
    }%
  }%
  \@ifdefinable\RetrieveNumber{%
    \DeclareRobustCommand\RetrieveNumber[1]{%
      \zref@refused{#1}%
      \zref@extractdefault{#1}{numbertostore}{\RetrieveNumber@RefUndefText}%
    }%
  }%
}%
%
\zref@newprop{numbertostore}[0]{0}%
\@ifdefinable\StoreNumber{%
  \DeclareRobustCommand\StoreNumber[2]{%
    \begingroup
    \zref@setcurrent{numbertostore}{#2}%
    \zref@labelbyprops{#1}{numbertostore}%
    \endgroup
    \RetrieveNumber{#1}%
  }%
}%
\@ifdefinable\CheckWhetherMath{%
  \DeclareRobustCommand\CheckWhetherMath{%
    \relax\ifmmode\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi 
  }%
}%
\makeatother

\usepackage{amsmath}

\usepackage[cbgreek]{textgreek} % cbgreek/euler/artemisia

\pagestyle{headings}

\begin{document}

\section{About a sum which equals \protect\NoCaseChange{\RetrieveNumber{sum in table 1}}}
\label{about a sum in table 1}

This section has the title: \nameref*{about a sum in table 1}.

\bigskip

\noindent\autoref*{table1} shows that the sum equals \RetrieveNumber{sum in table 1}.

% pi-symbol is  0x03C0 in utf-16.
% higher byte is 03 (Hex) = 3(dec) = 003(oct), 
% lower byte is C0 (Hex) = 192(dec) =  300(oct), 
% Higher byte must be marked by \9, thus the unicode-octal-triplet-pdfstring is: \9003\300

\begin{table}[h]
\centering
\begin{tabular}{|c|c|}
\hline
&\text{Sum}\\ \hline
Bla bla&\StoreNumber{sum in table 1}{\string\texorpdfstring{\CheckWhetherMath{\pi}{\textpi}}{\string\9003\string\300}}\\\hline
\end{tabular}%
\caption{A table where the sum equals \RetrieveNumber{sum in table 1}}%
\label{table1}%
\end{table}

\noindent\autoref*{table1} shows that the sum equals \RetrieveNumber{sum in table 1}.

\begin{equation}
\RetrieveNumber{sum in table 1}+\RetrieveNumber{sum in table 1}=2\cdot\RetrieveNumber{sum in table 1}
\end{equation}

\bigskip

\noindent\autoref*{table1} has the title: \nameref*{table1}

\bigskip

\hrule

\bigskip

\section{About a sum which equals \protect\NoCaseChange{\RetrieveNumber{sum in table 2}}}
\label{about a sum in table 2}

This section has the title: \nameref*{about a sum in table 2}.

\bigskip

\noindent\autoref*{table2} shows that the sum equals \RetrieveNumber{sum in table 2}.

\begin{table}[h]
\centering
\begin{tabular}{|c|c|}
\hline
&\text{Sum}\\ \hline
Bla bla&\StoreNumber{sum in table 2}{\number\numexpr(1*3)+1+1\relax}\\\hline
\end{tabular}%
\caption{A table where the sum equals \RetrieveNumber{sum in table 2}}%
\label{table2}%
\end{table}

\noindent\autoref*{table2} shows that the sum equals \RetrieveNumber{sum in table 2}.

\bigskip

\noindent\autoref*{table2} has the title: \nameref*{table2}

\begin{equation}
\RetrieveNumber{sum in table 2}+\RetrieveNumber{sum in table 2}=2\cdot\RetrieveNumber{sum in table 2}
\end{equation}

\bigskip

\hrule

\bigskip

\tableofcontents

\listoftables

\end{document}

\label숫자 저장 및 검색은 LaTeX 2ε 커널의 - - 메커니즘 과 유사하게 구현되므로 \ref모든 것이 일치할 때까지 문서를 최소한 두 번 컴파일해야 합니다.??문서의 모든 위치에서 올바른 번호로 대체됩니다. 패키지 북마크가 로드되지 않은 동안 패키지 하이퍼참조가 사용 중인 경우 문서를 최소한 세 번 컴파일해야 합니다.

내 예에서는 textcase-package를 로드했습니다. 문자의 대문자/소문자를 방지하는 수단을 제공합니다.

대문자로 된 섹션 제목이 있는 페이지 헤더를 자동으로 생성하는 기사와 같은 문서 클래스의 경우 \pagestyle{headings}이는 검색할 참조 레이블 또는 숫자의 이름을 나타내는 문자의 대문자를 방지하는 데 필요합니다. 그렇지 않으면 a가 페이지 헤더 내에서 \Retrievenumber{sum in table 1}변환될 것이며 \Retrievenumber{SUM IN TABLE 1}, 이는 "SUM IN TABLE 1"이라는 숫자가 저장되지 않았기 때문에 문제가 될 수 있습니다.

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

북마크는 다음과 같습니다.

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

관련 정보