ReVTeX의 참고문헌 관리는 어떻게 작동하나요?

ReVTeX의 참고문헌 관리는 어떻게 작동하나요?

내 텍스트에 맞게 조정한 ReVTeX bst 파일에는 다음과 같은 코드 부분이 있습니다.

FUNCTION {control.decode}
{
  - duplicate$
  #0 <
    {
      skip$ pop$ swap$ #0
    }
    {
      swap$ pop$ swap$ #1
    }
  if$
  swap$ :=
}
FUNCTION {control.author.decode}
{
  control.author
  duplicate$ duplicate$ #0 < swap$ #128 < not or
    {
      int.to.str$ "(" swap$ * ")" *
      "Control cannot interpret author " swap$ *
      warning$
    }{
      'control.author.jnrlst   swap$ duplicate$ #64 control.decode
      'control.author.dotless  swap$ duplicate$ #32 control.decode
      'control.author.nospace  swap$ duplicate$ #16 control.decode
      'control.author.initials swap$ duplicate$  #8 control.decode
      'control.author.nocomma  swap$ duplicate$  #4 control.decode
      'control.author.first    swap$ duplicate$  #2 control.decode
      'control.author.reversed swap$ duplicate$  #1 control.decode
      duplicate$ #0 =
        'skip$
        {
          "Control: residue of author"
          "(" swap$ * ")" * *
          warning$
        }
      if$
      pop$
    }
  if$
}

이 코드는 내가 엉망으로 만들고 싶은 작성자 표시 옵션을 설정합니다. 옵션은 다음과 같이 설정됩니다.

@CONTROL{REVTEX41Control}
@CONTROL{apsrev41Control,author="42",editor="1",pages="1",title="0",year="0"}

가 일부 옵션 설정을 나타내는 경우 42(3, 7, 00과 같은 임의의 값을 선택하기 때문에) 이러한 옵션과 관련된 경고가 생성됩니다. 이것이 어떻게 '디코딩'되는지 설명해 줄 수 있는 사람이 있나요? 이것이 실제로 출력에 어떤 영향을 미치는지 알고 싶습니다.

답변1

여기서의 아이디어는 control.author모두 하나의 숫자로 인코딩된 다양한 옵션에 대한 정보를 전달할 수 있다는 것입니다. 이는 일련의 부울 설정을 전달하기 위해 숫자의 다른 비트를 사용하는 표준 아이디어입니다. 데이터를 '복구'하려면 먼저 범위(0보다 큼, 128보다 작음)에 있는 control.author.decode테스트를 수행합니다 . control.author그건 다음에 의해 이루어졌어

control.author
duplicate$ duplicate$ #0 < swap$ #128 < not or

그러면 입력 스택에 의 값 control.author과 논리적 결과(a 1또는 a 0)가 남습니다. 후위 언어는 후자를 의 일부로 선택합니다 if$. 테스트가 통과되었다고 가정하면 블록은

'control.author.jnrlst   swap$ duplicate$ #64 control.decode
'control.author.dotless  swap$ duplicate$ #32 control.decode
'control.author.nospace  swap$ duplicate$ #16 control.decode
'control.author.initials swap$ duplicate$  #8 control.decode
'control.author.nocomma  swap$ duplicate$  #4 control.decode
'control.author.first    swap$ duplicate$  #2 control.decode
'control.author.reversed swap$ duplicate$  #1 control.decode

풋은이름각 설정을 스택에 저장한 다음 비트 단위로 추출하는 데 필요한 값을 입력하고 공통 디코더를 호출합니다. 예를 들어

'control.author.jnrlst   swap$ duplicate$ #64 control.decode

입력이 42스택에 있을 것입니다.

"control.author.jnrlst" #42 #42 #64

전화하기 직전에 control.decode. 나중에는 64컨트롤의 현재 값(여기 42)에서 최종 값(여기: '테스트 값')을 가져옵니다. 입력이 'test' 값보다 큰 경우 플래그(여기 control.author.jnrlst)는 (true)로 설정되고 1결과 잔여물은 다음 테스트를 위한 입력에 남게 됩니다. 테스트가 실패하면 입력 값( 42)이 유지되고 플래그가 0(false)로 설정됩니다. 이를 통해 각 플래그를 true/false로 설정하고 모든 입력(범위 내에 있는 모든 숫자에 대해 테스트 결과는 0 값이어야 합니다.

주어진 예에서 설정 값은 authors32 42+ 8 + 2로 분류됩니다.설정 control.author.dotless및 true이고 다른 설정은 false입니다 control.author.initials. control.author.first따라서 '올바른' 값을 계산하려면 활성화하려는 설정을 결정하고 코드를 살펴보고 적절한 값을 찾은 다음 모두 함께 추가하세요.

관련 정보