\citefield 결과에 대한 문자열 비교

\citefield 결과에 대한 문자열 비교

내 턱받이 파일의 모든 항목을 나열하기 위해 사용자 정의 항목 포맷터를 사용하고 있지만 \citeall특정 저널의 항목을 조건부 형식으로 지정하고 싶습니다. 이를 위해 를 사용하여 \ifthenelse결과와 문자열 비교를 시도했지만 \citefield{key}{journaltitle}작동하지 않습니다. 단편:

\newcommand{\completecite}[1]{%
    \ifstrequal{\citefield{#1}{journaltitle}}{CoRR}{TRUE}{FALSE}
}
\citeall[\completecite]

그럼에도 불구하고 모든 항목에 대해 "FALSE"를 내뱉습니다.

\newcommand{\completecite}[1]{%
    \citefield{#1}{journaltitle}
}
\citeall[\completecite]

"CoRR"인 출력이 많이 있습니다. 문제는 문자열이 \citefield{#1}{journaltitle}"CoRR"과 비교된다는 것인데, 내가 원하는 것은\citefield매크로 호출 결과.

나는 \expandafter더 정교한 문자열 비교 예제를 시도했지만 아직 아무것도 작동하지 않았습니다. 나는 xstring, xifthen및 패키지도 다루었 pdftexcmds습니다. 도대체 etoolbox를 다음 \ifdefstring과 같이 사용해도

\newcommand{\completecite}[1]{%
    \ifdefstring{\citefield{#1}{journaltitle}}{CoRR}{TRUE}{FALSE}
}
\citeall[\completecite]

작동하지 않았습니다.

답변1

이 질문과 비슷한 문제가 발생했습니다.\ifx가 \MakeUppercase{1}와 \MakeLowercase{1}를 다르게 간주하는 이유는 무엇입니까?

\citefield텍스트를 반환하는 함수가 아니라 필드 내용을 인쇄하는 명령입니다(TeX의 언어는 매크로 확장을 기반으로 하므로 실제로 함수 자체가 없으며 이는 완전히 다른 문제입니다).

BibLaTeX 내부에 더 익숙한 사람은 의미 있는 방식으로 저널 제목을 추출하는 방법을 찾을 수 있습니다. 최종 목표가 무엇인지 명시적으로 설명합니다.)

답변2

이는 에서 논의된 문제와 유사합니다.\cite에서 반환된 인용문에 문자열 대체를 적용합니다..

처럼돈 호섹에서 설명그의 대답, biblatex\...cite...명령은 조판을 위한 것이며 조판 가능한 텍스트 자체로 확장(또는 반환)되지 않습니다. 즉, 일반적인 TeX 도구를 사용하면 \...cite...명령에 의해 생성된 출력의 비트를 간단한 텍스트와 비교하거나 대체할 수 없습니다.

의 필드 내용을 비교할 수 있지만 biblatex이는 '컨텍스트'에 있는 동안 다른 수준에서 발생해야 합니다 biblatex. 일반적으로 이는 문제가 되지 않습니다. 인용이나 참고문헌의 결과에 영향을 미치려면 어쨌든 해당 맥락에서 작업해야 하기 때문입니다.

다음은 를 사용한 매우 간단한 예입니다 \iffieldequalstr. 우리는 컨텍스트 \AtEveryBibitem에 연결하는 데 사용합니다 biblatex. 일반적으로 수정하는 bibmacro에서 이와 같은 테스트를 사용합니다.

\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[style=authoryear, backend=biber]{biblatex}

\AtEveryBibitem{%
  \iffieldequalstr{journaltitle}{CoRR}
    {T}
    {F}}

\begin{filecontents}{\jobname.bib}
@article{appleby,
  author  = {Humphrey Appleby},
  title   = {On the Importance of the Civil Service},
  journal = {CoRR},
  date    = {1980},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}


\begin{document}
\cite{sigfridsson,appleby}
\printbibliography
\end{document}

TAppleby, 험프리(1980). '공무원의 중요성에 대하여'. In: CoRR.//FSigfridsson, Emma 및 Ulf Ryde(1998). '정전기 전위와 모멘트로부터 원자 전하를 유도하는 방법 비교'. In: Journal of Computational Chemistry 19.4, pp. 377–395. doi: 10.1002/(SICI)1096-987X(199803)19:4<377::AID-JCC1>3.0.CO;2-P.


특정 필드에 대한 문자열 비교(항상 약간 까다로움)보다 특정 클래스의 항목을 더 잘 감지하는 다른 방법이 있을 수 있습니다. 찾고 있는 속성이 이미 존재하는 데이터에서 쉽게 설정되지 않는 경우 새 옵션을 정의하거나 명시적으로 키워드를 설정하는 것이 일반적입니다.


arXiv CoRR(https://arxiv.org/corr), 그렇다면 arXiv 자체와 마찬가지로 CoRR은 실제로 저널이 아니라고 주장하고 싶습니다. 그런 항목에 대해서는 내가 사용하겠습니다 @online(참조.Biblatex 참고문헌 항목에서 저널 제목 필드가 없는 @article 형식).

관련 정보