
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}