From c0d30cb2ee79016673b2d4621587146f65a5cb63 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sun, 28 Apr 2024 20:06:19 +0000 Subject: huaz (28apr24) git-svn-id: svn://tug.org/texlive/trunk@71112 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/latex/huaz/README | 2 +- Master/texmf-dist/doc/latex/huaz/huaz.pdf | Bin 323827 -> 358059 bytes Master/texmf-dist/doc/latex/huaz/huaz.tex | 709 +++++++++++++++++++++++++----- Master/texmf-dist/tex/latex/huaz/huaz.sty | 345 +++++++++------ 4 files changed, 823 insertions(+), 233 deletions(-) (limited to 'Master/texmf-dist') diff --git a/Master/texmf-dist/doc/latex/huaz/README b/Master/texmf-dist/doc/latex/huaz/README index b37490a04a4..4e8306629f1 100644 --- a/Master/texmf-dist/doc/latex/huaz/README +++ b/Master/texmf-dist/doc/latex/huaz/README @@ -14,7 +14,7 @@ version 2005/12/01 or later. This work has the LPPL maintenance status `maintained'. -The Current Maintainer of this work is Tibor Tomacs. +The Current Maintainer of this work is Tibor Tómács. This work consists of the files diff --git a/Master/texmf-dist/doc/latex/huaz/huaz.pdf b/Master/texmf-dist/doc/latex/huaz/huaz.pdf index fe31b1cfad3..9a7ee91180a 100644 Binary files a/Master/texmf-dist/doc/latex/huaz/huaz.pdf and b/Master/texmf-dist/doc/latex/huaz/huaz.pdf differ diff --git a/Master/texmf-dist/doc/latex/huaz/huaz.tex b/Master/texmf-dist/doc/latex/huaz/huaz.tex index a9bb258ad64..4c539cbdd45 100644 --- a/Master/texmf-dist/doc/latex/huaz/huaz.tex +++ b/Master/texmf-dist/doc/latex/huaz/huaz.tex @@ -1,7 +1,7 @@ %% %% `huaz.tex' documentation of the huaz package %% -%% Copyright 2022 by Tibor Tomacs +%% Copyright 2022-2024 by Tibor Tómács %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3 @@ -13,24 +13,30 @@ %% %% This work has the LPPL maintenance status `maintained'. %% -%% The Current Maintainer of this work is Tibor Tomacs. +%% The Current Maintainer of this work is Tibor Tómács. %% \documentclass[12pt]{article} -\usepackage{listings,xcolor,lmodern,xurl} -\usepackage[pdfstartview=FitH,colorlinks,allcolors=teal,bookmarksnumbered]{hyperref} -\usepackage[a4paper,top=1in,bottom=1.2in]{geometry} +\usepackage[a4paper,top=1in,bottom=1in]{geometry} +\usepackage{listings,xcolor,lmodern,xurl,multicol} +\usepackage[ + pdfstartview=FitH, + colorlinks, + allcolors=teal, + bookmarksnumbered, + bookmarksopen, + ]{hyperref} \usepackage[T1]{fontenc} -\PassOptionsToPackage{defaults=hu-min}{magyar.ldf} +\PassOptionsToPackage{defaults=hu-min,labelitems=unchanged}{magyar.ldf} \usepackage[english,magyar]{babel} \setlength{\parindent}{0pt} \setlength{\parskip}{6pt} \lstset{literate={<}{{$\langle$}}1{>}{{$\rangle$}}1 - {ö}{{\"o}}1{ü}{{\"u}}1{ó}{{\'o}}1{é}{{\'e}}1{á}{{\'a}}1{í}{{\'i}}1} + {ö}{{\"o}}1{ő}{{\H o}}1{ü}{{\"u}}1{ó}{{\'o}}1{é}{{\'e}}1{á}{{\'a}}1{í}{{\'i}}1} \lstnewenvironment{examplelst}{\lstset{ aboveskip=\bigskipamount, -basicstyle=\footnotesize\color{blue!70!black}\ttfamily, +basicstyle=\color{blue!70!black}\ttfamily, backgroundcolor=\color{black!3}, rulecolor=\color{black!15}, frame=trbl, @@ -60,83 +66,121 @@ keepspaces]} \def\huaz{\textbf{\sffamily hu\color{gray}az}} +\def\labelenumi{\textbf{\theenumi.}} + \begin{document} -\title{The \huaz\ package\\ - {\large v1.2 (2024/04/20)}} +\title{The \huaz\ package\\{\large v2.0 (2024/04/28)}} \author{Tibor Tómács\\ - {\normalsize\href{email:tomacs.tibor@gmail.com}{\nolinkurl{tomacs.tibor@gmail.com}}}} + {\normalsize\href{email:tomacs.tibor@gmail.com}{\nolinkurl{tomacs.tibor@gmail.com}}}} \date{} \maketitle \begin{otherlanguage}{english} \begin{abstract} -In Hungarian there are two definite articles, \emph{``a''} and \emph{``az''}, which are determined by the pronunciation of the subsequent word. The definite article is \emph{``az''}, if the first phoneme of the pronounced word is a vowel, otherwise it is \emph{``a''}. -The \huaz\ package helps the user to insert automatically the correct definite article for cross-references and other commands containing text. Thus, if these change, the definite articles will also change accordingly. +In Hungarian there are two definite articles, \emph{``a''} and \emph{``az''}, which are determined by the pronunciation of the subsequent word. +The definite article is \emph{``az''}, if the first phoneme of the pronounced word is a vowel, otherwise it is \emph{``a''}. + +The \huaz\ package helps the user to insert automatically the correct definite article for cross-references and other commands containing text. +Thus, if these change, the definite articles will also change accordingly. -\medskip -\emph{The documentation is in Hungarian, because only Hungarian-speaking users are interested.} +{The documentation is in Hungarian, because only Hungarian-speaking users are interested.} \end{abstract} \end{otherlanguage} \section{Bevezetés} -A magyar nyelvben a határozott névelő egy szó előtt aszerint \emph{,,a''} vagy \emph{,,az''}, hogy a szó kiejtve mássalhangzóval vagy magánhangzóval kezdődik. Például \emph{,,a szék''} vagy \emph{,,az asztal''}. Ez egyszerűnek tűnik, de gondoljon a következő esetekre: +A magyar nyelvben a határozott névelő egy szó előtt aszerint \emph{,,a''} vagy \emph{,,az''}, hogy a szó kiejtve mássalhangzóval vagy magánhangzóval kezdődik. +Például \emph{,,a szék''} vagy \emph{,,az asztal''}. +Ez egyszerű szabály, de írásban összetett vizsgálatot igényel. +Itt felsorolunk néhány nehézséget: \begin{itemize} -\item Például ha oldalszámra akar hivatkozni, akkor a \verb|\pageref| parancsot szoktuk használni. Ha ez elé akar határozott névelőt rakni, akkor nem mindegy, hogy mi az oldalszám. Például \emph{,,az~1.~oldal''}, \emph{,,a~2.~oldal''}, \emph{,,az~5.~oldal''}, \emph{,,a~10.~oldal''}. Így egyáltalán nem biztos, hogy az ,,\verbinline|a \pageref{!!}|'' kód megfelelő eredményt ad. Hasonló a probléma minden kereszthivatkozás esetén (\verb|\ref|, \verb|\pageref|, \verb|\eqref|, \verb|\cite|). - -\item Az is fontos, hogy egy kifejezés római szám vagy sem. Például \emph{,,az~V.~fejezet''}, ha \emph{V} római szám, azaz 5 a jelentése. Ugyanakkor \emph{,,a~V.~fejezet''}, ha \emph{V} betűt jelöl vagy alfanumerikus szám esetén a 22 értéket (\emph{V} az angol ábécében a 22.~betű). - -\item Néhány mássalhangzó speciális tulajdonságú. Például \emph{,,az M betű''}, de \emph{,,a Magyar Közlöny''}; \emph{,,az Ny betű''}, de \emph{,,a Nyugdíjfolyósító Igazgatóság''}; stb. +\item +Ha oldalszámra akarunk hivatkozni, akkor a \verb|\pageref| parancsot szoktuk használni. +Ha ez elé kell határozott névelőt rakni, akkor nem mindegy, hogy mi az oldalszám. +Például \emph{,,az~1.~oldal''}, \emph{,,a~2.~oldal''}, \emph{,,az~5.~oldal''}, \emph{,,a~10.~oldal''}. +Így egyáltalán nem biztos, hogy az ,,\verbinline|a \pageref{!!}|'' kód megfelelő eredményt ad. +Hasonló a probléma minden kereszthivatkozás esetén (\verb|\ref|, \verb|\pageref|, \verb|\eqref|, \verb|\cite|). + +\item +Az is fontos, hogy egy kifejezés római szám vagy sem. +Például \emph{,,az~V.~fejezet''}, ha \emph{V} római szám, azaz 5 a jelentése. +Ugyanakkor \emph{,,a~V.~fejezet''}, ha \emph{V} betűt jelöl vagy alfanumerikus szám esetén a 22 értéket (\emph{V} az angol ábécében a 22.~betű). + +\item +Néhány mássalhangzó speciális tulajdonságú. +Például \emph{,,az M betű''}, de \emph{,,a Magyar Közlöny''}; \emph{,,az Ny betű''}, de \emph{,,a Nyugdíjfolyósító Igazgatóság''}; stb. \end{itemize} Először megemlítünk két eddigi megoldást a határozott névelők automatikus kezelésére, kiemelve azok hibáit és hiányosságait. \subsection{A magyar.ldf} -Egyik lehetőség a \texttt{babel} csomag \texttt{magyar} opcióját beállító \texttt{magyar.ldf} fájl használata. Ennek teljes dokumentációja elérhető innen: \url{https://math.bme.hu/latex/magyarldf-doc.pdf}. +Egyik lehetőség a \texttt{babel} csomag \texttt{magyar} opcióját beállító \texttt{magyar.ldf} fájl használata. +Ennek teljes dokumentációja elérhető innen: \url{https://math.bme.hu/latex/magyarldf-doc.pdf}. -Az ebben definiált \verb|\az|, \verb|\aref|, \verb|\apageref|, \verb|\acite|, stb. parancsok alapvetően jól használhatóak, de van néhány fontos hiba, melyek a \huaz\ csomag megírását motiválták: +Az ebben definiált \verb|\az|, \verb|\aref|, \verb|\apageref|, \verb|\acite|, stb.~parancsok alapvetően jól használhatóak, de van néhány fontos hiba, melyek a \huaz\ csomag megírását motiválták: \begin{itemize} -\item Az \verb|\eqref| parancsnak nincs névelős verziója. Helyette az \verbinline|\aref({!!})| használható, de ez dőlt betűs környezetben nem álló betűs eredményt ad, mint az \verb|\eqref| esetében. Másik lehetőség, ami ezt a problémát megoldja, az \verbinline|\az{\eqref{!!}}| parancs. Ugyanakkor egyik megoldás sem kezeli a római számozású vagy a \verb|\tag| paranccsal címkézett egyenleteket. - -\item Az \verbinline|\az{\ref{!!}}| és \verbinline|\az{\pageref{!!}}| nem kezeli a római számozású hivatkozásokat. - -\item Az előző hiba akkor is fennáll, amikor az \verb|\az| parancsban egy római számmal kezdődő szöveg van. Például \verb|\az{V.~osztály}| eredménye \emph{,,a V.~osztály''}. - -\item Amennyiben nem kereszthivatkozáshoz, hanem egy szöveghez, vagy valamilyen szöveget tároló parancshoz kell automatikus névelő, akkor az ékezetes betűket UTF-8 kódolás esetén rosszul detektálja. A hiba alapvető oka, hogy az UTF-8 kódolású karakterek nem egy, hanem több bájton vannak kódolva, amit a \texttt{magyar.ldf} nem vesz figyelembe. Ezért például \verb|\az{ágy}| eredménye \emph{,,a ágy''}, mert nem betűként érzékeli az \emph{,,á''} betűt, így azt sem tudja, hogy ez magánhangzó. Meglepő módon \verb|\az{száz}| eredménye \emph{,,az száz''} is rossz. Ennek az az oka, hogy mivel számára az \emph{,,á''} nem betű, ezért az \emph{,,sz''} betűt különállónak tekinti, ami elé valóban \emph{,,az''} kell. - -\item Hibának ugyan nem tekinthető, de mindenesetre kényelmetlen, hogy például \verb|\az{\textbf{N betű}}| esetén a \verb|\textbf| parancs megzavarja a szó betűinek detektálását, így a névelő helytelenül \emph{,,a''} lesz. +\item +Az \verb|\eqref| parancsnak nincs névelős verziója. +Helyette az \verbinline|\aref({!!})| használható, de ez dőlt betűs környezetben nem álló betűs eredményt ad, mint az \verb|\eqref| esetében. +Másik lehetőség, ami ezt a problémát megoldja, az \verbinline|\az{\eqref{!!}}| parancs. +Ugyanakkor egyik megoldás sem kezeli a római számozású vagy a \verb|\tag| paranccsal címkézett egyenleteket. + +\item +Az \verbinline|\az{\ref{!!}}| és \verbinline|\az{\pageref{!!}}| nem kezeli a római számozású hivatkozásokat. + +\item +Az előző hiba akkor is fennáll, amikor az \verb|\az| parancsban egy római számmal kezdődő szöveg van. +Például \verb|\az{V.~osztály}| eredménye \emph{,,a V.~osztály''}. + +\item +Amennyiben nem kereszthivatkozáshoz, hanem egy szöveghez, vagy valamilyen szöveget tároló parancshoz kell automatikus névelő, akkor az ékezetes betűket UTF-8 kódolás esetén rosszul detektálja. +A hiba alapvető oka, hogy az UTF-8 kódolású karakterek nem egy, hanem több bájton vannak kódolva, amit a \texttt{magyar.ldf} nem vesz figyelembe. +Ezért például \verb|\az{ágy}| eredménye \emph{,,a ágy''}, mert nem betűként érzékeli az \emph{,,á''} betűt, így azt sem tudja, hogy ez magánhangzó. +Meglepő módon \verb|\az{száz}| eredménye \emph{,,az száz''} is rossz. +Ennek az az oka, hogy mivel számára az \emph{,,á''} nem betű, ezért az \emph{,,sz''} betűt különállónak tekinti, ami elé valóban \emph{,,az''} kell. + +\item +Például \verb|\az{\textbf{N betű}}| esetén a \verb|\textbf| parancs megzavarja a szó betűinek detektálását, így a névelő helytelenül \emph{,,a''} lesz. \end{itemize} \subsection{A nevelok csomag} -2015-ben készült a \texttt{nevelok} csomag, ami szintén az automatikus határozott névelők kezelésére készült. A szerzője valószínűleg nem ismerte a \texttt{magyar.ldf} már akkor létező lehetőségeit, ezért készíthette ezt a jóval kevesebbet tudó csomagot. - -2022-ben telepített \TeX-rendszeren tesztelve azt tapasztaltam, hogy nem kezeli az ékezetes betűk semmilyen formáját és sok esetben ad kereszthivatkozásoknál is rossz névelőt. Az utóbbinak az az oka, hogy közvetlenül a \verb|\ref| parancsot vizsgálja, ami nem kifejthető parancs. - -Ezen dokumentáció elkészültéig semmilyen fejlesztése nem történt. Jelen állapotában nem javasolt ennek a csomagnak a használata. +A \texttt{nevelok} csomag szintén az automatikus határozott névelők kezelésére készült. +Nem kezeli az ékezetes betűk semmilyen formáját és sok esetben ad kereszthivatkozásoknál rossz névelőt. +Az utóbbinak az az oka, hogy közvetlenül a \verb|\ref| és \verb|\pageref| parancsokat vizsgálja, amelyek nem kifejthetőek. +Jelenlegi állapotában nem ajánlott használni ezt a csomagot. \subsection{A \texorpdfstring{\huaz}{huaz} csomag célja és működése} -A \huaz\ csomag célja segíteni a felhasználót abban, hogy a kereszthivatkozásokhoz és szöveget tartalmazó parancsokhoz automatikusan beszúrja a megfelelő határozott névelőt. Így ha ezek változnak, akkor a határozott névelők is megfelelően változnak. +A \huaz\ csomag célja segíteni a felhasználót abban, hogy a kereszthivatkozásokhoz és szöveget tartalmazó parancsokhoz automatikusan beszúrja a megfelelő határozott névelőt. +Így ha ezek változnak, akkor a határozott névelők is megfelelően változnak. A másik cél ezt úgy megtenni, hogy a \texttt{magyar.ldf} és a \texttt{nevelok.sty} hibáit és hiányosságait korrigálja illetve pótolja. A \huaz\ csomag a következő esetekben illeszt az adott szöveg elé ,,az'' névelőt: \begin{enumerate} -\item Az első betű magánhangzó (legyen az kis- vagy nagybetű, ékezetes vagy sem, magyar vagy sem, UTF-8, ISO-8859-2 karakterrel vagy repülő ékezettel megadva). +\item +Az első betű magánhangzó (legyen az kis- vagy nagybetű, ékezetes vagy sem, magyar vagy sem, UTF-8, ISO-8859-2 karakterrel vagy repülő ékezettel megadva). -\item Az első betű olyan kis vagy nagy mássalhangzó, amit önmagában kiejtve magánhangzóval kezdünk (például F, L, M, stb.) míg a második karakter (ha van) nem betű, hanem szám, írásjel vagy szóköz. Például ,,M-10''. Ide soroltunk néhány nem magyar ékezetes mássalhangzót is. Például ,,Ň.1''. +\item +Az első betű olyan kis vagy nagy mássalhangzó, amit önmagában kiejtve magánhangzóval kezdünk (például F, L, M, stb.) míg a második karakter (ha van) nem betű, hanem szám, írásjel vagy szóköz. +Például ,,M-10''. +Ide soroltunk néhány nem magyar ékezetes mássalhangzót is. Például ,,Ň.1''. -\item Az első két karakter egy olyan kis vagy nagy kétjegyű mássalhangzó, amit önmagában kiejtve magánhangzóval kezdünk (például Ny, Ly, Sz, stb.) míg a harmadik karakter (ha van) nem betű, hanem szám, írásjel vagy szóköz. Például ,,NY betű''. +\item +Az első két karakter egy olyan kis vagy nagy kétjegyű mássalhangzó, amit önmagában kiejtve magánhangzóval kezdünk (például Ny, Ly, Sz, stb.) míg a harmadik karakter (ha van) nem betű, hanem szám, írásjel vagy szóköz. +Például ,,NY betű''. -\item Az első karakter 5. +\item +Az első karakter 5. -\item 1, 4, 7 vagy 10 jegyű számmal kezdődik és az első számjegy 1 (egy, ezer, egymillió, egymilliárd). +\item +1, 4, 7 vagy 10 jegyű számmal kezdődik és az első számjegy 1 (egy, ezer, egymillió, egymilliárd). \end{enumerate} Ha a szó elején található karakterek római számként is értelmezhetőek, akkor megválasztható, hogy azt konvertálja arab számra és a névelőt ahhoz határozza meg vagy sem. Például ,,XII/A'' esetén. @@ -147,21 +191,26 @@ A \huaz\ csomagot a szokott módon kell betölteni: \commandinline|\usepackage{huaz}| -Csomagopciók nincsenek. UTF-8 (\texttt{utf8}) és ISO-8859-2 (\texttt{latin2}) kódolású forrásfájl esetén működik, de a repülő ékezeteket is jól kezeli. Kompatibilis a \texttt{pdflatex}, \texttt{xelatex} és \texttt{lualatex} fordítókkal is. Például \texttt{pdflatex} fordítóval a következő betöltés megfelelő: +Csomagopciók nincsenek. +UTF-8 (\texttt{utf8}) és ISO-8859-2 (\texttt{latin2}) kódolású forrásfájl esetén működik, de a repülő ékezeteket is jól kezeli. +Kompatibilis a \texttt{pdflatex}, \texttt{xelatex} és \texttt{lualatex} fordítókkal is. +Például \texttt{pdflatex} fordítóval a következő betöltés megfelelő: \begin{examplelst} \documentclass{article} \usepackage[T1]{fontenc} -\usepackage{huaz} \PassOptionsToPackage{defaults=hu-min}{magyar.ldf} \usepackage[magyar]{babel} +\usepackage{huaz} \begin{document} ... \end{document} \end{examplelst} A \texttt{hyperref} csomaggal is kompatibilis, így az is betölthető a \huaz\ mellé. -A \texttt{magyar.ldf} \texttt{defaults=hu-min} opciója bekapcsol néhány olyan opciót is, amely elérhetővé teszi a saját automatikus névelőparancsait. Ezt ugyan nem kötelező, de hasznos a \huaz\ csomag használata esetén kikapcsolni. Ehhez a +A \texttt{magyar.ldf} \texttt{defaults=hu-min} opciója bekapcsol néhány olyan opciót is, amely elérhetővé teszi a saját automatikus névelőparancsait. +Ezeket nem kötelező, de hasznos a \huaz\ csomag használata esetén kikapcsolni. +Ehhez a \begin{examplelst} \PassOptionsToPackage{defaults=hu-min}{magyar.ldf} \end{examplelst} @@ -171,74 +220,114 @@ sor helyett használja a következőt: shortrefcmds=no,hunnewlabel=no}{magyar.ldf} \end{examplelst} -A \texttt{xelatex} és \texttt{lualatex} fordítók esetén \texttt{babel} helyett a +A \texttt{xelatex} és \texttt{lualatex} fordítók esetén \texttt{babel} helyett a \begin{examplelst} \usepackage{polyglossia} \setdefaultlanguage{hungarian} \end{examplelst} is használható. -A \huaz\ csomag felhasználja az \texttt{xstring}, \texttt{refcount} és \texttt{iftex} csomagok szolgáltatásait, így ezek is betöltődnek. Másrészt felhasználásra kerül néhány 2021. október 10-én bevezetett változás a \LaTeX\ kerneljében, így csak az ezután telepített rendszereken működik megfelelően a csomag. +A \huaz\ csomag felhasználja az \texttt{xstring}, \texttt{refcount} és \texttt{iftex} csomagok szolgáltatásait, így ezek is betöltődnek. +Másrészt felhasználásra kerül néhány 2021. október 10-én bevezetett változás a \LaTeX\ kerneljében, így csak az ezután telepített rendszereken működik megfelelően a csomag. \subsection{Parancsok} \commandinline|\az{!!}| -A \verbinline|!!| elé a megfelelő határozott névelő kerül kisbetűs alakban. Ha a \verbinline|!!| elején római számként értelmezhető karakterek vannak, akkor a névelő az arab megfelelőjéhez igazodik. Például +A \verbinline|!!| elé a megfelelő határozott névelő kerül kisbetűs alakban. +Ha a \verbinline|!!| római számként is értelmezhető (pl.~,,XII''), esetleg azt írásjel vagy szóköz követi (pl.~,,XII.A''), akkor a névelő az arab megfelelőjéhez igazodik. +Például \begin{examplelst} Idén \az{V.B}~osztály rendezi a farsangot. \end{examplelst} eredménye ,,Idén az V.B~osztály rendezi a farsangot.''. +De +\begin{examplelst} +\az{VB} \az{V6} +\end{examplelst} +eredménye ,,a VB a V6'' lesz, mert a ,,V'' után betű illetve szám következik, ezért nem 5-nek értelmezi, hanem V betűnek. -A \verbinline|!!| lehet szöveget tároló parancs is. Például +A \verbinline|!!| lehet szöveget tároló parancs is. +Például \begin{examplelst} \newcommand{\osztaly}{V.B} Idén \az{\osztaly}~osztály rendezi a farsangot. \end{examplelst} eredménye ,,Idén az V.B~osztály rendezi a farsangot.''. -A \verbinline|!!| tartalmazhat szövegformázó parancsokat is (bővebben lásd \az{\ref{subsec-kapocs}}.~alszakaszban). Például +A \verbinline|!!| tartalmazhat szövegformázó parancsokat is (bővebben lásd \az{\ref{subsec-ignoralt-parancsok}}.~alszakaszban). +Például \begin{examplelst} \newcommand{\osztaly}{V.B} Idén \az{\textbf{\osztaly}}~osztály rendezi a farsangot. \end{examplelst} eredménye ,,Idén az \textbf{V.B}~osztály rendezi a farsangot.''. -A \verbinline|!!| lehet standard kereszthivatkozás is (\verb|\ref|, \verb|\pageref|, \verb|\eqref|, \verb|\cite|). Például +A \verbinline|!!| lehet standard kereszthivatkozás is (\verb|\ref|, \verb|\ref*|, \verb|\pageref|, \verb|\pageref*|, \verb|\eqref|, \verb|\refeq|, \verb|\cite|). +Például \begin{examplelst} \section{Cím}\label{seca} \section{Cím}\label{secb} -\az{\ref{seca}}.~szakaszban, \az{\textbf{\ref{secb}}}.~szakaszban +\az{\ref{seca}}.~szakaszban, +\az{\textbf{\ref{secb}}}.~szakaszban \end{examplelst} -eredménye ,,az 1. szakaszban, a \textbf{2}. szakaszban''. Ha a \texttt{section} számláló kiírása római számozásra van állítva a \verb|\renewcommand{\thesection}{\Roman{section}}| paranccsal, akkor az előző kód eredménye ,,az I. szakaszban, a \textbf{II}. szakaszban''. +eredménye ,,az 1. szakaszban, a \textbf{2}. szakaszban''. +Ha a \texttt{section} számláló kiírása római számozásra van állítva a \verb|\renewcommand{\thesection}{\Roman{section}}| paranccsal, akkor az előző kód eredménye ,,az I. szakaszban, a \textbf{II}. szakaszban''. \subsubsection*{Korlátozások} -\begin{enumerate} -\item A \verbinline|!!| elején csak a \verb|\ref|, \verb|\ref*|, \verb|\pageref|, \verb|\pageref*|, \verb|\eqref|, \verb|\cite| kereszthivatkozásokkal működik helyesen. -\item A \verbinline|!!| elején a \verb|\cite| parancs jól működik a \texttt{natbib} csomaggal és \texttt{bibtex} esetében is. A \texttt{biblatex} csomag használata esetén akkor működik jól, ha a \texttt{style} vagy \texttt{citestyle} opciók értéke \texttt{numeric}, \texttt{numeric-verb}, \texttt{alphabetic}, \texttt{alphabetic-verb} vagy \texttt{authoryear}. Akkor is jól működik, ha nem adjuk meg a \texttt{style} illetve \texttt{citestyle} opciók egyikét sem. - -\item A pdf vázlatfájába nem lehet \verb|\az| paranccsal szöveget beilleszteni. Tehát például a következő kód nem ad helyes vázlatfát, ha \texttt{hyperref} vagy \texttt{bookmark} csomagot használ: +\begin{enumerate} +\item +A \verbinline|!!| elején csak a \verb|\ref|, \verb|\ref*|, \verb|\pageref|, \verb|\pageref*|, \verb|\eqref|, \verb|\refeq|, \verb|\cite| kereszthivatkozásokkal működik helyesen. +(Az \verb|\eqref| az \texttt{amsmath}, a \verb|\refeq| pedig a \texttt{mathtools} csomaggal van definiálva.) + +\item +A \verbinline|!!| elején a \verb|\cite| parancs jól működik a \texttt{natbib} csomaggal és \texttt{bibtex} esetében is. +A \texttt{biblatex} csomag használata esetén akkor működik jól, ha a \texttt{style} vagy \texttt{citestyle} opciók értéke \texttt{numeric}, \texttt{numeric-verb}, \texttt{alphabetic}, \texttt{alphabetic-verb} vagy \texttt{authoryear}. +Akkor is jól működik, ha nem adjuk meg a \texttt{style} illetve \texttt{citestyle} opciók egyikét sem. + +\item +A pdf vázlatfájába nem lehet \verb|\az| paranccsal szöveget beilleszteni. +Tehát például a következő kód nem ad helyes vázlatfát, ha \texttt{hyperref} vagy \texttt{bookmark} csomagot használ (bár a cím a szövegben, fejlécben és a tartalomjegyzékben jól fog megjelenni). \begin{examplelst} \section{...\az{\ref{sec}}...} \end{examplelst} -Viszont a cím a szövegben, fejlécben és a tartalomjegyzékben jól fog megjelenni. A problémát a később ismertetett \verb|\azsaved| paranccsal lehet megoldani. +A problémát a később ismertetett \verb|\azsaved| illetve \verb|\aznotshow| parancsokkal lehet megoldani. \end{enumerate} \commandinline|\az*{!!}| Ugyanaz mint a \verb|*| nélküli esetben, de ekkor csak a névelő kerül kiírásra. +Például, ha az \texttt{amsmath} és \texttt{hyperref} csomagok használata mellett szeretnénk egy link nélküli egyenlethivatkozást, akkor ezt (mivel nincs \verb|\eqref*| definiálva) például így tehetjük meg: +\begin{examplelst} +\begin{equation}\label{eq} +a=b +\end{equation} +\emph{Lásd \textup{(\ref*{eq})} egyenletet!} +\end{examplelst} +Szebb lenne a mondat határozott névelővel a képlet száma előtt, de most nem ad feltétlenül helyes eredményt az +\begin{examplelst} +\az{\textup{(\ref*{eq})}} +\end{examplelst} +kód, mert az első karakter a \texttt{(} jel lesz, és nem a képlet száma. +Így minden esetben ,,a'' lesz a névelő. +Ezt a következő módon javíthatjuk: +\begin{examplelst} +\az*{\ref{eq}} \textup{(\ref*{eq})} +\end{examplelst} \commandinline|\azv{!!}| -Ugyanaz mint \verbinline|\az{!!}|, de ha a \verbinline|!!| elején római számként értelmezhető karakterek vannak, akkor a névelő nem az arab megfelelőjéhez igazodik, hanem mint egyszerű karakterekhez. Például +Ugyanaz mint \verbinline|\az{!!}|, de ha a \verbinline|!!| elején római számként értelmezhető karakterek vannak, akkor a névelő nem az arab megfelelőjéhez igazodik, hanem mint egyszerű karakterekhez. +Például \begin{examplelst} \renewcommand{\thesection}{\Alph{section}} \setcounter{section}{21} \section{Cím}\label{sec} \az{\ref{sec}}.~szakaszban, \azv{\ref{sec}}.~szakaszban \end{examplelst} -eredménye ,,az V.~szakaszban, a V.~szakaszban'', mert az első esetben a V betűt római számként értelmezte, a második esetben pedig nem. Mivel most alfanumerikus számra van beállítva a \texttt{section} számláló, ezért a második eset a jó. +eredménye ,,az V.~szakaszban, a V.~szakaszban'', mert az első esetben a V betűt római számként értelmezte, a második esetben pedig nem. +Mivel most alfanumerikus számra van beállítva a \texttt{section} számláló, ezért a második eset a jó. \commandinline|\azv*{!!}| @@ -249,7 +338,8 @@ Ugyanaz mint a \verb|*| nélküli esetben, de ekkor csak a névelő kerül kiír \commandinline|\Azv{!!}|\\ \commandinline|\Azv*{!!}| -Ugyanaz, mint a kis ,,\texttt{a}'' betűvel kezdődő parancsok, de ekkor a határozott névelő nagybetűvel fog kezdődni, ami mondatok elején szükséges. Például +Ugyanaz, mint a kis ,,\texttt{a}'' betűvel kezdődő parancsok, de ekkor a határozott névelő nagybetűvel kezdődik, ami mondatok elején szükséges. +Például \begin{examplelst} \section{Cím}\label{sec} \Az{\ref{sec}}.~szakaszban áttekintjük a téma rövid történetét. @@ -258,15 +348,17 @@ eredménye {,,Az 1.~szakaszban áttekintjük a téma rövid történetét.''}. \commandinline|\azsaved| -Amikor kiadja az előző parancsok bármelyikét, akkor generálódik egy kifejthető \verb|\azsaved| parancs is. Ennek eredménye az a határozott névelő amelyik a szó elé kell. +Az előző parancsok bármelyikét használva, generálódik egy kifejthető \verb|\azsaved| parancs. +Ennek eredménye az a határozott névelő amelyik a szó elé kell. -Amikor \texttt{hyperref} vagy \texttt{bookmark} csomagot használ, akkor ahogyan azt korábban említettük, a következő kód esetén a cím, fejléc, tartalomjegyzék rendben lesz, de a pdf vázlatfája nem: +Amikor \texttt{hyperref} vagy \texttt{bookmark} csomagot használ, akkor (ahogyan azt korábban említettük) a következő kód esetén a cím, fejléc, tartalomjegyzék rendben lesz, de a pdf vázlatfája nem: \begin{examplelst} \section{\Az{\ref{sec}}...} \end{examplelst} Ez az \verb|\azsaved| paranccsal a következő módon oldható meg: \begin{examplelst} -\section{\texorpdfstring{\Az{\ref{sec}}...}{\azsaved~\ref{sec}...}} +\section{% + \texorpdfstring{\Az{\ref{sec}}...}{\azsaved~\ref{sec}...}} \end{examplelst} Ekkor a vázlatfába az \begin{examplelst} @@ -276,52 +368,136 @@ kód kerül, ami már helyes eredményt ad. \commandinline|\aznotshow| -Az előző probléma a \verb|\texorpdfstring| helyett ezzel a paranccsal egyszerűbben is megoldható. Ugyanis ezt helyezve az \verb|\az| (vagy bármelyik verziója) elé, az eredmény nem jelenik meg, csak az \verb|\azsaved| generálódik le a megfelelő határozott névelővel. Így +Az előző probléma a \verb|\texorpdfstring| helyett ezzel a paranccsal egyszerűbben is megoldható. +Ugyanis ezt helyezve az \verb|\az| (vagy bármelyik verziója) elé, az eredmény nem jelenik meg, csak az \verb|\azsaved| generálódik le a megfelelő határozott névelővel. +Így \begin{examplelst} \aznotshow\Az{\ref{sec}} \section{\azsaved~\ref{sec}...} \end{examplelst} szintén helyes eredményt ad a vázlatfában is. +\commandinline|\azseparator{!!}| + +Ezzel lehet megadni, hogy a határozott névelő és a \verbinline|!!| mivel legyen elválasztva. +Alapértelmezetten ez a törhetetlen normál méretű szóköz, ami +\begin{examplelst} +\azseparator{~} +\end{examplelst} +módon lett beállítva. +Ha át akarjuk állítani például törhető szóközre akkor ez +\begin{examplelst} +\azseparator{ } +\end{examplelst} +módon tehető meg. + \subsection{Rövidítések} -A \verb|\ref|, \verb|\pageref|, \verb|\eqref|, \verb|\cite| kereszthivatkozások (csak a \verb|*| nélküli verziók) elé nem csak az előbbi parancsokkal tehetünk határozott névelőt, mert mindegyiknek van egy rövidített egyparancsos verziója is: +A \verb|\ref|, \verb|\ref*|, \verb|\eqref|, \verb|\refeq|, \verb|\pageref|, \verb|\pageref*|, \verb|\cite| kereszthivatkozások elé nem csak az előbbi parancsokkal tehetünk határozott névelőt, ugyanis mindegyiknek van egy rövidített egyparancsos verziója is: \commandinline|\aref{!!} | $\equiv$ \verbinline|\az{\ref{!!}}|\\ -\commandinline|\aref*{!!} | $\equiv$ \verbinline|\az*{\ref{!!}}|\\ +\commandinline|\aref*{!!} | $\equiv$ \verbinline|\az{\ref*{!!}}|\\ \commandinline|\avref{!!} | $\equiv$ \verbinline|\azv{\ref{!!}}|\\ -\commandinline|\avref*{!!}| $\equiv$ \verbinline|\azv*{\ref{!!}}| +\commandinline|\avref*{!!}| $\equiv$ \verbinline|\azv{\ref*{!!}}| \commandinline|\aeqref{!!} | $\equiv$ \verbinline|\az{\eqref{!!}}|\\ -\commandinline|\aeqref*{!!} | $\equiv$ \verbinline|\az*{\eqref{!!}}|\\ -\commandinline|\aveqref{!!} | $\equiv$ \verbinline|\azv{\eqref{!!}}|\\ -\commandinline|\aveqref*{!!}| $\equiv$ \verbinline|\azv*{\eqref{!!}}| +\commandinline|\aveqref{!!} | $\equiv$ \verbinline|\azv{\eqref{!!}}| + +\commandinline|\arefeq{!!} | $\equiv$ \verbinline|\az{\refeq{!!}}|\\ +\commandinline|\avrefeq{!!} | $\equiv$ \verbinline|\azv{\refeq{!!}}| \commandinline|\apageref{!!} | $\equiv$ \verbinline|\az{\pageref{!!}}|\\ -\commandinline|\apageref*{!!} | $\equiv$ \verbinline|\az*{\pageref{!!}}|\\ +\commandinline|\apageref*{!!} | $\equiv$ \verbinline|\az{\pageref*{!!}}|\\ \commandinline|\avpageref{!!} | $\equiv$ \verbinline|\azv{\pageref{!!}}|\\ -\commandinline|\avpageref*{!!}| $\equiv$ \verbinline|\azv*{\pageref{!!}}| +\commandinline|\avpageref*{!!}| $\equiv$ \verbinline|\azv{\pageref*{!!}}| \commandinline|\acite[!!]{!!,!!,!...!} | $\equiv$ \verbinline|\az{\cite[!!]{!!,!!,!...!}}|\\ -\commandinline|\acite*[!!]{!!,!!,!...!} | $\equiv$ \verbinline|\az*{\cite[!!]{!!,!!,!...!}}|\\ -\commandinline|\avcite[!!]{!!,!!,!...!} | $\equiv$ \verbinline|\azv{\cite[!!]{!!,!!,!...!}}|\\ -\commandinline|\avcite*[!!]{!!,!!,!...!}| $\equiv$ \verbinline|\azv*{\cite[!!]{!!,!!,!...!}}| +\commandinline|\avcite[!!]{!!,!!,!...!} | $\equiv$ \verbinline|\azv{\cite[!!]{!!,!!,!...!}}| -A parancsok nevében az első ,,\texttt{a}'' betű kicserélhető ,,\texttt{A}'' betűre. Ekkor a határozott névelő nagybetűvel fog kezdődni, ami mondatok elején szükséges: +A parancsok nevében az első ,,\texttt{a}'' betű kicserélhető ,,\texttt{A}'' betűre. +Ekkor a határozott névelő nagybetűvel kezdődik, ami mondatok elején szükséges: -\commandinline|\Aref \Avref \Aeqref \Aveqref \Apageref \Avpageref \Acite \Avcite| +\commandinline|\Aref \Aref* \Avref \Avref*|\\ +\commandinline|\Aeqref \Aveqref|\\ +\commandinline|\Arefeq \Avrefeq|\\ +\commandinline|\Apageref \Apageref* \Avpageref \Avpageref*|\\ +\commandinline|\Acite \Avcite| Például \begin{examplelst} \section{Cím}\label{seca} \section{Cím}\label{secb} -\Aref{seca}.~és \aref{secb}.~szakaszban +\Aref{seca}.~és \aref{secb}.~szakaszokban \end{examplelst} -eredménye ,,Az 1. és a 2. szakaszban''. - -\subsection{A huaz kapocs}\label{subsec-kapocs} - -Amikor a \huaz\ csomag megkeresi a megfelelő határozott névelőt, akkor a szövegben található \verb|\ref|, \verb|\ref*|, \verb|\pageref|, \verb|\pageref*|, \verb|\eqref|, \verb|\cite| kereszthivatkozásokat lecseréli a kifejthető verziójukra, továbbá a kifejtés során egy adott listában található formázó parancsokat (\verb|\emph|, \verb|\textbf|, \verb|\small|, stb.) figyelmen kívül hagyja. Emiatt lehetséges, hogy például a következő kódok működnek: +eredménye ,,Az 1. és a 2. szakaszokban''. + +\subsection{Ignorált parancsok}\label{subsec-ignoralt-parancsok} + +Amikor a \huaz\ csomag megkeresi a megfelelő határozott névelőt, akkor a szövegben a következő parancsokat figyelmen kívül hagyja: + +\begin{multicols}{4} +\verb|\bfseries|\\ +\verb|\color|\\ +\verb|\emph|\\ +\verb|\em|\\ +\verb|\enquote|\\ +\verb|\fbox|\\ +\verb|\fontencoding|\\ +\verb|\fontfamily|\\ +\verb|\fontseries|\\ +\verb|\fontshape|\\ +\verb|\fontsize|\\ +\verb|\footnotesize|\\ +\verb|\framebox|\\ +\verb|\Huge|\\ +\verb|\huge|\\ +\verb|\itshape|\\ +\verb|\LARGE|\\ +\verb|\Large|\\ +\verb|\large|\\ +\verb|\lowercase|\\ +\verb|\makebox|\\ +\verb|\MakeLowercase|\\ +\verb|\MakeUppercase|\\ +\verb|\mbox|\\ +\verb|\mdseries|\\ +\verb|\normalfont|\\ +\verb|\normalsize|\\ +\verb|\rmfamily|\\ +\verb|\scriptsize|\\ +\verb|\scshape|\\ +\verb|\selectfont|\\ +\verb|\sffamily|\\ +\verb|\slshape|\\ +\verb|\small|\\ +\verb|\sscshape|\\ +\verb|\swshape|\\ +\verb|\textbf|\\ +\verb|\textcolor|\\ +\verb|\textit|\\ +\verb|\textmd|\\ +\verb|\textnormal|\\ +\verb|\textqq|\\ +\verb|\textrm|\\ +\verb|\textsc|\\ +\verb|\textsf|\\ +\verb|\textsl|\\ +\verb|\textssc|\\ +\verb|\textsw|\\ +\verb|\texttt|\\ +\verb|\textulc|\\ +\verb|\textup|\\ +\verb|\tiny|\\ +\verb|\told|\\ +\verb|\ttfamily|\\ +\verb|\ulcshape|\\ +\verb|\underline|\\ +\verb|\uppercase|\\ +\verb|\upshape|\\ +\verb|\usefont| +\end{multicols} + +Emiatt lehetséges, hogy a következő kódok jól működnek: \begin{examplelst} \newcommand{\osztaly}{V.B} Idén \az{\textbf{\osztaly}}~osztály rendezi a farsangot. @@ -329,52 +505,379 @@ Idén \az{\textbf{\osztaly}}~osztály rendezi a farsangot. \begin{examplelst} \section{Cím}\label{sec} -\az{\textbf{\ref{sec}}} +\az{\footnotesize\ref{sec}} \end{examplelst} -De a következő kód is jól fog működni: +De ez is helyes eredményt ad: \begin{examplelst} \newcommand{\myfont}[1]{{\usefont{T1}{yv1d}{m}{n}#1}} -\newcommand{\osztaly}{X.A~osztály} +\newcommand{\osztaly}{V.A~osztály} \az{\myfont{\osztaly}} \end{examplelst} -Ez nem azért van, mert a \verb|\myfont| is szerepel ebben az adott listában, hanem azért, mert a \verb|\myfont| kifejtésében található \verb|\usefont| benne van. +Azért kapunk helyes eredményt, mert a \verb|\myfont| kifejtésében található \verb|\usefont| szerepel az előző listában. Ha a \verb|\myfont| erős parancsként lett volna definiálva, akkor már nem működne megfelelően az előző kód (lásd később). Ebben az esetben a \verb|\myfont| parancsot is fel kell venni a listára. + +\commandinline|\huazignorecmd[!!]{!!}| + +Az ignoráló listát ezzel lehet bővíteni. +A \verbinline|!!| helyére az ignorálandó parancsot kell írni az argumentumai és \texttt{*} nélkül. +Az \verbinline|!!| \texttt{0} és \texttt{9} közötti egész szám lehet. +Amennyiben ezektől eltérő a beírt \verbinline|!!|, akkor erre figyelmeztet a fordító. -\commandinline|\AddToHook{huaz}{!!}| +A használata három esetre bontható. + +\paragraph{1. eset} +% +Opció nélkül használva, a \verbinline|!!| a névelő megállapításakor törlődik, de az utána írt \texttt{*}, opció vagy argumentum nem. +Deklarációs parancsok esetén jól használható. +Például a \verb|\tiny| parancs így lett besorolva a listába: +\begin{examplelst} +\huazignorecmd{\tiny} +\end{examplelst} +Ugyanez alkalmazható abban az esetben is, ha a \verbinline|!!|-nak nincs csillagos verziója sem opciója, továbbá az első \verb|{ }| jelek közé írt argumentuma a figyelembe vett szöveg. Például a \verb|\textrm| ilyen, ezért így lett besorolva: +\begin{examplelst} +\huazignorecmd{\textrm} +\end{examplelst} -Amennyiben olyan formázó parancsot használ, ami még ezen a listán nem található, akkor az a felhasználó által is bővíthető. Például a \texttt{shadowtext} csomag \verb|\shadowtext| parancsa nincs a listában, ezért a következő kód eredménye hibás lesz: +A \texttt{shadowtext} csomag \verb|\shadowtext| parancsa nincs a listában, ezért a következő kód eredménye hibás lesz: \begin{examplelst} \newcommand{\osztaly}{X.A~osztály} \az{\shadowtext{\osztaly}} \end{examplelst} -A listára az +A listára \begin{examplelst} -\AddToHook{huaz}{\def\shadowtext{}} +\huazignorecmd{\shadowtext} \end{examplelst} -módon vehető fel. Ezzel a névelő megállapítása során a \verb|\shadowtext| parancs nem jelent semmit. Tehát a következő kód már megfelelően működik: +módon vehető fel, mert a \verb|\shadowtext| parancsnak sem opciója sem csillagos verziója nincs, továbbá egyetlen argumentuma a szöveg. +Tehát a következő kód már megfelelően működik: \begin{examplelst} -\AddToHook{huaz}{\def\shadowtext{}} +\huazignorecmd{\shadowtext} \newcommand{\osztaly}{X.A~osztály} \az{\shadowtext{\osztaly}} \end{examplelst} -Az előző eset a \texttt{huaz} kapocs nélkül így is megoldható: +Megjegyezzük, hogy az előző eset így is megoldható: \begin{examplelst} \newcommand{\osztaly}{X.A~osztály} \az*{\osztaly}~\shadowtext{\osztaly} \end{examplelst} -Ha a \verb|\shadowtext| az \verb|\osztaly| definíciójában szerepel, akkor a \texttt{huaz} kapocs használata nem kerülhető meg: +Ha a \verb|\shadowtext| az \verb|\osztaly| definíciójában szerepel, akkor nem tudjuk megkerülni a \verb|\huazignorecmd| használatát az előző módon: \begin{examplelst} -\AddToHook{huaz}{\def\shadowtext{}} +\huazignorecmd{\shadowtext} \newcommand{\osztaly}{\shadowtext{X.A~osztály}} \az{\osztaly} \end{examplelst} -Ha a formázó parancs erős, akkor a \texttt{huaz} kapocs használata szintén nem kerülhető meg. Például + +\paragraph{2. eset} +% +Ha az \verbinline|!!| \texttt{0}, akkor a \verbinline|!!| és az utána található első \verb|{| jelig található kódok mindegyike ignorálódik a névelő megállapításakor. +Tehát például +\begin{examplelst} +\huazignorecmd[0]{\foo} +\end{examplelst} +esetén a +\begin{examplelst} +\foo{...} \foo*{...} \foo[...]{...} \foo*[...]{...} +\end{examplelst} +kódokban a +\begin{examplelst} +\foo \foo* \foo[...] \foo*[...] +\end{examplelst} +mindegyike figyelmen kívül lesz hagyva a névelő megállapításakor. +A \verb|\makebox| például +\begin{examplelst} +\huazignorecmd[0]{\makebox} +\end{examplelst} +módon lett besorolva, ezért például +\begin{examplelst} +\makebox[2cm][s]{szöveg} +\end{examplelst} +esetén a \verb|\makebox[2cm][s]| rész törlődik és csak a ,,szöveg'' lesz figyelembe véve. + + +Ha a formázó parancs erős, akkor a \verb|\huazignorecmd| használata nem kerülhető meg még akkor sem, ha a listán szereplő parancsokkal épül fel. +Például \begin{examplelst} -\AddToHook{huaz}{\def\myfont{}} -\DeclareRobustCommand{\myfont}[1]{{\usefont{T1}{yv1d}{m}{n}#1}} -\renewcommand{\thesection}{\myfont{\arabic{section}}} +\huazignorecmd[0]{\myfont} +\DeclareRobustCommand{\myfont}[2][cmr]{{\usefont{T1}{#1}{m}{n}#2}} +\renewcommand{\thesection}{\myfont[yv1d]{\arabic{section}}} \section{Cím}\label{sec} \aref{sec} \end{examplelst} +Ebben a példában nem hagyható el a \texttt{[0]}, mert a \verb|\myfont|-nak van opciója. + +\paragraph{3. eset} +% +Ha az \verbinline|!!| \texttt{1} és \texttt{9} közötti egész szám, akkor a \verb|\huazignorecmd| parancs a névelő megállapítása során a \verbinline|!!|-ot és az utána következő első \verb|{| jelig tartó kódokat ignorálja, továbbá ezután az első \verbinline|!!| darab \verb|{ }| jelek közé írt részeket szintén figyelmen kívül hagyja. +Tehát például +\begin{examplelst} +\huazignorecmd[1]{\foo} +\end{examplelst} +esetén a +\begin{examplelst} +\foo{...} \foo*{...} \foo[...]{...} \foo*[...]{...} +\end{examplelst} +kódok mindegyike figyelmen kívül lesz hagyva a névelő megállapításakor. +Például a \verb|\textcolor| parancs +\begin{examplelst} +\huazignorecmd[1]{\textcolor} +\end{examplelst} +módon lett a listába sorolva, így a +\begin{examplelst} +\textcolor[RGB]{20,30,40}{szöveg} +\end{examplelst} +parancsban a +\begin{examplelst} +\textcolor[RGB]{20,30,40} +\end{examplelst} +kódrész ignorálva lesz, és csak a ,,\texttt{szöveg}'' kerül vizsgálatra a névelő megállapításakor. +Ha a +\begin{examplelst} +\huazignorecmd[2]{\foo} +\end{examplelst} +parancsot használjuk, akkor a +\begin{examplelst} +\foo{...}{...} \foo*{...}{...} +\foo[...]{...}{...} \foo*[...]{...}{...} +\end{examplelst} +kódok mindegyike figyelmen kívül lesz hagyva a névelő megállapításakor. +Például a \verb|\fontsize| parancs +\begin{examplelst} +\huazignorecmd[2]{\fontsize} +\end{examplelst} +módon lett a listába sorolva, így a +\begin{examplelst} +\fontsize{14pt}{14pt} +\end{examplelst} +parancs figyelmen kívül lesz hagyva a névelő megállapításakor. + + + + +\subsection{A kereszthivatkozások kifejthető verziói} + +Ha a szöveg elején kereszthivatkozás van, akkor a határozott névelő megállapítása előtt a kereszthivatkozás parancsát le kell cserélni annak kifejthető verziójára. +A \texttt{refcount} csomag két ilyen parancsot definiál: +A \verb|\getrefnumber| a \verb|\ref|, \verb|\ref*|, \verb|\eqref|, \verb|\refeq| esetén +használható, a \verb|\getpagerefnumber| pedig a \verb|\pageref| és \verb|\pageref*| esetén. + +\commandinline|\huazrefcmd{!!}| + +Ezzel a paranccsal elérhető, hogy a \verbinline|!!| helyére beírt parancsot és annak csillagos verzióját a határozott névelő megállapítása során a \verb|\getrefnumber| paranccsal helyettesítse. + +A \verb|\ref|, \verb|\ref*|, \verb|\eqref|, \verb|\refeq| parancsok így lettek besorolva a \huaz\ csomagban: +\begin{examplelst} +\huazrefcmd{\ref} +\huazrefcmd{\eqref} +\huazrefcmd{\refeq} +\end{examplelst} +Ezzel már az \verb|\eqref*| és \verb|\refeq*| is működne, de ezek a csillagos verziók nincsenek definiálva a csillag nélküli verziókat definiáló \texttt{amsmath} illetve \texttt{mathtools} csomagokban. Ezt mi is pótolhatjuk, amire \aref{subsec-eqref}.~alszakaszban láthatunk megoldást. + +\commandinline|\huazpagerefcmd{!!}| + +Ezzel a paranccsal elérhető, hogy a \verbinline|!!| helyére beírt parancsot és annak csillagos verzióját a határozott névelő megállapítása során a \verb|\getpagerefnumber| paranccsal helyettesítse. + +A \verb|\pageref| és \verb|\pageref*| parancsok így lettek besorolva a \huaz\ csomagban: +\begin{examplelst} +\huazrefcmd{\pageref} +\end{examplelst} + +Ezekre láthatunk egy alkalmazást \aref{subsec-autoref}.~alszakaszban. + +\subsection{Az \texttt{\textbackslash autoref} és \texttt{\textbackslash autopageref} parancsok}\label{subsec-autoref} + +Ezeket a parancsokat a \texttt{hyperref} csomag definiálja. +Ezekkel hivatkozva egy címkére, nem csak a sorszám, hanem a sorszámozott egység neve (szakasz, alszakasz, oldal, stb.) is megjelenik link formájában. +Ezeknek léteznek csillagos verzióik is, melyeknek ugyanaz a hatásuk, de nem generálnak linket. + +Magyar nyelvű dokumentumokban nem lehet közvetlenül alkalmazni, mert az angol szabály szerint ,,1.~szakasz'' helyett ,,szakasz~1'' lesz az eredménye a következőnek: +\begin{examplelst} +\section{Cím}\label{sec} +\autoref*{sec} +\end{examplelst} +Ezért a használatához először ,,magyarosítani kell'' a következő kóddal a \texttt{hyperref} betöltése után a preambulumban: +\begin{examplelst} +\usepackage{regexpatch} +\makeatletter +\xpatchcmd{\HyRef@autosetref}{\HyRef@currentHtag}{}{}{} +\xpatchcmd{\HyRef@autosetref}{\null} + {\null.~\HyRef@currentHtag}{}{} +\xpatchcmd*{\HyRef@testreftype}{~}{}{}{} +\makeatother +\RenewDocumentCommand{\autopageref}{sm}{% + \IfBooleanTF{#1} + {\pageref*{#2}.~oldal} + {\hyperref[{#2}]{\pageref*{#2}.~oldal}}} +\end{examplelst} +Ezután már ,,1.~szakasz'' lesz az eredmény. + +Ha az így módosított \verb|\autoref|, \verb|\autoref*|, \verb|\autopageref|, \verb|\autopageref*| parancsokhoz automatikus határozott névelőt szeretnénk, akkor írjuk be a következőket a \huaz\ betöltése után: +\begin{examplelst} +\huazrefcmd{\autoref} +\huazpagerefcmd{\autopageref} +\end{examplelst} +Ezután a következő kód eredménye ,,Az 1. szakasz az 1. oldalon kezdődik.'' lesz: +\begin{examplelst} +\section{Cím}\label{sec} +\Az{\autoref*{sec}} \az{\autopageref*{sec}on} kezdődik. +\end{examplelst} + +\subsection{Az \texttt{\textbackslash eqref*} és \texttt{\textbackslash refeq*} parancsok}\label{subsec-eqref} + +A \verb|\ref| és \verb|\pageref| parancsoknak definiált a csillagos verziójuk is, amely alapesetben nem különbözik a normál verziótól, de a \texttt{hyperref} csomaggal használva a csillag nélküli verzió linket generál, míg a csillagos nem. + +Az \texttt{amsmath} csomag által definiált \verb|\eqref| a \texttt{hyperref} csomaggal együtt használva szintén generál linket, de ennek nincs definiálva csillagos verziója, így ekkor a link nélküli verzió nem érhető el közvetlenül. +További gond az ilyen link nélküli egyenlethivatkozás előtti automatikus névelő megadása. + +Négy lehetséges megoldást mutatunk. + +\begin{enumerate} +\item +A \texttt{NoHyper} környezet használatával: +\begin{examplelst} +\begin{equation}\label{eq} +a=b +\end{equation} +\emph{Lásd \begin{NoHyper}\aeqref{eq}\end{NoHyper} + egyenletet!} +\end{examplelst} + +\item +Az \verb|\az*| parancs használatával: +\begin{examplelst} +\begin{equation}\label{eq} +a=b +\end{equation} +\emph{Lásd \az*{\ref{eq}} \textup{(\ref*{eq})} egyenletet!} +\end{examplelst} + +\item +Az \verb|\eqrefstyle| parancs definiálásával és a \verb|\huazignorecmd| paranccsal, amely az előzőnek egy kényelmesebben használható verziója: +\begin{examplelst} +\makeatletter +\newcommand{\eqrefstyle}[1]{\textup{\tagform@{#1}}} +\makeatother +\huazignorecmd{\eqrefstyle} + +\begin{equation}\label{eq} +a=b +\end{equation} +\emph{Lásd \az{\eqrefstyle{\ref*{eq}}} egyenletet!} +\end{examplelst} + +\item +Ebben az esetben definiáljuk az \verb|\eqref| csillagos verzióját (az \texttt{amsmath} betöltése után), amely nem generál linket a \texttt{hyperref} csomaggal együtt használva: +\begin{examplelst} +\makeatletter +\DeclareDocumentCommand{\eqref}{ s m }{% + \textup{\tagform@{% + \IfBooleanTF{#1}{\ref*{#2}}{\ref{#2}}% + }}% +} +\makeatother +\end{examplelst} +Ezután a +\begin{examplelst} +\begin{equation}\label{eq} +a=b +\end{equation} +\emph{Lásd \az{\eqref*{eq}} egyenletet!} +\end{examplelst} +kód helyes eredményt ad, mert a \huaz\ csomagban nem csak az \verb|\eqref|, hanem az \verb|\eqref*| is a kifejthető \verb|\getrefnumber| parancsra lesz kicserélve a határozott névelő meghatározásánál. +\end{enumerate} + +Ugyanez a probléma a \texttt{mathtools} csomag által definiált \verb|\refeq| és a \texttt{hyperref} csomag együttes használata esetében. + +Az előző négy megoldás mindegyikét lehet alkalmazni megfelelő módosításokkal: +\begin{enumerate} +\item +A \texttt{NoHyper} környezet használatával: +\begin{examplelst} +\begin{equation}\label{eq} +a=b +\end{equation} +\emph{Lásd \begin{NoHyper}\arefeq{eq}\end{NoHyper} + egyenletet!} +\end{examplelst} + +\item +Az \verb|\az*| parancs használatával: +\begin{examplelst} +\begin{equation}\label{eq} +a=b +\end{equation} +\emph{Lásd \az*{\ref{eq}} \textup{\ref*{eq}} egyenletet!} +\end{examplelst} + +\item +A \verb|\refeqstyle| parancs definiálásával: +\begin{examplelst} +\newcommand{\refeqstyle}[1]{\textup{#1}} + +\begin{equation}\label{eq} +a=b +\end{equation} +\emph{Lásd \az{\refeqstyle{\ref*{eq}}} egyenletet!} +\end{examplelst} +Itt nincs szükség a \verb|\huazignorecmd{\refeqstyle}| használatára. + +\item +A \verb|\refeq*| parancs definiálásával: +\begin{examplelst} +\DeclareDocumentCommand{\refeq}{ s m }{% + \textup{% + \IfBooleanTF{#1}{\ref*{#2}}{\ref{#2}}% + }% +} +\end{examplelst} +Ezután a +\begin{examplelst} +\begin{equation}\label{eq} +a=b +\end{equation} +\emph{Lásd \az{\refeq*{eq}} egyenletet!} +\end{examplelst} +kód helyes eredményt ad, mert a \huaz\ csomagban nem csak a \verb|\refeq|, hanem a \verb|\refeq*| is a kifejthető \verb|\getrefnumber| parancsra lesz kicserélve a határozott névelő meghatározásánál. +\end{enumerate} + +\subsection{Parancsok átdefiniálása a határozott névelő megállapításakor} + +A \verb|\huazignorecmd|, \verb|\huazrefcmd| és \verb|\huazpagerefcmd| parancsok is a címben szereplő funkciót látják el, de speciális esetekben. +Ezek általánosított verziója a következő parancs: + +\commandinline|\huazdefcmd{!<átdefiniáló kód>!}| + +Az \verbinline|!<átdefiniáló kód>!| helyére egy parancsnak azt a definícióját kell írni, amelynek a határozott névelő megállapítása során kell érvényesülnie. +Például a következő kódokban az egymást követő sorok ekvivalensek: +\begin{examplelst} +\huazignorecmd{\tiny} +\huazdefcmd{\def\tiny{}} +\end{examplelst} + +\begin{examplelst} +\huazignorecmd[0]{\makebox} +\huazdefcmd{\def\makebox#1#{}} +\end{examplelst} + +\begin{examplelst} +\huazignorecmd[1]{\textcolor} +\huazdefcmd{\def\textcolor#1#{\@gobble}} +\end{examplelst} + +\begin{examplelst} +\huazrefcmd{\ref} +\huazdefcmd{\def\ref#1#{\getrefnumber}} +\end{examplelst} + +Alkalmazásként tekintsük a következő kódot, amely hibával fog fordulni: +\begin{examplelst} +\newcommand{\tananyag}{\LaTeX\ alapjai} +A mai óra anyaga \az{\tananyag}. +\end{examplelst} +A megfelelő eredményhez a \verb|\LaTeX| parancsot át kell definiálni a névelő megállapításakor: +\begin{examplelst} +\huazdefcmd{\def\LaTeX{latex}} +\newcommand{\tananyag}{\LaTeX\ alapjai} + +A mai óra anyaga \az{\tananyag}. +\end{examplelst} \end{document} \ No newline at end of file diff --git a/Master/texmf-dist/tex/latex/huaz/huaz.sty b/Master/texmf-dist/tex/latex/huaz/huaz.sty index 1a9435bfffd..97b93c265be 100644 --- a/Master/texmf-dist/tex/latex/huaz/huaz.sty +++ b/Master/texmf-dist/tex/latex/huaz/huaz.sty @@ -3,7 +3,7 @@ %% %% Automatic Hungarian definite articles %% -%% Copyright 2022-2024 by Tibor Tomacs +%% Copyright 2022-2024 by Tibor Tómács %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3 @@ -15,10 +15,10 @@ %% %% This work has the LPPL maintenance status `maintained'. %% -%% The Current Maintainer of this work is Tibor Tomacs. +%% The Current Maintainer of this work is Tibor Tómács. %% \NeedsTeXFormat{LaTeX2e}[2021/10/10] -\ProvidesPackage{huaz}[2024/04/20 v1.2 Automatic Hungarian definite articles] +\ProvidesPackage{huaz}[2024/04/28 v2.0 Automatic Hungarian definite articles] \RequirePackage{xstring,refcount,iftex} @@ -74,15 +74,22 @@ \NewHook{huaz} -\AddToHook{huaz}{% In \StrChar, these commands will be considered as one syntax unit. - \let\"\relax\let\'\relax\let\H\relax\let\`\relax\let\~\relax\let\^\relax\let\v\relax\let\u\relax% - \let\=\relax\let\k\relax\let\.\relax\let\AA\relax\let\aa\relax\let\AE\relax\let\ae\relax\let\&\relax% - \let\#\relax\let\_\relax} - -\def\huaz@y@#1#{\@gobble} -\def\huaz@deloptparam{\huaz@y@\relax}% \def\textcolor{\huaz@deloptparam} --> \textcolor[RGB]{0,255,0}{text} --> text; \textcolor{red}{text} --> text - -\AddToHook{huaz}{% Ignored commands +\AddToHook{huaz}{% + % + % Accent commands will be considered as one syntax unit + \let\"\relax\let\'\relax\let\`\relax\let\~\relax\let\^\relax\let\=\relax\let\.\relax% + \let\b\relax\let\B\relax\let\c\relax\let\d\relax\let\H\relax\let\k\relax\let\r\relax\let\u\relax\let\v\relax% + % + % Change letter commands + \def\AA{a}\def\aa{a}\def\AE{a}\def\ae{a}\def\IJ{ij}\def\ij{ij}% + \def\l{l}\def\NG{N}\def\ng{n}\def\O{o}\def\o{o}\def\OE{oe}\def\oe{oe}% + \def\SS{s}\def\ss{s}\def\TH{th}\def\th{th}% + \def\DJ{dj}\def\dj{dj}\def\DH{dh}\def\dh{dh}% + % + % Change sign commands to period + \def\&{.}\def\#{.}\def\%{.}\def\_{.}% + % + % Ignore commands \def\usefont#1#2#3#4{}% \def\fontsize#1#2{}% \def\fontencoding#1{}% @@ -108,19 +115,100 @@ \def\tiny{}\def\scriptsize{}\def\footnotesize{}\def\small{}\def\normalsize{}% \def\large{}\def\Large{}\def\LARGE{}\def\huge{}\def\Huge{}% \def\uppercase{}\def\lowercase{}\def\MakeUppercase{}\def\MakeLowercase{}% - \def\textcolor{\huaz@deloptparam}\def\color{\huaz@deloptparam}% + \def\textcolor#1#{\@gobble}% \textcolor[...]{...}{text} and \textcolor{...}{text} --> text + \def\color#1#{\@gobble}% \color[...]{...}text and \color{...}text --> text \def\mbox{}\def\fbox{}% \def\makebox#1#{}% \makebox{text} and \makebox[opt]{text} --> text \def\framebox#1#{}% \framebox{text} and \framebox[opt]{text} --> text \def\textqq{}% \def\enquote#1#{}% \enquote{text} and \enquote*{text} --> text - \def\told{}} - -\AddToHook{huaz}{% Expandable cross-references commands + \def\told{}% + % + % Expandable cross-references commands \def\ref#1#{\getrefnumber}% \ref{...} and \ref*{...} --> \getrefnumber{...} \def\pageref#1#{\getpagerefnumber}% \pageref{...} and \pageref*{...} --> \getpagerefnumber{...} - \def\eqref#1{\getrefnumber{#1}}% - \def\cite{\huaz@cite}} + \def\eqref#1#{\getrefnumber}% \eqref{...} (amsmath) and \eqref*{...} (!!) --> \getrefnumber{...} + \def\refeq#1#{\getrefnumber}% \refeq{...} (mathtools) and \refeq*{...} (!!) --> \getrefnumber{...} + \def\cite{\huaz@cite}% + } + +%================================================= +% +% \huazignorecmd[option]{\command} +% option: 0,1,...,9 +% +% \huazignorecmd{\foo} = \AddToHook{huaz}{\def\foo{}} +% ignored: \foo +% for example: \huazignorecmd{\rmfamily} +% \rmfamily text --> text +% +% \huazignorecmd[0]{\foo} = \AddToHook{huaz}{\def\foo#1#{}} +% ignored: \foo, \foo*, \foo[...], \foo*[...] +% for example: \huazignorecmd{\textrm} +% \textrm{text} --> text +% \huazignorecmd{\makebox} +% \makebox[5cm]{text} --> text +% +% \huazignorecmd[1]{\foo} = \AddToHook{huaz}{\def\foo#1#{\@gobble}} +% ignored: \foo{...}, \foo[...]{...}, \foo*[...]{...} +% for example: \huazignorecmd{\textcolor} +% \textcolor[RGB]{0,255,0}{text} --> text +% +% \huazignorecmd[2]{\foo} = \AddToHook{huaz}{\def\foo#1#{\huaz@gobble@ii}} +% ignored: \foo{...}{...}, \foo[...]{...}{...}, \foo*[...]{...}{...} +% for example: \huazignorecmd{\fontsize} +% \fontsize{12pt}{12pt}text --> text +% +%================================================= + +\newcommand{\huaz@gobble@ii}[2]{} +\newcommand{\huaz@gobble@iii}[3]{} +\newcommand{\huaz@gobble@iv}[4]{} +\newcommand{\huaz@gobble@v}[5]{} +\newcommand{\huaz@gobble@vi}[6]{} +\newcommand{\huaz@gobble@vii}[7]{} +\newcommand{\huaz@gobble@viii}[8]{} +\newcommand{\huaz@gobble@ix}[9]{} + +\def\huaz@check@opt#1{% + \def\huaz@opt{#1}% + \huaz@temp@if@false% + \@for\huaz@list:={,0,1,2,3,4,5,6,7,8,9,10}% + \do{\IfStrEq{\huaz@opt}{\huaz@list}{\huaz@temp@if@true}{}}% + \IfStrEq{\huaz@opt}{}{\def\huaz@opt{10}}{}% + \ifhuaz@temp@if@\else + \def\huaz@opt{10}% + \PackageWarning{huaz}{Valid options for \string\huazignorecmd: 0,1,...,9. The '[#1]' has been removed.}\fi} + +\NewDocumentCommand{\huazignorecmd}{>{\TrimSpaces}O{10}m}{% + \huaz@check@opt{#1}% + \ifcase\huaz@opt% + \AddToHook{huaz}{\def#2##1##{}}\or + \AddToHook{huaz}{\def#2##1##{\@gobble}}\or + \AddToHook{huaz}{\def#2##1##{\huaz@gobble@ii}}\or + \AddToHook{huaz}{\def#2##1##{\huaz@gobble@iii}}\or + \AddToHook{huaz}{\def#2##1##{\huaz@gobble@iv}}\or + \AddToHook{huaz}{\def#2##1##{\huaz@gobble@v}}\or + \AddToHook{huaz}{\def#2##1##{\huaz@gobble@vi}}\or + \AddToHook{huaz}{\def#2##1##{\huaz@gobble@vii}}\or + \AddToHook{huaz}{\def#2##1##{\huaz@gobble@viii}}\or + \AddToHook{huaz}{\def#2##1##{\huaz@gobble@ix}}\or + \AddToHook{huaz}{\def#2{}}\fi} + +%================================================= +% +% \huazrefcmd{\foo} = \AddToHook{huaz}{\def\foo#1#{\getrefnumber}} +% --> \foo{...}, \foo[...]{...}, \foo*[...]{...} --> \getrefnumber{...} +% +% \huazpagerefcmd{\foo} = \AddToHook{huaz}{\def\foo#1#{\getpagerefnumber}} +% --> \foo{...}, \foo[...]{...}, \foo*[...]{...} --> \getpagerefnumber{...} +% +% \huazdefcmd{...} = \AddToHook{huaz}{...} +%================================================= + +\NewDocumentCommand{\huazrefcmd}{m}{\AddToHook{huaz}{\def#1##1##{\getrefnumber}}} +\NewDocumentCommand{\huazpagerefcmd}{m}{\AddToHook{huaz}{\def#1##1##{\getpagerefnumber}}} +\NewDocumentCommand{\huazdefcmd}{m}{\AddToHook{huaz}{#1}} %================================================= % @@ -136,25 +224,25 @@ \UseHook{huaz}% \huaz@must@z@false% % - % 1. syntax unit \AA,\aa,\AE,\ae,e,u,i,o,a,E,U,I,O,A,5 + % 1. syntax unit e,u,i,o,a,E,U,I,O,A,5 \StrChar{#1}{1}[\huaz@temp]% - \@for\huaz@list:={\AA,\aa,\AE,\ae,e,u,i,o,a,E,U,I,O,A,5}% + \@for\huaz@list:={e,u,i,o,a,E,U,I,O,A,5}% \do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@must@z@true}{}}% % % 1. syntax unit accent command and 2. character e,u,i,o,a,E,U,I,O,A (e.g. "\'A") \ifhuaz@must@z@\else% \huaz@temp@if@false% \StrChar{#1}{1}[\huaz@temp]% - \@for\huaz@list:={\",\',\H,\`,\~,\^,\v,\u,\=,\k}% + \@for\huaz@list:={\",\',\`,\~,\^,\=,\.,\b,\B,\c,\d,\H,\k,\r,\u,\v}% \do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@temp@if@true}{}}% \ifhuaz@temp@if@% \StrChar{#1}{2}[\huaz@temp]% - \@for\huaz@list:={e,u,i,a,E,U,I,O,A}% + \@for\huaz@list:={e,u,i,o,a,E,U,I,O,A}% \do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@must@z@true}{}}% \fi% \fi% % - % 1. character ö,ü,ó,ő,ú,é,á,ű,í,Ö,Ü,Ó,Ő,Ú,É,Á,Ű,Í,... + % 1. character in \huaz@list@A \ifhuaz@must@z@\else% \ifhuaz@must@oneunit@\StrLeft{#1}{1}[\huaz@tempa]\else\StrLeft{#1}{2}[\huaz@tempa]\fi% in pdflatex(utf8) Ő is two syntax units; in pdflatex(latin2)/xelatex/lualatex Ő is one syntax unit \@for\huaz@list:=\huaz@list@A% @@ -162,15 +250,15 @@ \IfStrEq{\huaz@tempa}{\huaz@tempb}{\huaz@must@z@true}{}}% \fi% % - % 1. character f,l,m,n,r,x,y,F,L,M,N,S,R,X,Y and the 2. character is not letter (e.g. "M-10") + % 1. character f,l,m,n,s,r,x,y,F,L,M,N,S,R,X,Y,\huaz@list@X and the 2. character is not letter (e.g. "M-10") \ifhuaz@must@z@\else% \huaz@temp@if@false% \StrChar{#1}{2}[\huaz@temp]% - \@for\huaz@list:={;,`,',",+,!,/,=,(,),<,>,@,.,?,:,-,*,0,1,2,3,4,5,6,7,8,9,{,},{ },{},\&,\#,\_,\unskip,\kern}% \kern, \unskip for active characters + \@for\huaz@list:={;,`,',",+,!,/,=,(,),<,>,@,.,?,:,-,*,0,1,2,3,4,5,6,7,8,9,{,},{ },{},\unskip,\kern}% \kern, \unskip for active characters \do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@temp@if@true}{}}% \ifhuaz@temp@if@% \StrChar{#1}{1}[\huaz@temp]% - \@for\huaz@list:={f,l,m,n,r,x,y,F,L,M,N,S,R,X,Y}% + \@for\huaz@list:={f,l,m,n,s,r,x,y,F,L,M,N,S,R,X,Y}% \do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@must@z@true}{}}% \ifhuaz@must@oneunit@% \ifhuaz@must@z@\else% @@ -185,26 +273,26 @@ \ifhuaz@must@z@\else% \huaz@temp@if@false% \StrChar{#1}{3}[\huaz@temp]% - \@for\huaz@list:={;,`,',",+,!,/,=,(,),<,>,@,.,?,:,-,*,0,1,2,3,4,5,6,7,8,9,{,},{ },{},\&,\#,\_,\unskip,\kern}% \kern, \unskip for active characters + \@for\huaz@list:={;,`,',",+,!,/,=,(,),<,>,@,.,?,:,-,*,0,1,2,3,4,5,6,7,8,9,{,},{ },{},\unskip,\kern}% \kern, \unskip for active characters \do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@temp@if@true}{}}% \ifhuaz@temp@if@% \huaz@temp@if@false% \StrChar{#1}{2}[\huaz@temp]% - \@for\huaz@list:={f,l,m,n,r,x,y,F,L,M,N,S,R,X,Y}% + \@for\huaz@list:={f,l,m,n,s,r,x,y,F,L,M,N,S,R,X,Y}% \do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@temp@if@true}{}}% \ifhuaz@temp@if@% \StrChar{#1}{1}[\huaz@temp]% - \@for\huaz@list:={\",\',\H,\`,\~,\^,\v,\u,\=,\k}% + \@for\huaz@list:={\",\',\`,\~,\^,\=,\.,\b,\B,\c,\d,\H,\k,\r,\u,\v}% \do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@must@z@true}{}}% \fi% \fi% \fi% % - % first two characters ly,Ly,LY,ny,Ny,NY,sz,Sz,SZ,... and the 3. character is not letter (e.g. "NY" or "SZ-2") + % first two characters ly,Ly,LY,ny,Ny,NY,sz,Sz,SZ,\huaz@list@X and the 3. character is not letter (e.g. "NY" or "SZ-2") \ifhuaz@must@z@\else% \huaz@temp@if@false% \StrChar{#1}{3}[\huaz@temp]% - \@for\huaz@list:={;,`,',",+,!,/,=,(,),<,>,@,.,?,:,-,*,0,1,2,3,4,5,6,7,8,9,{,},{ },{},\&,\#,\_,\unskip,\kern}% \kern, \unskip for active characters + \@for\huaz@list:={;,`,',",+,!,/,=,(,),<,>,@,.,?,:,-,*,0,1,2,3,4,5,6,7,8,9,{,},{ },{},\unskip,\kern}% \kern, \unskip for active characters \do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@temp@if@true}{}}% \ifhuaz@temp@if@% \StrLeft{#1}{2}[\huaz@temp]% @@ -302,36 +390,49 @@ %================================================= % -% \huaz@try@roman{<...>} -% Collect the characters i,v,x,l,c,d,m,I,V,X,L,C,D,M from the beginning of <...>. -% This string is saved into \huaz@try@roman@result. -% If this string is empty, then \huaz@try@roman@result is <...>. E.g. -% \huaz@try@roman{XIV.6}\huaz@try@roman@result --> "XIV" -% \huaz@try@roman{xiii.x}\huaz@try@roman@result --> "xiii" -% \huaz@try@roman{d.xiii}\huaz@try@roman@result --> "d" -% \huaz@try@roman{a.xiii}\huaz@try@roman@result --> "a.xiii" -% \huaz@try@roman{XIii}\huaz@try@roman@result --> "XIii" -% \huaz@try@roman{aXIIII}\huaz@try@roman@result --> "aXIIII" +% \huaz@collect@roman{<...>} +% Collecting the characters i,v,x,l,c,d,m,I,V,X,L,C,D,M from the beginning of <...> +% "XIII" --> result string is "XIII" +% "xiii.x" --> result string is "xiii" +% "x ii.x" --> result string is "x" +% "VB" --> result string is "V" +% "XIV6" --> result string is "XIV" +% "aXIII" --> result string is "" +% If the result string = <...>, then \huaz@collect@roman@result := result string +% \huaz@collect@roman{XIII}\huaz@collect@roman@result --> "XIII" +% If the result string is not empty and the first character after it is a punctuation mark or space in <...> , then \huaz@collect@roman@result := result string +% \huaz@collect@roman{xiii.x}\huaz@collect@roman@result --> "xiii" +% \huaz@collect@roman{x ii.x}\huaz@collect@roman@result --> "x" +% If the result string is not empty and the first character after it is a letter or digit in <...> , then \huaz@collect@roman@result := "" +% \huaz@collect@roman{VB}\huaz@collect@roman@result --> "" +% \huaz@collect@roman{XIV6}\huaz@collect@roman@result --> "" +% If the result string is empty then \huaz@collect@roman@result := "" +% \huaz@collect@roman{aXIII}\huaz@collect@roman@result --> "" % %================================================= -\NewDocumentCommand{\huaz@try@roman}{m}{% +\NewDocumentCommand{\huaz@collect@roman}{m}{% \begingroup% \exploregroups% \UseHook{huaz}% \StrLen{#1}[\huaz@temp]% \setcounter{huaz@temp@count}{\huaz@temp}% \setcounter{huaz@temp@count@}{1}% - \gdef\huaz@try@roman@result{}% + \gdef\huaz@collect@roman@result{}% \loop% - \huaz@temp@if@false% \StrChar{#1}{\thehuaz@temp@count@}[\huaz@temp]% - \IfSubStr{ivxlcdmIVXLCDM}{\huaz@temp}{% - \expandafter\g@addto@macro\expandafter\huaz@try@roman@result\expandafter{\huaz@temp}} + \IfSubStr{ivxlcdmIVXLCDM}{\huaz@temp} + {\expandafter\g@addto@macro\expandafter\huaz@collect@roman@result\expandafter{\huaz@temp}} {\setcounter{huaz@temp@count@}{\value{huaz@temp@count}}}% \ifnum\value{huaz@temp@count@}<\value{huaz@temp@count}\stepcounter{huaz@temp@count@}% \repeat% - \ifx\huaz@try@roman@result\@empty\gdef\huaz@try@roman@result{#1}\fi% + \IfStrEq{\huaz@collect@roman@result}{}{}{% + \huaz@temp@if@false% + \StrBehind{#1}{\huaz@collect@roman@result}[\huaz@tempa]% + \StrChar{\huaz@tempa}{1}[\huaz@tempb]% + \@for\huaz@list:={;,`,',",+,!,/,=,(,),<,>,@,.,?,:,-,*,{,},{ },{},\unskip,\kern}% \kern, \unskip for active characters + \do{\IfStrEq{\huaz@tempb}{\huaz@list}{\huaz@temp@if@true}{}}% + \ifhuaz@temp@if@\else\gdef\huaz@collect@roman@result{}\fi}% \endgroup} %================================================= @@ -342,6 +443,15 @@ \def\aznotshow{\huaz@show@false} +%================================================= +% +% \azseparator +% +%================================================= + +\def\azseparator#1{\def\huaz@sep{#1}} +\def\huaz@sep{~} + %================================================= % % \huaz@text @@ -349,16 +459,18 @@ %================================================= \NewDocumentCommand{\huaz@text}{st{=}m}{% - \huaz@try@roman{#3}% - \def\huaz@tempa{-1}% - \edef\huaz@tempb{\huaz@romantoarabic{\huaz@try@roman@result}}% + \huaz@collect@roman{#3}% + \huaz@temp@if@true% + \edef\huaz@temp{\huaz@romantoarabic{\huaz@collect@roman@result}}% + \IfStrEq{\huaz@temp}{0}{\huaz@temp@if@false}{}% + \IfStrEq{\huaz@temp}{-1}{\huaz@temp@if@false}{}% \IfBooleanTF{#2}{\huaz@z{#3}}{% - \ifx\huaz@tempb\huaz@tempa% - \huaz@z{#3}% + \ifhuaz@temp@if@% + \huaz@z{\huaz@romantoarabic{\huaz@collect@roman@result}}% \else% - \huaz@z{\huaz@romantoarabic{\huaz@try@roman@result}}% + \huaz@z{#3}% \fi}% - \IfBooleanF{#1}{\ifhuaz@show@~#3\fi}% + \IfBooleanF{#1}{\ifhuaz@show@\huaz@sep{#3}\fi}% \huaz@show@true} %================================================= @@ -367,10 +479,29 @@ % %================================================= -\DeclareDocumentCommand{\az}{sm}{\ifhuaz@show@ a\fi\IfBooleanTF{#1}{\huaz@text*{#2}}{\huaz@text{#2}}\xdef\azsaved{a\huaz@save}} -\DeclareDocumentCommand{\Az}{sm}{\ifhuaz@show@ A\fi\IfBooleanTF{#1}{\huaz@text*{#2}}{\huaz@text{#2}}\xdef\azsaved{A\huaz@save}} -\DeclareDocumentCommand{\azv}{sm}{\ifhuaz@show@ a\fi\IfBooleanTF{#1}{\huaz@text*={#2}}{\huaz@text={#2}}\xdef\azsaved{a\huaz@save}} -\DeclareDocumentCommand{\Azv}{sm}{\ifhuaz@show@ A\fi\IfBooleanTF{#1}{\huaz@text*={#2}}{\huaz@text={#2}}\xdef\azsaved{A\huaz@save}} +\DeclareDocumentCommand{\az}{s>{\TrimSpaces}m}{% + \ifhuaz@show@ a\fi + \IfBooleanTF{#1}{\huaz@text*{#2}}{\huaz@text{#2}}% + \IfBlankT{#2}{\PackageWarning{huaz}{Argument of \string\az\space is empty}\textup{(?)}}% + \xdef\azsaved{a\huaz@save}} + +\DeclareDocumentCommand{\Az}{s>{\TrimSpaces}m}{% + \ifhuaz@show@ A\fi + \IfBooleanTF{#1}{\huaz@text*{#2}}{\huaz@text{#2}}% + \IfBlankT{#2}{\PackageWarning{huaz}{Argument of \string\Az\space is empty}\textup{(?)}}% + \xdef\azsaved{A\huaz@save}} + +\DeclareDocumentCommand{\azv}{s>{\TrimSpaces}m}{% + \ifhuaz@show@ a\fi + \IfBooleanTF{#1}{\huaz@text*={#2}}{\huaz@text={#2}}% + \IfBlankT{#2}{\PackageWarning{huaz}{Argument of \string\azv\space is empty}\textup{(?)}}% + \xdef\azsaved{a\huaz@save}} + +\DeclareDocumentCommand{\Azv}{s>{\TrimSpaces}m}{% + \ifhuaz@show@ A\fi + \IfBooleanTF{#1}{\huaz@text*={#2}}{\huaz@text={#2}}% + \IfBlankT{#2}{\PackageWarning{huaz}{Argument of \string\Azv\space is empty}\textup{(?)}}% + \xdef\azsaved{A\huaz@save}} %================================================= % @@ -378,10 +509,10 @@ % %================================================= -\DeclareDocumentCommand{\aref}{sm}{\IfBooleanTF{#1}{\az*{\ref{#2}}}{\az{\ref{#2}}}} -\DeclareDocumentCommand{\Aref}{sm}{\IfBooleanTF{#1}{\Az*{\ref{#2}}}{\Az{\ref{#2}}}} -\DeclareDocumentCommand{\avref}{sm}{\IfBooleanTF{#1}{\azv*{\ref{#2}}}{\azv{\ref{#2}}}} -\DeclareDocumentCommand{\Avref}{sm}{\IfBooleanTF{#1}{\Azv*{\ref{#2}}}{\Azv{\ref{#2}}}} +\DeclareDocumentCommand{\aref}{sm}{\IfBooleanTF{#1}{\az{\ref*{#2}}}{\az{\ref{#2}}}} +\DeclareDocumentCommand{\Aref}{sm}{\IfBooleanTF{#1}{\Az{\ref*{#2}}}{\Az{\ref{#2}}}} +\DeclareDocumentCommand{\avref}{sm}{\IfBooleanTF{#1}{\azv{\ref*{#2}}}{\azv{\ref{#2}}}} +\DeclareDocumentCommand{\Avref}{sm}{\IfBooleanTF{#1}{\Azv{\ref*{#2}}}{\Azv{\ref{#2}}}} %================================================= % @@ -389,10 +520,10 @@ % %================================================= -\DeclareDocumentCommand{\apageref}{sm}{\IfBooleanTF{#1}{\az*{\pageref{#2}}}{\az{\pageref{#2}}}} -\DeclareDocumentCommand{\Apageref}{sm}{\IfBooleanTF{#1}{\Az*{\pageref{#2}}}{\Az{\pageref{#2}}}} -\DeclareDocumentCommand{\avpageref}{sm}{\IfBooleanTF{#1}{\azv*{\pageref{#2}}}{\azv{\pageref{#2}}}} -\DeclareDocumentCommand{\Avpageref}{sm}{\IfBooleanTF{#1}{\Azv*{\pageref{#2}}}{\Azv{\pageref{#2}}}} +\DeclareDocumentCommand{\apageref}{sm}{\IfBooleanTF{#1}{\az{\pageref*{#2}}}{\az{\pageref{#2}}}} +\DeclareDocumentCommand{\Apageref}{sm}{\IfBooleanTF{#1}{\Az{\pageref*{#2}}}{\Az{\pageref{#2}}}} +\DeclareDocumentCommand{\avpageref}{sm}{\IfBooleanTF{#1}{\azv{\pageref*{#2}}}{\azv{\pageref{#2}}}} +\DeclareDocumentCommand{\Avpageref}{sm}{\IfBooleanTF{#1}{\Azv{\pageref*{#2}}}{\Azv{\pageref{#2}}}} %================================================= % @@ -400,10 +531,21 @@ % %================================================= -\DeclareDocumentCommand{\aeqref}{sm}{\IfBooleanTF{#1}{\az*{\eqref{#2}}}{\az{\eqref{#2}}}} -\DeclareDocumentCommand{\Aeqref}{sm}{\IfBooleanTF{#1}{\Az*{\eqref{#2}}}{\Az{\eqref{#2}}}} -\DeclareDocumentCommand{\aveqref}{sm}{\IfBooleanTF{#1}{\azv*{\eqref{#2}}}{\azv{\eqref{#2}}}} -\DeclareDocumentCommand{\Aveqref}{sm}{\IfBooleanTF{#1}{\Azv*{\eqref{#2}}}{\Azv{\eqref{#2}}}} +\DeclareDocumentCommand{\aeqref}{m}{\az{\eqref{#1}}} +\DeclareDocumentCommand{\Aeqref}{m}{\Az{\eqref{#1}}} +\DeclareDocumentCommand{\aveqref}{m}{\azv{\eqref{#1}}} +\DeclareDocumentCommand{\Aveqref}{m}{\Azv{\eqref{#1}}} + +%================================================= +% +% \arefeq \Arefeq \avrefeq \Avrefeq +% +%================================================= + +\DeclareDocumentCommand{\arefeq}{m}{\az{\refeq{#1}}} +\DeclareDocumentCommand{\Arefeq}{m}{\Az{\refeq{#1}}} +\DeclareDocumentCommand{\avrefeq}{m}{\azv{\refeq{#1}}} +\DeclareDocumentCommand{\Avrefeq}{m}{\Azv{\refeq{#1}}} %================================================= % @@ -411,65 +553,10 @@ % %================================================= -\DeclareDocumentCommand{\acite}{som}{% - \IfBooleanTF{#1}{% - \IfNoValueTF{#2}{% - \az*{\cite{#3}}% - }{% - \az*{\cite[#2]{#3}}% - }% - }{% - \IfNoValueTF{#2}{% - \az{\cite{#3}}% - }{% - \az{\cite[#2]{#3}}% - }% - }} - -\DeclareDocumentCommand{\Acite}{som}{% - \IfBooleanTF{#1}{% - \IfNoValueTF{#2}{% - \Az*{\cite{#3}}% - }{% - \Az*{\cite[#2]{#3}}% - }% - }{% - \IfNoValueTF{#2}{% - \Az{\cite{#3}}% - }{% - \Az{\cite[#2]{#3}}% - }% - }} - -\DeclareDocumentCommand{\avcite}{som}{% - \IfBooleanTF{#1}{% - \IfNoValueTF{#2}{% - \azv*{\cite{#3}}% - }{% - \azv*{\cite[#2]{#3}}% - }% - }{% - \IfNoValueTF{#2}{% - \azv{\cite{#3}}% - }{% - \azv{\cite[#2]{#3}}% - }% - }} - -\DeclareDocumentCommand{\Avcite}{som}{% - \IfBooleanTF{#1}{% - \IfNoValueTF{#2}{% - \Azv*{\cite{#3}}% - }{% - \Azv*{\cite[#2]{#3}}% - }% - }{% - \IfNoValueTF{#2}{% - \Azv{\cite{#3}}% - }{% - \Azv{\cite[#2]{#3}}% - }% - }} +\DeclareDocumentCommand{\acite}{om}{\IfNoValueTF{#1}{\az{\cite{#2}}}{\az{\cite[#1]{#2}}}} +\DeclareDocumentCommand{\Acite}{om}{\IfNoValueTF{#1}{\Az{\cite{#2}}}{\Az{\cite[#1]{#2}}}} +\DeclareDocumentCommand{\avcite}{om}{\IfNoValueTF{#1}{\azv{\cite{#2}}}{\azv{\cite[#1]{#2}}}} +\DeclareDocumentCommand{\Avcite}{om}{\IfNoValueTF{#1}{\Azv{\cite{#2}}}{\Azv{\cite[#1]{#2}}}} %================================================= % -- cgit v1.2.3