
내 턱받이 파일의 모든 항목을 나열하기 위해 사용자 정의 항목 포맷터를 사용하고 있지만 \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}
특정 필드에 대한 문자열 비교(항상 약간 까다로움)보다 특정 클래스의 항목을 더 잘 감지하는 다른 방법이 있을 수 있습니다. 찾고 있는 속성이 이미 존재하는 데이터에서 쉽게 설정되지 않는 경우 새 옵션을 정의하거나 명시적으로 키워드를 설정하는 것이 일반적입니다.
arXiv CoRR(https://arxiv.org/corr), 그렇다면 arXiv 자체와 마찬가지로 CoRR은 실제로 저널이 아니라고 주장하고 싶습니다. 그런 항목에 대해서는 내가 사용하겠습니다 @online
(참조.Biblatex 참고문헌 항목에서 저널 제목 필드가 없는 @article 형식).