외부 데이터를 참조하는 데 사용할 수 있는 기존 모듈이 있습니까? 예를 들어 분석 결과를 일종의 라이브러리에 추가하고 텍스트 전체에서 사용할 수 있는 인용 키를 제공하고 싶습니다. 인용 키를 사용하여 실수/일관성 문제를 방지하고 분석이 수정되는 경우 원고 전체의 데이터를 신속하게 업데이트할 수 있다는 아이디어입니다.
답변1
myData.txt
예를 들어 다음 내용이 포함된 외부 파일을 제공하겠습니다 .
% Content of myData.txt
\newcommand{\myVariablePi}{3.14}
\newcommand{\myVariableEuler}{2.71}
기본 문서에서 를 사용하여 이 파일을 가져올 수 있습니다 \input{myData.txt}
. 그런 다음 \myVariablePi
문서에서 변수로 사용할 수 있습니다 .
참고 사항 1:변수 뒤에 공백을 두거나 패키지를 사용하려면 끝에 \myVariablePi{}
( ) 가 필요할 수 있습니다 .{}
xspace
참고 사항 2:변수를 업데이트한 후에도 귀하의 진술이 여전히 유효한지 확인하세요 :).
답변2
주석에 비추어 다음을 수행할 수 있습니다. my-variables.sty
예를 들어 다음을 포함하는 파일을 만듭니다.
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{my-variables}
\RequirePackage{siunitx}
% Commands for setting and getting variables
\newcommand{\setvariable}[2]{
\expandafter\def\csname myv@riable@#1\endcsname{#2}
}
\newcommand{\getvariable}[1]{%
\csname myv@riable@#1\endcsname
}
% My variable variable definitions
\setvariable{speed-of-light}{\SI{299 792 458}{m/s}}
그리고 집의 texmf-tree에 넣으세요. Linux 컴퓨터의 경우 이는 ~/texmf/tex/latex/local
. kpsewhich -var-value TEXMFHOME
터미널에서 실행하여 올바른 디렉토리를 찾아야 합니다 .
이제 다음 tex 파일을 작성하여 "라이브러리"를 활용할 수 있습니다.
\documentclass{article}
\usepackage{my-variables}
\begin{document}
The speed of light is \getvariable{speed-of-light}.
\end{document}
파일에 저장된 빛의 속도가 정확해야 합니다 my-variables.sty
.
참고 사항:라이브러리 파일에서 읽은 모든 변수를 강조표시한다고 가정해 보세요. 내가 상상할 수 있는 이에 대한 사용 사례는 문서를 빠르게 훑어보고 라이브러리에서 모든 수량을 실제로 읽었는지 확인하려는 것입니다. 내가 제안한 솔루션을 사용하면 다음과 같이 할 수 있습니다.
\renewcommand{\getvariable}[1]{%
\colorbox{yellow!50}{\csname myv@riable@#1\endcsname}
}
또는 방정식을 강조하기 위해 무엇을 하든 상관없습니다.
답변3
자세히 설명하기부바야의 솔루션 오타 등으로 인해 실수로 정의되지 않은 값을 얻으려고 하거나 이미 정의된 값을 정의하려고 시도하는 경우 약간의 오류 관리를 추가할 수 있습니다.
값을 설정하고 검색하는 매크로가 있는 곳에 코드를 넣었습니다.한정된이름이 다음과 같은 .sty 파일로 자체적으로SetValues.sty.
이 매크로가 있는 곳에 코드를 넣었습니다.사용된이름이 다음과 같은 다른 .sty 파일에 값을 설정하는 경우MyValues.sty.
아래 예제를 컴파일하면 -environments로 인해 이러한 .sty 파일이 자동으로 생성됩니다 filecontents*
.
원하는 경우 두 개의 .sty 파일을 병합할 수 있습니다.
다른 프로젝트 및 다른 값 집합에도 이러한 매크로를 사용하고 싶을 수도 있기 때문에 그렇게 하지 않았습니다. ;-)
\documentclass{article}
% Let LaTeX create the file SetValues.sty in case it does not already exist
% on the system:
\begin{filecontents*}{SetValues.sty}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{SetValues}
\newcommand\SetValues@Exchange[2]{#2#1}%
\newcommand\SetValues@Name{}%
\long\def\SetValues@Name#1#{\romannumeral0\SetValues@@Name{#1}}%
\newcommand\SetValues@@Name[2]{%
\expandafter\SetValues@Exchange\expandafter{\csname#2\endcsname}{ #1}%
}%
\DeclareRobustCommand\GetValue[1]{%
\@ifundefined{SetValues@@@#1}%
{%
\SetValues@UndefText
\GenericError{\space\@spaces\@spaces}%
{Error: Value `#1' not defined}%
{Source for further information on this error is neither available nor needed.}%
{It was attempted to obtain a value with name `#1'\MessageBreak%
although such a value is not defined.\MessageBreak%
Either the intended value has another name (typo or the like?)\MessageBreak%
or it needs to be defined.%
}%
}{%
\SetValues@Name{SetValues@@@#1}%
}%
}%
\DeclareRobustCommand\SetValue[1]{%
\@ifundefined{SetValues@@@#1}%
{\SetValues@Name\newcommand*{SetValues@@@#1}}%
{%
\GenericError{\space\@spaces\@spaces}%
{Error: Value `#1' already defined}%
{Source for further information on this error is neither available nor needed.}%
{A value with name `#1' is already defined.\MessageBreak%
Either choose another name for the value\MessageBreak%
or modify the existing definition.%
}%
}%
}%
\@onlypreamble\SetValue
\AtBeginDocument{%
\@ifpackageloaded{hyperref}{%
\DeclareRobustCommand\SetValues@UndefText{%
\texorpdfstring{\nfss@text{\reset@font\bfseries ??}}{??}%
}%
}{%
\DeclareRobustCommand\SetValues@UndefText{%
\nfss@text{\reset@font\bfseries ??}%
}%
}%
}%
\endinput
\end{filecontents*}
% Let LaTeX create the file MyValues.sty in case it does not already exist
% on the system:
\begin{filecontents*}{MyValues.sty}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{MyValues}
\RequirePackage{SetValues}
%
% At this place you can require whatever additional packages you
% need for having LaTeX typeset your values nicely:
\RequirePackage{siunitx}
%\RequirePackage ...
%
% Now do a sequence of calls to \SetValue for defining values:
\SetValue{ApproxPi}{\num{3.1415927}}%
%\SetValue...
%
\endinput
\end{filecontents*}
%\usepackage{SetValues} % Actually you don't need to require the
% SetValues-package as it is also required
% by the MyValues-package.
\usepackage{MyValues}
\begin{document}
$\pi$ is approximately \GetValue{ApproxPi}
\end{document}