\cite에서 반환된 인용문에 문자열 대체를 적용합니다.

\cite에서 반환된 인용문에 문자열 대체를 적용합니다.

biblatex옵션이 있어요

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

인용은 \cite다음과 같습니다: Smith, 2019또는 Smith and Baker, 2019등등. 내 이름이 자동으로 내 이니셜로 바뀌는 명령을 정의하고 싶습니다. 즉 나는 필요하다

\cite{SmithsPaper}  % --> Smith, 2019
\cite{MyPaper}      % --> Manny, 2019
%%%
\newcite{SmithsPaper}  % --> Smith, 2019
\newcite{MyPaper}      % --> MC, 2019

나는 패키지로 xstring다음과 같은 일을 시도했습니다.

\newcommand{\newcite}[1]{%
  \begingroup
  \edef\@temp{\cite{#1}}%
  \StrSubstitute{\@temp}{Manny}{MC}
  \endgroup
}

문제는 LaTeX에게 확장을 지시하는 방법을 알 수 없다는 것입니다 \cite{#1}. 결과적으로 인용문은 교체 없이 나옵니다. \cite{#1}간단하게 변경 #1하고 호출하면 예상대로 \newcite{bla Manny bla}제공됩니다 .bla MC bla

관련성이 없어야 하지만 나는 이것을 비머 문서 클래스 내에서 사용하고 있습니다.

답변1

처럼스킬몬주석에 다음과 같이 나와 있습니다. \cite...명령은 확장할 수 없으므로 교체 작업을 (쉽게) 수행할 수 없습니다 xstring. 대신 biblatex직접 교체를 시도하겠습니다 .

이를 수행하는 한 가지 방법은 다음과 같은 접근 방식을 사용하는 것입니다.내 대답에게biblatex를 사용하여 특정 저자를 굵게 표시(또한보십시오참고문헌 스타일을 사용하여 형식을 지정할 수 있는 biblatex를 사용하여 참고문헌에서 저자를 강조합니다.). 아이디어는 바꾸려는 이름에 대해 Biber가 계산한 고유한 이름 해시를 얻은 다음 이를 의 이니셜로 바꾸는 것입니다 \mkbibcompletename.

biblatex이 특정 구현에는 버전 3.13(2019-08-17) 이상이 필요합니다 .

다음으로 이름 교체를 요청할 수 있습니다.\replacenamewith{<name>}{<replacement>}

\replacenamewith{Emma Sigfridsson}{ES}

대체 항목은 재정의하여 스타일을 지정할 수 있습니다 \mkbinamereplacement.

좀 더 자세한 설명은 위 링크에서 보실 수 있습니다.

경고<name of the main TeX file/\jobname>-replacenames.bib, 이 문서는 경고 없이 파일을 덮어씁니다 . 덮어쓴 이 도우미 파일의 이름은 을 다시 정의하여 변경할 수 있습니다 \hlblx@bibfile@name.

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[backend=biber, style=authoryear]{biblatex}

\addbibresource{biblatex-examples.bib}

\makeatletter
\def\hlblx@bibfile@name{\jobname -replacenames.bib}
\newwrite\hlblx@bibfile
\immediate\openout\hlblx@bibfile=\hlblx@bibfile@name

\newcounter{hlblx@name}
\setcounter{hlblx@name}{0}

\newcommand*{\hlblx@writenametobib}[2]{%
  \stepcounter{hlblx@name}%
  \edef\hlblx@tmp@nocite{%
    \noexpand\AfterPreamble{%
      \noexpand\setbox0\noexpand\vbox{%
        \noexpand\hlblx@getmethehash{hlblx@name@\the\value{hlblx@name}}}}%
  }%
  \hlblx@tmp@nocite
  \immediate\write\hlblx@bibfile{%
    @misc{hlblx@name@\the\value{hlblx@name},
          author = {\unexpanded{#1}}, %
          note   = {\unexpanded{#2}}, %
          options = {dataonly=true},}%
  }%
}

\AtEndDocument{%
  \closeout\hlblx@bibfile}

\addbibresource{\hlblx@bibfile@name}

\newcommand*{\hlblx@hashextract@i}[1]{%
  \csgdef{replacename@\thefield{fullhash}}{#1}}

\DeclareNameFormat{hlblx@hashextract}{%
  \usefield{\hlblx@hashextract@i}{note}}

\DeclareCiteCommand{\hlblx@getmethehash}
  {}
  {\printnames[hlblx@hashextract][1-999]{author}}
  {}
  {}

\renewcommand*{\mkbibcompletename}[1]{%
  \ifcsundef{replacename@\thefield{hash}}
    {#1}
    {\mkbinamereplacement{\csuse{replacename@\thefield{hash}}}}}

% {<name>}{<replacement>}
\newcommand*{\replacenamewith}{\hlblx@writenametobib}
\makeatother

% formatting for the replacement
\newcommand*{\mkbinamereplacement}[1]{\textbf{#1}}

% declare a replacement for a name
% this command can be used several times
\replacenamewith{Emma Sigfridsson}{ES}

\begin{document}
\cite{sigfridsson}

\printbibliography
\end{document}

ES와 라이드 1998

관련 정보