
XeLaTeX를 Biber와 함께 사용하여 참고문헌이 포함된 문서를 만들고 싶습니다. 참고문헌에는 중국어 서적과 기사는 물론 영어나 독일어도 있습니다. 저자 중 일부는 중국어와 영어로 기사(또는 여기서는 별로 중요하지 않은 책)를 썼습니다. 중국어 기사에서는 문자를 사용하여 저자의 중국어 이름도 지정하고 싶지만 그의 영어 기사에서는 그럴 필요가 없습니다.
다음은 내 .bib 파일의 예입니다. 이 \zh{}
함수는 LaTeX가 각주에도 문자를 인쇄하는 것을 방지하는 데 사용됩니다.
@article{Liu2008,
author = {Liu, {Guofu \zh{(刘国福)}}},
title = {The Latest Development of Immigration Law: On the Transformation of China's Emmigration and Immigration Administration Law (移民法的最新发展——兼论中国出入境管理法的改造和重塑)},
journal = {Journal of Henan Administrative Institute of Politics and Law (河南省政法管理干部学院学报)},
year = {2008},
volume = {5},
pages = {46--58},
language = {chinese},
keywords = {article,hani}
}
@book{Liu2011,
author = {Liu, {Guofu \zh{(刘国福)}}},
title = {Chinese Immigration Law},
year = {2011},
publisher = {Ashgate},
address = {Farnham},
language = {english},
keywords = {monography,latn}
}
이제 요점은 다음과 같습니다. 물론 Biber는 작성자 필드의 내용이 두 레코드에서 동일한 경우에만 작성자를 동일한 것으로 인식합니다. 영문 기사에서도 한자를 사용하지 않으면, 비버는 '두' 저자를 구별할 수 있도록 성명을 표기하며 실제로 동일하다는 사실을 무시합니다. 그러므로 영어나 독일어 기사에서도 저자 이름에 한자를 포함시켜야 합니다.
그렇게 해서 원하는 대로 다 얻었습니다. 참고문헌에는 저자 이름이 “LIU, Guofu (刘國福) (2008)” 패턴으로 되어 있고, 각주에는 “LIU 2008”만 있습니다. Liu라는 다른 작가는 없습니다).
내 .tex 파일의 서문 부분에 다음 코드 조각을 사용하여 이 작업을 수행했습니다.
\providecommand{\zh}[1]{}
\AtBeginBibliography{%
\renewcommand*{\zh}[1]{#1}
}
\zh{}
하지만: 항목에 중국어가 언어로 설정되어 있지 않은 경우 작성자 필드의 해당 부분을 인쇄하지 않도록 LaTeX에 어떻게 지시합니까? 조건부로 설정하는 방법이 있나요? 또한, 각주에는 한자가 절대로 나타나서는 안 됩니다. LaTeX에게 .tex 파일에서 직접 수행하는 방법을 알려줄 수 있다면 좋을 것 같습니다.
저자가 여러 명인 기사도 있는데, 그러면 “WANG, Liping(王丽萍); ZHANG, Ailing (张爱玲) (2008)”은 한자에 대한 또 다른 입력 필드를 사용하는 것이 다소 복잡하다고 생각합니다. 왜냐하면 모든 한자 이름이 라틴 문자로 된 저자 이름 목록 뒤에 오기 때문입니다.
편집(2014-03-22):
내 문제는 이미 다른 곳에서 고려된 것 같습니다.
biblatex, biber 및 polyglossia를 사용하여 다국어(영어, 일본어) 참고문헌을 만드는 방법
따라서 bibLaTeX 3.0 및 biber 2.0(두 버전 모두 현재 실험 단계에 있음)부터 대부분의 분야에 대한 전사 또는 번역을 저장할 가능성이 있으며 더욱 놀라운 것은 디스플레이 모드를 설정하는 방법이 있습니다(원본 보기 언어, 번역 표시 등)을 각 .bib 항목에 대해 별도로 표시합니다.
편집(2014-03-23):
이름 접사를 사용하는 또 다른 접근 방식은 다음과 같습니다.
https://tex.stackexchange.com/a/66825/47927
이것은 ienissei 제안의 실제 사례인 것 같습니다.
답변1
나중에 참조할 수 있도록 내 질문에 대한 포괄적인 답변을 마지막으로 제공하기 위해 다음은 내가 처음에 원했던 작업을 수행합니다.
우선, \zh{}
토큰을 사용할 필요가 없습니다. 이 예는 Audrey가 설명한 대로 이름 접사를 사용하여 작동하기 때문입니다.https://tex.stackexchange.com/a/66825/47927
나는 Audrey의 제안 중 일부를 사용하지 않았습니다 titleaddon
. 왜냐하면 이것이 필요하지 않았기 때문입니다. 또한 저는 성-이름 순서만 사용했습니다.
따라서 참고문헌 항목은 다음과 같아야 합니다('latn' 또는 'hani' 키워드는 해당 기사의 쓰기 체계를 나타내기 위한 것이며 이름의 중국어 부분을 조건부로 숨기는 데 사용됩니다).
@article{Liu2008,
author = {Liu, 刘国福, Guofu},
title = {The Latest Development of Immigration Law: On the Transformation of China's Emmigration and Immigration Administration Law (移民法的最新发展——兼论中国出入境管理法的改造和重塑)},
journal = {Journal of Henan Administrative Institute of Politics and Law (河南省政法管理干部学院学报)},
year = {2008},
volume = {5},
pages = {46--58},
language = {chinese},
keywords = {article,hani}
}
@book{Liu2011,
author = {Liu, 刘国福, Guofu},
title = {Chinese Immigration Law},
year = {2011},
publisher = {Ashgate},
address = {Farnham},
language = {english},
keywords = {monography,latn}
}
이제 .tex 파일 부분(위의 Audrey 링크 게시에서 약간 편집됨):
% Keep name affixes for English names
\forcsvlist{\listadd\nameaffixlist}{Junior,Senior}
\newcommand{\ifnameaffix}[1]{%
\ifboolexpr{test{\ifrmnum{#1}} or test{\ifinlist{#1}{\nameaffixlist}}}}
% Set label format using last-first order
\DeclareNameFormat{labelname}{%
\ifboolexpr{test{\ifblank{#7}} or test{\ifnameaffix{#7}}}
{\ifcase\value{uniquename}%
\usebibmacro{name:last}{#1}{#3}{#5}{#7}\or
\ifuseprefix
{\usebibmacro{name:last-first}{#1}{#4}{#5}{#8}}
{\usebibmacro{name:last-first}{#1}{#4}{#6}{#8}}\or
\usebibmacro{name:last-first}{#1}{#3}{#5}{#7}\fi}%
{\ifnumequal{\value{uniquename}}{0}%
{\usebibmacro{name:cjk}{#1}{}{}}
{\usebibmacro{name:cjk}{#1}{#3}{}}}%
\usebibmacro{name:andothers}
}
% Set name field format also using last-first order
\DeclareNameFormat{last-first}{%
\ifboolexpr{test{\ifblank{#7}} or test{\ifnameaffix{#7}}}
{\iffirstinits
{\usebibmacro{name:last-first}{#1}{#4}{#5}{#7}}
{\usebibmacro{name:last-first}{#1}{#3}{#5}{#7}}}
{\usebibmacro{name:cjk}{#1}{#3}{#7}}%
\usebibmacro{name:andothers}
}
\DeclareNameAlias{sortname}{last-first}
\DeclareNameAlias{default}{last-first}
% Making Chinese name appear after first name in parentheses, but only if the keyword 'hani' exists (see bib entries above for reference)
\newbibmacro*{name:cjk}[3]{%
\usebibmacro{name:delim}{#2#3#1}%
\usebibmacro{name:hook}{#2#3#1}%
\mkbibnamelast{#1}%
\ifblank{#2}{}{\bibnamedelimd\mkbibnamefirst{#2}}%
\ifkeyword{hani}{%
\ifblank{#3}{}{\bibnamedelimd\mkbibnameaffix{\mkbibparens{#3}}}%
}{}
}
\AtEveryBibitem{\clearlist{language}}
\AtBeginBibliography{%
\renewcommand*{\multinamedelim}{\addsemicolon\space}
}
고려해야 할 한 가지: 참고문헌에 저자의 첫 번째 등장만 있고 다음 등장은 대시로 대체된 경우 이 스크립트는 첫 번째 항목의 언어에 따라 첫 번째 등장을 선택합니다. 따라서 첫 번째 항목이 중국어가 아니지만 다음 항목 중 하나가 중국어인 경우 중국어 이름은 어디에도 표시되지 않습니다.
편집(2018-01-22):
매크로 이름 name:last
및 가 및 name:first
로 변경되었으며 이에 따라 매크로 이름도 및 로 변경되었습니다 . 또한 로 변경해야 합니다 . 나는 최근에 이 답변을 테스트하지 않았습니다. 그 동안 BibLaTeX 패키지가 여러 번 업데이트되었기 때문에 몇 가지 다른 사항을 변경해야 할 것 같습니다.name:family
name:given
\mkbibnamefirst
\mkbibnamegiven
\iffirstinits
\ifgiveninits
\ifblank
\ifdefvoid
이것은 MWE로서의 최종 설정입니다(비록 꽤 많은 코드가 있지만).
\begin{filecontents}{example.bib}
@article{Liu2008,
author = {Liu, 刘国福, Guofu},
title = {The Latest Development of Immigration Law: On the Transformation of China's Emmigration and Immigration Administration Law (移民法的最新发展——兼论中国出入境管理法的改造和重塑)},
journal = {Journal of Henan Administrative Institute of Politics and Law (河南省政法管理干部学院学报)},
year = {2008},
volume = {5},
pages = {46--58},
language = {chinese},
keywords = {article,hani}
}
@book{Liu2011,
author = {Liu, 刘国福, Guofu},
title = {Chinese Immigration Law},
year = {2011},
publisher = {Ashgate},
address = {Farnham},
language = {english},
keywords = {monography,latn}
}
\end{filecontents}
\documentclass{article}
\usepackage{fontspec}
\setmainfont[SmallCapsFeatures={LetterSpace=2}]{TeX Gyre Termes}
\usepackage{xeCJK}
\setCJKmainfont[Script=CJK]{Noto Serif CJK SC}
\CJKsetecglue{\,}
\usepackage[
backend=biber,
language=autobib,
autolang=hyphen,
style=authoryear,
defernumbers=true,
sortlocale=en-GB,
urldate=long,
dateabbrev=false,
sortcites=true,
sorting=anyvt,
safeinputenc
]{biblatex}
% =====
\renewbibmacro*{labeltitle}{\iffieldundef{shorttitle}%
{\printfield{title}\clearfield{title}}%
{\mkbibemph{\printfield{shorttitle}}\addspace\printtext[parens]{\printfield{year}}}%
}
\renewbibmacro*{date+extradate}{\ifkeyword{law}%
{}%
{\printtext[parens]{%
\iflabeldateisdate%
{\printfield{issue}\setunit*{\addspace}\printdateextra}%
{\printlabeldateextra}}}%
}
\renewbibmacro*{issue+date}{\ifkeyword{law}%
{}%
{\iflabeldateisdate%
{\printfield{issue}\setunit*{\addspace}\printtext[parens]{\printdate}}%
{\printtext[parens]{\printfield{issue}\setunit*{\addspace}\printdate}}}%
}
\renewbibmacro*{cite:labeldate+extradate}{\ifkeyword{law}%
{}%
{\iffieldundef{labelyear}%
{}%
{\printtext[bibhyperref]{\mkbibparens{\printlabeldateextra}}}}%
}
\renewcommand*{\multinamedelim}{\addnbthinspace\slash\thinspace}
\renewcommand*{\finalnamedelim}{\multinamedelim}
\renewcommand*{\labelnamepunct}{\addcolon\addspace}
\renewcommand*\mkbibnameprefix[1]{\textsc{#1}}
\renewcommand*\mkbibnamefamily[1]{\textsc{#1}}
\renewcommand*\bibnamedash{\rule[.48ex]{3em}{.5pt}\addspace}
\DeclareFieldFormat*{citetitle}{\mkbibemph{#1}}
\DeclareFieldFormat*{extradate}{\addnbthinspace\mknumalph{#1}}
\DeclareFieldFormat*{url}{URL\addcolon\addspace\url{#1}}
% =====
% Settings for Chinese names
\forcsvlist{\listadd\nameaffixlist}{Junior,Senior}
\newcommand{\ifnameaffix}[1]{%
\ifboolexpr{ test {\ifrmnum{#1}} or test {\xifinlist{#1}{\nameaffixlist}} }}
% Based on definitions from biblatex.def
\newbibmacro*{name:cjk}[3]{%
\usebibmacro{name:delim}{#2#3#1}%
\usebibmacro{name:hook}{#2#3#1}%
\mkbibnamefamily{#1}%
\ifdefvoid{#2}{}{\bibnamedelimd\mkbibnamegiven{#2}}%
\ifkeyword{hani}{%
\ifdefvoid{#3}{}{\bibnamedelimd\mkbibnamesuffix{\mkbibparens{\upshape #3}}}%
}{}}
\newbibmacro*{name:cjk-short}[3]{%
\usebibmacro{name:delim}{#2#3#1}%
\usebibmacro{name:hook}{#2#3#1}%
\mkbibnamefamily{#1}%
\ifdefvoid{#2}{}{\bibnamedelimd\mkbibnamegiven{#2}}%
\ifkeyword{hani}{%
\ifdefvoid{#3}{}{}%
}{}}
\DeclareNameFormat{given-family}{%
\ifboolexpr{ test {\ifdefvoid{\namepartsuffix}} or test {\ifnameaffix{\namepartsuffix}} }%
{\ifgiveninits%
{\usebibmacro{name:given-family}
{\namepartfamily}
{\namepartgiveni}
{\namepartprefix}
{\namepartsuffix}}%
{\usebibmacro{name:given-family}
{\namepartfamily}
{\namepartgiven}
{\namepartprefix}
{\namepartsuffix}}}%
{\usebibmacro{name:cjk}{\namepartfamily}{\namepartgiven}{\namepartsuffix}}%
\usebibmacro{name:andothers}}
\DeclareNameFormat{family-given}{%
\ifboolexpr{ test {\ifdefvoid{\namepartsuffix}} or test {\ifnameaffix{\namepartsuffix}} }%
{\ifgiveninits%
{\usebibmacro{name:family-given}
{\namepartfamily}
{\namepartgiveni}
{\namepartprefix}
{\namepartsuffix}}%
{\usebibmacro{name:family-given}
{\namepartfamily}
{\namepartgiven}
{\namepartprefix}
{\namepartsuffix}}}%
{\usebibmacro{name:cjk}{\namepartfamily}{\namepartgiven}{\namepartsuffix}}%
\usebibmacro{name:andothers}}
\DeclareNameFormat{family-given/given-family}{%
\ifboolexpr{ test {\ifdefvoid{\namepartsuffix}} or test {\ifnameaffix{\namepartsuffix}} }%
{\ifnumequal{\value{listcount}}{1}%
{\ifgiveninits%
{\usebibmacro{name:family-given}
{\namepartfamily}
{\namepartgiveni}
{\namepartprefix}
{\namepartsuffix}}%
{\usebibmacro{name:family-given}
{\namepartfamily}
{\namepartgiven}
{\namepartprefix}
{\namepartsuffix}}%
\ifboolexpe{ test {\ifdefvoid\namepartgiven} and test {\ifdefvoid\namepartprefix} }%
{}%
{\usebibmacro{name:revsdelim}}}%
{\ifgiveninits%
{\usebibmacro{name:given-family}
{\namepartfamily}
{\namepartgiveni}
{\namepartprefix}
{\namepartsuffix}}%
{\usebibmacro{name:given-family}
{\namepartfamily}
{\namepartgiven}
{\namepartprefix}
{\namepartsuffix}}}}%
{\usebibmacro{name:cjk}{\namepartfamily}{\namepartgiven}{\namepartsuffix}}%
\usebibmacro{name:andothers}}
\DeclareNameFormat{labelname}{%
\ifcase\value{uniquename}%
\usebibmacro{name:family}
{\namepartfamily}
{\namepartgiven}
{\namepartprefix}
{\namepartsuffix}%
\or%
\ifboolexpr{ test {\ifdefvoid{\namepartsuffix}} or test {\ifnameaffix{\namepartsuffix}} }%
{\ifuseprefix%
{\usebibmacro{name:given-family}
{\namepartfamily}
{\namepartgiven} % i
{\namepartprefix}
{\namepartsuffix}}% i
{\usebibmacro{name:given-family}
{\namepartfamily}
{\namepartgiven} % i
{\namepartprefix} % i
{\namepartsuffix}}}% i
{\usebibmacro{name:cjk-short}{\namepartfamily}{\namepartgiven}{\namepartsuffix}}%
\or%
\ifboolexpr{ test {\ifdefvoid{\namepartsuffix}} or test {\ifnameaffix{\namepartsuffix}} }%
{\usebibmacro{name:given-family}%
{\namepartfamily}
{\namepartgiven}
{\namepartprefix}
{\namepartsuffix}}%
{\usebibmacro{name:cjk-short}{\namepartfamily}{\namepartgiven}{\namepartsuffix}}%
\fi%
\usebibmacro{name:andothers}}
\DeclareFieldFormat{citetitle}{\mkbibemph{#1}\ifkeyword{law}{\addspace\printtext[parens]{\printfield{year}}}{}}
\AtEveryBibitem{\clearlist{language}}
\AtBeginBibliography{%
\renewcommand*{\multinamedelim}{\addsemicolon\addspace}%
}
\DefineBibliographyExtras{english}{%
\protected\def\mkbibdatelong#1#2#3{%
\iffieldundef{#3}
{}
{\stripzeros{\thefield{#3}}%
\iffieldundef{#2}{}{\nobreakspace}}%
\iffieldundef{#2}
{}
{\mkbibmonth{\thefield{#2}}%
\iffieldundef{#1}{}{\space}}%
\iffieldbibstring{#1}
{\bibstring{\thefield{#1}}}
{\stripzeros{\thefield{#1}}}%
}%
}
\addbibresource{example.bib}
\begin{document}
Some text.\footnote{\cite{Liu2008}, \cite{Liu2011}.}
\printbibliography
\end{document}
참고문헌의 출력은 다음과 같습니다.
각주의 출력은 다음과 같습니다.