2

Thanks to egreg, I have a possibility to write authors names from \authblk to file for the follow usage.

\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}

Output .dat is:

\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

As one can see, the \thispapertitle record has a normal view, but \thispaperauthor contain an unwanted \CYR command. The question is, why its happens? How to get a normal text?

  • @egreg How can get a normal record? Thanx. – sergiokapone Jan 20 '15 at 20:25
  • latex's inputenc support is designed to transform all characters into ascii TeX input, not just cyrillic but accented latin gets turned into \'{e} etc. This allows for example different chapters to be in differemt encodings but the toc file is a consistent (ascii) encoding to be read back into latex at the beginning of the document. – David Carlisle Jan 20 '15 at 20:29
  • It's the “fault” of authblk that passes \AB@author through several \xdef passes. There's little you can do. – egreg Jan 20 '15 at 20:45
  • @egreg I use this .dat following with lualatex, but it does not understand \cyr command. May be, it is possible to solve the problem on lualatex side? – sergiokapone Jan 20 '15 at 20:57
  • @sergiokapone Not without extensive work, I'm afraid. – egreg Jan 20 '15 at 21:14
1

If you want to keep using authblk you have to resort to patching its \author macro, because the strategy with \AB@authors has the consequence of expanding the authors' names to the \cyr... macros.

\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}

The first \author command adds the name to \saved@authors and then redefines \save@author to be a macro that adds , <author name> to \saved@authors.

The contents of the .dat file after running this is

\thispapertitle{Назва тез}
\thispaperauthors{А.В. Торперший, А.В. Тордругий, А.В. Тортретій}
0

Solution of this problem is in the following topics: Separator between author names (with LaTeX kernel programming) and How to write totally expanded macro to file (with LaTeX kernel) Unfortunately, I had to abandon the use of authblk package.

Full example:

\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- file now contain:

\thispapertitle{Title}
\thispaperauthor{A. U. First, А. U. Другий, А. В. Третій, А. В. Четвертий}
\finishauthors

enter image description here

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.