谢谢埃格尔,我有可能将作者姓名写入\authblk
文件以供后续使用。
\documentclass[twocolumn, oneside]{article}
\usepackage[utf8]{inputenc}
\usepackage[english, ukrainian]{babel}
\usepackage{authblk}
\pagestyle{empty}
\setcounter{Maxaffil}{0}
\renewcommand\Authsep{, }
\renewcommand\Authand{, }
\renewcommand\Authands{, }
\renewcommand\Authfont{\small}
\renewcommand\Affilfont{\itshape\small}
%-------------------------------------------------------------------
\makeatletter
\newwrite\titleauthorfile
\newcommand\writedatatofile[1]{%
\immediate\openout\titleauthorfile=#1.dat
\immediate\write\titleauthorfile{%
\string\thispapertitle{\unexpanded\expandafter{\@title}}}%
\processauthors
\immediate\write\titleauthorfile{\string\finishauthors}
\immediate\closeout\titleauthorfile
}
\newcommand\processauthors{%
\expandafter\process@authors\AB@authors\AB@setsep\protect\@nil
}
\def\process@authors#1\AB@setsep#2\protect#3\@nil{%
\ifx\relax#2\relax
\expandafter\@gobble
\else
\immediate\write\titleauthorfile{%
\string\thispaperauthor{\unexpanded{#2}}%
}
\expandafter\@firstofone
\fi
{\process@authors#3\@nil}%
}
\makeatother
\selectlanguage{ukrainian} % Замість слова ukrainian введіть мову ваших тез
%----------------------------------------------------------
\title{Назва тез} % Замість слів Назва тез введіть назву ваших тез
%-------------------------------------------------------------------
\author[1]{А.В. Торперший} % Тут замість "Перший автор" ведіть ініціали та прідвище першого автора у вигляді А.В. Тор
\author[2]{А.В. Тордругий} % Тут замість "Перший автор" ведіть ініціали та прідвище першого автора у вигляді А.В. Тор
\author[1,2]{А.В. Тортретій}% Якщо автор працює в кількох установах, то треба вводити номери установ через кому, наприклад
%---Тут треба набирати назви установ, в яких працюють автори.
\affil[1]{Установа, в якій працює, або навчається перший автор} % Тут введіть в якій працює, або навчається перший автор
\affil[2]{Установа, в якій працює, або навчається другий автор} % Тут введіть в якій працює, або навчається другий автор
\writedatatofile{\jobname}
\begin{document}
\maketitle
\section*{Вступ}
Текст
\end{document}
输出.dat
为:
\thispapertitle{Назва тез}
\thispaperauthor{\IeC {\CYRA }.\IeC {\CYRV }. \IeC {\CYRT }\IeC {\cyro }\IeC {\cyrr }\IeC {\cyrp }\IeC {\cyre }\IeC {\cyrr }\IeC {\cyrsh }\IeC {\cyri }\IeC {\cyrishrt }, \IeC {\CYRA }.\IeC {\CYRV }. \IeC {\CYRT }\IeC {\cyro }\IeC {\cyrr }\IeC {\cyrd }\IeC {\cyrr }\IeC {\cyru }\IeC {\cyrg }\IeC {\cyri }\IeC {\cyrishrt }}
\finishauthors
可以看到,该\thispapertitle
记录具有正常的视图,但\thispaperauthor
包含不需要的\CYR
命令。问题是,为什么会发生这种情况?如何获取正常的文本?
答案1
如果您想继续使用,authblk
您必须诉诸修补其\author
宏,因为该策略的\AB@authors
结果是将作者的名字扩展为\cyr...
宏。
\documentclass[twocolumn, oneside]{article}
\usepackage[utf8]{inputenc}
\usepackage[english, ukrainian]{babel}
\usepackage{authblk}
\usepackage{xpatch}
\pagestyle{empty}
\setcounter{Maxaffil}{0}
\renewcommand\Authsep{, }
\renewcommand\Authand{, }
\renewcommand\Authands{, }
\renewcommand\Authfont{\small}
\renewcommand\Affilfont{\itshape\small}
%-------------------------------------------------------------------
\makeatletter
\xpretocmd{\author}{\save@author{#2}}{}{}
\newcommand\save@author[1]{%
\gappto\saved@authors{#1}%
\global\let\save@author\save@otherauthors
}
\newcommand{\save@otherauthors}[1]{\gappto\saved@authors{, #1}}
\newwrite\titleauthorfile
\newcommand\writedatatofile[1]{%
\immediate\openout\titleauthorfile=#1.dat
\immediate\write\titleauthorfile{%
\string\thispapertitle{\unexpanded\expandafter{\@title}}}%
\immediate\write\titleauthorfile{%
\string\thispaperauthors{%
\unexpanded\expandafter{\saved@authors}%
}%
}
\immediate\closeout\titleauthorfile
}
\newcommand\processauthors{%
\expandafter\process@authors\AB@authors\AB@setsep\protect\@nil
}
\def\process@authors#1\AB@setsep#2\protect#3\@nil{%
\ifx\relax#2\relax
\expandafter\@gobble
\else
\immediate\write\titleauthorfile{%
\string\thispaperauthor{\unexpanded{#2}}%
}
\expandafter\@firstofone
\fi
{\process@authors#3\@nil}%
}
\makeatother
\selectlanguage{ukrainian} % Замість слова ukrainian введіть мову ваших тез
%----------------------------------------------------------
\title{Назва тез} % Замість слів Назва тез введіть назву ваших тез
%-------------------------------------------------------------------
\author[1]{А.В. Торперший} % Тут замість "Перший автор" ведіть ініціали та прідвище першого автора у вигляді А.В. Тор
\author[2]{А.В. Тордругий} % Тут замість "Перший автор" ведіть ініціали та прідвище першого автора у вигляді А.В. Тор
\author[1,2]{А.В. Тортретій}% Якщо автор працює в кількох установах, то треба вводити номери установ через кому, наприклад
%---Тут треба набирати назви установ, в яких працюють автори.
\affil[1]{Установа, в якій працює, або навчається перший автор} % Тут введіть в якій працює, або навчається перший автор
\affil[2]{Установа, в якій працює, або навчається другий автор} % Тут введіть в якій працює, або навчається другий автор
\writedatatofile{\jobname}
\begin{document}
\maketitle
\section*{Вступ}
Текст
\end{document}
第一个\author
命令将名称添加到\saved@authors
,然后重新定义为添加到的\save@author
宏。, <author name>
\saved@authors
.dat
运行此文件后的内容是
\thispapertitle{Назва тез}
\thispaperauthors{А.В. Торперший, А.В. Тордругий, А.В. Тортретій}
答案2
该问题的解决方案如下:
作者姓名之间的分隔符(使用 LaTeX 内核编程)
和
如何将完全展开的宏写入文件(使用 LaTeX 内核)
不幸的是,我不得不放弃使用这个authblk
包。
完整示例:
\documentclass[]{article}
\usepackage[T2A,T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english,russian,ukrainian]{babel}
\usepackage{etoolbox}
\def\pacsprint{}
\def\keywordprint{}
\def\pacs#1{\def\pacsprint{\pacsname:\quad#1}}
\def\keywords#1{\def\keywordprint{{\itshape\keyname}:\quad#1}}
\makeatletter
\patchcmd{\@maketitle}{\@title}{\bfseries\sffamily\MakeUppercase{\@title}}{}{}
\patchcmd{\@maketitle}{\newpage}{\newpage\pacsprint\nopagebreak}{}{}
\patchcmd{\@maketitle}{\large \@date}{\@affiliation}{}{}
\let\@authortofile\@empty
\def\@separator{\def\@separator{, }}% Delay comma once
\def\addauthor#1#2{%
\g@addto@macro\@author{\@separator#1\textsuperscript{#2}}
\g@addto@macro\@authortofile{\@separator#1}
}
\let\@affiliation\@empty
\def\affiliation#1#2{%
\g@addto@macro\@affiliation{\par\textsuperscript{#2}{\itshape#1}\smallskip}
}
%---definition of newwrite as \writedatatofile---------
\newwrite\titleauthorfile
\newcommand\writedatatofile[1]{%
\immediate\openout\titleauthorfile=#1.dat
\immediate\write\titleauthorfile{%
\string\thispapertitle{\unexpanded\expandafter{\@title}}}%
{%
\def\@separator##1\@separator##2{%
\unexpanded{##1}%
\ifx!##2%
\else
, \expandafter\@separator\expandafter##2%
\fi
}%
\immediate\write\titleauthorfile{%
\string\thispaperauthor{\@authortofile\@separator!}}%
}%
\immediate\write\titleauthorfile{\string\finishauthors}%%%
\immediate\closeout\titleauthorfile
}
\makeatother
\title{Title}
\addauthor{A. U. First}{1}
\addauthor{А. U. Другий}{2}
\addauthor{А. В. Третій}{1}
\addauthor{А. В. Четвертий}{1,2}%
%---Тут треба набирати назви установ, в яких працюють автори.
\affiliation{University/Department First}{1}
\affiliation{University/Department Second}{2}
\begin{document}
\writedatatofile{\jobname}
\maketitle
\end{document}
.dat
- 文件现在包含:
\thispapertitle{Title}
\thispaperauthor{A. U. First, А. U. Другий, А. В. Третій, А. В. Четвертий}
\finishauthors