Let's start from example preamble:
\documentclass[twoside]{article} \usepackage{fancyhdr} \pagestyle{fancy} \renewcommand{\headrulewidth}{0.4pt} \renewcommand{\footrulewidth}{0.4pt} \makeatletter %% headlines (\@shorttitle/\@shortauthorlist see below): \fancyhead[RO]{\@shorttitle} \fancyhead[LE]{\@shortauthorlist} ... \makeatother % Title (in Polish) and alternate title (in english): \title{Hemofiltracja i~rewaskularyzacja u~pacjenta z~zespołem sercowo-nerkowym typu 2} \alttitle{Hemofiltration in patient with cardio-renal syndrome type 2} % Authors list: \author{WLUJ}{Janina Kowalska } \author{CIL}{Zofia Dyrman} \author{KCW}{Andrzej Jarzyna} \author{CIL}{Wacław Jarząbek} \author{CIL}{Krzysztof Chrostowicz} % Undefined affiliation raises an error: % \author{DoPX}{Zdzisław Dyrman} % Affliations list: \affiliation{WLUJ}{Wydział Lekarski Uniwersytetu Jagiellońskiego -- Collegium Medicum, ul.~św.~Anny 12, 31--008 Kraków} \affiliation{CIL}{Centrum Interwencyjnego Leczenia Chorób Serca i~Naczyń, KSzS im.~Jana Pawła II, ul. Prądnicka 80, 31--202 Kraków} \affiliation{KCW}{Klinika Choroby Wieńcowej UJ, Collegium Medicum, KSzS im. Jana Pawła II, ul. Prądnicka 80, 31--202 Kraków} % Extra affiliation raises an error: % \affiliation{DRS}{Druskienniki, Pendological Department} % Short versions of title/authors list (defined if title/authors list % is too long to fit the headlines: % \shortauthor{Tratata} % \shorttitle{Fififif} % \begin{document} \maketitle \end{document}
The main problem is long lists of authors and affiliations.
There are more authors than affiliations so affiliations are labelled
with consecutive numbers and each author is marked with appropriate label indicating
his/her affiliation. It can be done manually of course but with the help
of a few clever macros the numbers can be computed by LaTeX. This feature can
be particularly helpful when for instance just before the (printing house) deadline a very important author
(probably professor) insists his
affiliation should be 1 not 4 (for example). All is needed to achieve this is to reorder
\affiliation
declarations.
The resulting document looks like shown in the picture.
The macros used:
%++Authors and affiliations \newcount \authornumber \newcount \affiliationnumber \authornumber=0 \affiliationnumber = 0 % \def\alttitle#1{\gdef\@alttitle{#1}}% \def\shortalttitle#1{\gdef\@shortalttitle{#1}} \def\author#1#2{% \global\advance\authornumber\@ne \authorAffiliationId{#1}% -- label -- \authorName{#2}% -- author's name -- } % \def\authorAffiliationId#1{% \expandafter\def\csname theauthorid\number% \authornumber\endcsname {#1}% --author's id-- %% label defined to check if affiliation exists:-- \expandafter\def\csname theaffid:#1\endcsname {#1}% } % \def\authorName#1{% \expandafter\def\csname theauthor\number% \authornumber\endcsname{\ignorespaces#1\unskip}% \expandafter\let\csname theauthoraffiliation\number% \authornumber\endcsname\relax } % \def\affiliation#1#2{% \global\advance\affiliationnumber\@ne \expandafter\def\csname theaffiliation \number% \affiliationnumber \endcsname {\ignorespaces#2\unskip}% \expandafter\edef\csname affid:#1\endcsname {\number\affiliationnumber}% %% if defined in class CLS add error mesage: %%\@ifundefined{theaffid:#1}{\ClassError{CLS}{**Affiliation undefined: `#1'}\@ehc}{}% } % \def\@author{\@defaultauthorlist} \def\@affiliation{\@defaultaffiliationlist} % \newcount\count@@ % % Authors/affiliations lists \def\@defaultauthorlist{% \count@=\authornumber \count@@=0 \begingroup \loop \ifnum\count@>0 \advance\count@@ by 1 \ignorespaces\csname theauthor\number%% \count@@\endcsname %-- autor's name -- \edef\@TmP@Aff@Etykieta{\csname theauthorid\number\count@@ \endcsname}% % --check if \@TmP@Aff@Etykieta exists: -- \@ifundefined{affid:\@TmP@Aff@Etykieta}% %% if defined in class CLS add error mesage: %%{\ClassError{CLS}{**Brak afiliacji dla \csname theauthor\number% %%\count@@\endcsname}\@ehc}% %% print out affiliation label (number): {$^{\csname affid:\@TmP@Aff@Etykieta\endcsname}$}% %--Every author but last is separated by a comma--: \ifnum\count@=1\relax\else,\space\fi \advance\count@ by -1 \repeat \endgroup } % Short list of authors (w/o affiliations labels) for headlines. % Simplified version of @defaultauthorlist: \def\@defaultshortauthorlist{% \count@=\authornumber \count@@=0 \begingroup \loop \ifnum\count@>0 \advance\count@@ by 1 \ignorespaces\csname theauthor\number\count@@\endcsname \ifnum\count@=1\relax\else,\space\fi \advance\count@ by -1 \repeat \endgroup } % % Affilitions list: \def\@defaultaffiliationlist{% \count@=\affiliationnumber \count@@=0 \begingroup \loop \ifnum\count@>0 \advance\count@@ by 1 $^{\the\count@@}$ %-- affiliation number %-- print out the affiliation: \ignorespaces\csname theaffiliation \number\count@@\endcsname % ++Every affiliation but last is separated by a comma ++ : \ifnum\count@=1\relax\else,\space\fi % każda afiliacja od nowego wiersza: \par \advance\count@ by -1 \repeat \endgroup } % ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ % ++SIMPLIFIED titlepage (just to demonstrate macros defined):++ \renewcommand\maketitle{% \begin{titlepage}% \let\footnotesize\small \let\footnoterule\relax \let \footnote \thanks % ++Title: ++ \parindent0pt \rightskip0pt plus 4em \pretolerance10001 \leavevmode \noindent {\Large \sffamily \bfseries \@title\par % ++ Optional alternative title: \@ifundefined{@alttitle}{}{\vskip9pt% \large \sffamily \bfseries \@alttitle \par} } \vspace{5mm} % ++Authors list: {\rightskip 0pt plus6em% \@author\par} % \vspace{30pt} % ++Affiliations list {\rightskip 0pt plus6em \@affiliation\par} % % ++Define content for running headers/footers: \@ifundefined{@shortauthorlist}{\gdef\@shortauthorlist{\@defaultshortauthorlist}}{}% \@ifundefined{@shorttitle}{\gdef\@shorttitle{\@title}}{}% \@ifundefined{@shortalttitle}{\gdef\@shortalttitle{\@alttitle}}{}% % \thispagestyle{empty} \end{titlepage}% % \setcounter{footnote}{0}% \global\let\thanks\relax \global\let\maketitle\relax \global\let\@thanks\@empty \global\let\title\relax \global\let\author\relax \global\let\date\relax \global\let\and\relax }%%//maketitle// \def\shorttitle#1{\gdef\@shorttitle{#1}} \def\shortauthorlist#1{\gdef\@shortauthorlist{#1}} \let\shortauthor\shortauthorlist
Author-year citation style is assumed.
If a bibliography is prepared manually it is as easy as to precede
each entry with say \bibAst
command. Example:
\newcommand\bibAst{\leavevmode\hbox to0pt{\hss$^\ast$}} \harvarditem[Bagozzi and Dholakia]{Bagozzi and Dholakia}{2006}{bagozzidholakia06} \bibAst\textsc{Bagozzi, R.~P., {\small and} U.~M. Dholakia} (2006): ``Open Source Software User Communities: A Study Of Participation In {L}inux {U}ser {G}roups,'' \emph{Management Science}, 52(7), 1099--1115.
If one insists on using BiBTeX one has to mark records which are to
be highlighted. It can be done
with an extra field (named highlight
in the example below):
@Article{bagozzidholakia06, title = "Open Source Software User Communities: A Study Of Participation In {L}inux {U}ser {G}roups", author = "Bagozzi, Richard P. and Dholakia, Utpal M.", journal = j-msci, pages = "1099--1115", number = "7", volume = "52", year = "2006", highlight = "Y" }
Fields unknown to BiBTeX's particular style are omitted, so highlight
cause no harm when processed with standard BiBTeX style.
One need to modify BiBTeX style now. This is a two-step procedure.
First one has to add highlight
to the body of ENTRY function:
ENTRY { ... highlight }
Next one has to modify format.authors
function. Exact
form of a format.authors
function is style-dependent.
In case of apalike
the code looks like:
%FUNCTION {format.authors} %{ author empty$ % { "" } % { author format.names } % if$ %} % change to: FUNCTION {format.authors} { author empty$ { "" } { highlight empty$ { author format.names } { "{\bibAst}" author format.names * } if$ } if$ }
BTW: the meaning of some BiBTeX expressions are as follows: S1 S2 * denotes S1 S2 strings concatenation; L F1 F2 if$ denotes logical if (execute F1 if L is true otherwise execute F2).
The contents of highlight
is irrelevant. Sole existence of
highlight
denotes that the record is highlighted.
NOTE: the style should be more elaborate if some BiBTeX entries starts with something other than authors names.
Kol. WP dba żebym nie wyszedł z wprawy w temacie znajomości LaTeXa.
Jakiś czas temu zażyczył sobie znaków cięcia (zwanych także paserami). Znaki cięcia mają określać wielkość kartki papieru jako 290x205mm (prawie A4). Mają być umieszczone na stronie o nietypowych wymiarach 330x250mm.
Używając pakietu crop
można powyższe zalecenie
zrealizować następująco:
\documentclass{article} %% Inne pakiety dołączyć tutaj ... \setlength\paperheight {290mm}\setlength\paperwidth{205mm} \usepackage[cam,center,width=250truemm,height=330truemm,pdftex]{crop} %% %% Kolumna ma być wyśrodkowana na kartce (zalecenie drukarni) %% Margines wynosi ( \paperwidth -\textwidth )/2 \oddsidemargin 18.5truemm %% dla \textwidth = 168mm \evensidemargin\oddsidemargin \begin{document} ... \end{document}
No i działa. Dokument jest składany XeTeXem; używa w związku z tym pakietów
polyglossia
, fontspec
, xunicode
oraz xltxtra
.
Powyższe pakiety korzystają z kolei ze stada pakietów z l3kernel/l3packages bundles
(fragment przyszłej, ciągle tworzonej od 20 bodajże lat, trzeciej wersji LaTeXa -- LaTeX3 project).
Po jakimś czasie okazało się, że nie działa w MikTeX 2.09. Pierwsza (tytułowa) strona jest podniesiona (względem znaków cięcia) o ok 4mm w porównaniu do wszystkich następnych.
Po dłuższym badaniu stwierdzono, że winna jest dwuwierszowa pagina górna znajdująca się na stronie tytułowej. Wydawała się niegroźna i co więcej, dokument był poprawnie kompilowany, ale tylko w dystrybucji TL 2011. Coś zmieniono w zestawie pakietów l3* (których jest dużo jak wiemy) i to te pakiety odpowiadają za błąd.
Żeby obejść problem postanowiłem składać dwuwierszową paginę w pudełko pionowe (\vbox
)
o wysokości równej wysokości wiersza tekstu:
\setbox0\hbox{\PM@HeaderFont\strut} %% \newdimen\PM@HeaderHt \PM@HeaderHt=\ht0 \def\PM@vboxToOneLine#1{\vbox to\PM@HeaderHt{#1\vss}} %% ^^^^^^^ pudełko o wysokości wiersza tekstu ^^ %% %% ... \fancypagestyle{plain}{%% zawartość paginy na stronie tytułowej: \fancyhf{} % %% ... \fancyhead[L]{\leavevmode \hbox{\PM@vboxToOneLine{\PM@HeaderFont pierwszy-wiersz ... \\ ... drugi wiersz ...}}} % \fancyhead[R]{\leavevmode \hbox{\PM@vboxToOneLine{\PM@HeaderFont pierwszy-wiersz ... \\ ... drugi wiersz ...}}} %% ... }
Teraz działa lepiej.
Nawiasem mówiąc dwuwierszowe paginy to kiepski pomysł. W szczególności
fancyhdr
wyrównuje górne wiersze pagin, co oznacza,
że np. kreska pod paginą będzie nie wyrównana jeżeli (przykładowo) lewa pagina jest dwuwierszowa a prawa jednowierszowa.
W omawianym przypadku nie ma kreski pod paginą, dwuwierszowa
pagina jest zdefiniowana wyłącznie na stronie tytułowej (której układ jest znakomicie różny od pozostałych stron)
a i tak skończyło się problemem.