Sziasztok.
Egy Tikz-grafika egyik yshift koordinátáját szeretném paraméterrel ellátni, de az újabb tikz-verziók az alábbi kódot képtelenek úgy feldolgozni, hogy az összeadásnál a \szamertek -et számként kezeljék.
\def\szamertek{1cm}
\begin{tikzpicture}[remember picture,overlay]
\node[ inner sep=0pt, xshift=1.5\linewidth, yshift=-1.5cm+\szamertek] at (pic cs:stickit)
{\includegraphics[width=.6\linewidth]{valami.eps}};
\end{tikzpicture}
Ez a hibaüzenetem van:
! Missing number, treated as zero.
<to be read again>
p
vagyis a \szamertek nulla lesz, ami számomra hatalmas kavarodást okoz.
Mi lehet a megoldás?
- 514 megtekintés
Hozzászólások
Nálam egy csupaszított változat megy:
\documentclass[12pt]{article}
\usepackage{tikz}
\begin{document}
\def\szamertek{1cm}
\begin{center}
\begin{tikzpicture}[remember picture,overlay]
\node[yshift=-1.5cm+\szamertek] at (0,0) {node};
\draw (0,0) circle (1cm);
\end{tikzpicture}
\end{center}
\end{document}
A node felirat a kör alján belül van, tehát a 0,5 centi lefelé stimmelhet is.
Ha nálad is megy, akkor szerintem nem a mértékegységek összeadásával van probléma.
A tikz verziója 3.1.10 (2023-01-15).
- A hozzászóláshoz be kell jelentkezni
Ez a kód nálam is hibátlan.
Viszont ugyanezzel a szintaxissal átírva a dolgaimat a hibaüzenet változatlan.
10-féle lény van:
-- aki ismeri a bináris számrendszert,
-- és amelyik nem.
- A hozzászóláshoz be kell jelentkezni
Ha hibátlan, akkor csak össze tudja adni rendesen.
Tudsz egy teljes kódot közölni, ami produkálja a hibaüzenetet? Nálam a nyitó hozzászólásodban a (pic cs:stickit) részre azt írta, hogy ismeretlen koordinátarendszer. Nem volt kedvem keresgélni, milyen csomagot kell betölteni hozzá, ezért lenne jó látni egy teljes kódot (usepackage-okkal együtt).
- A hozzászóláshoz be kell jelentkezni
Hááát, a kód, a preambulum meg minden egyéb az majdnem 4000 sor.
Az idevágó részlet a következő:
\usetikzlibrary{tikzmark}
\usetikzlibrary{backgrounds}
\def\fejvegm{\newpage
\vspace{0.5cm}
}
\def\fejvegf{\disz
\newpage
\vspace{0.5cm}
}
\def\fejvegk{%
\imageattheend
\newpage
\vspace{0.5cm}
}
\def\fejvegv{
\vspace{0.5cm}
}
\def\fejvegvd{\disz
\vspace{0.5cm}
}
\def\fejvegvx{
\vspace{0.5cm}
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% FEJEZETKEZDÉS ALAPÉRTÉKEI:
\def\fejezetalapertekek{%
\def\csikhossz{1} % százalékban megadva
\def\elottehezag{0cm}
\def\feltolas{0cm} % kép feljebb tolása
\def\igazitas{0cm} % kép vízszintes eltolása
\def\nyitokepnagyitas{1}% kép nagyítása
\def\nyitokepidezet{\vspace{0ex}} % idézet vagy extra térköz
\def\cimelottihely{\hspace{1em}}
}
\fejezetalapertekek
%% -------------------------
\def \honaplenia{\ev{#1}. \roma{#2}. \ev{#3}.}
%
\FloatBarrier
%
% Lapvége-makró indíátsa:
\IfFileExists{./lapvegi-toresek/lapvege-#1-#2-#3}{\input{./lapvegi-toresek/lapvege-#1-#2-#3}}{}
%
%
\noindent
\def\filenametovegeps{#1-#2-#3-1.eps}
\phantomsection
\addcontentsline{toc}{section}{\cim}
%
{\vspace{\elottehezag}} %címblokk előtti hely
%
\begin{figure}[h!]
\begin{subfigure}{0.47\textwidth}
%%%%
\hspace{\igazitas}
%
\begin{tikzpicture}[remember picture,overlay]
\node[ inner sep=0pt, xshift=1.5\linewidth, yshift=-1.5cm + \feltolas ] at (pic cs:stickit)
{\IfFileExists{kepek/#1-#2-#3.eps}{\includegraphics[width=\nyitokepnagyitas\linewidth]{kepek/#1-#2-#3}\kepszamlalo}{\includegraphics[width=\nyitokepnagyitas\linewidth,height=20ex]{example-image}}
};
\end{tikzpicture}
%%%%
\begin{flushright}
{%
\hspace{0.5ex}%
\small
\specdatum{#1}{#2}{#3}\cimelottihely\ %
}
\end{flushright}
\vspace{-2ex}
\hbox{\tikz\shade[left color=black,right color=white] (0,0) rectangle (\csikhossz\columnwidth,0.4pt);}
\par
{\small
\vspace{-1.2ex}
\textsc{\cim}
}
\bigskip
#4
\end{subfigure}
%
\begin{subfigure}{0.5\textwidth}
\vspace{-\feltolas}
\hspace{\igazitas}
\includegraphics[width=\nyitokepnagyitas\linewidth]{example-image}
\IfFileExists{kepek/#1-#2-#3.eps}{\includegraphics[width=\nyitokepnagyitas\linewidth]{kepek/#1-#2-#3}}{\includegraphics[width=\nyitokepnagyitas\linewidth,height=20ex]{example-image}}
\end{subfigure}
{\nyitokepidezet}
\end{figure}
\hspace{-\feltolas}
\smallskip
\fejezetalapertekek
}
A kód lényege, hogy előbb az eps grafika rajzolódik ki, majd erre (akár ráúsztatva) jön a többi szöveg. Gyanítom, hogy a tikz csomag keveredése a fő ok. A régiekkel rendben ment minden, nem volt hibaüzenet, a \feltolas értéke nem nullázódott ki.
Megjegyzés: a te példakódodban "node" szöveg szerepel az ide-oda tologatáshoz, az én kódomban nem szöveg, hanem kép tologatódna.
10-féle lény van:
-- aki ismeri a bináris számrendszert,
-- és amelyik nem.
- A hozzászóláshoz be kell jelentkezni
Ehhh... olyanra gondoltam, amit kimásolok egy .tex-fájlba, fordítom és kész.
De egy kicsit gyomlálgattam, és nekem a \begin{subfigure} gyanús. Melyik csomagból szeded? Ha a subfigure csomagból, akkor ott úgy látom, hogy nem környezet, hanem parancs, és paraméterként nem méretet kap, hanem szöveget (akár pl \includegraphics).
Pont ezért lenne jó egy minimális kód, ami teljes mértékben tartalmazza azt, ami problémás, és nem (sokkal) több.
- A hozzászóláshoz be kell jelentkezni
A subfigure egy környezet. Amikor egymás mellé több képet helyezhetsz felirattal.
Minimális kódom nincs, overleaf-re se tudom átrakni, mert az ottani rendszernek meg más anomáliái vannak.
10-féle lény van:
-- aki ismeri a bináris számrendszert,
-- és amelyik nem.
- A hozzászóláshoz be kell jelentkezni
A subfigure egy környezet.
Melyik csomagból?
Szerk.: hm, azt hiszem megvan. Én is használtam, és szerintem a subcaption csomagból jön. Nálad is?
- A hozzászóláshoz be kell jelentkezni
subfigure ∈ subcaption
Használata a figure környezeten belül lehetséges.
10-féle lény van:
-- aki ismeri a bináris számrendszert,
-- és amelyik nem.
- A hozzászóláshoz be kell jelentkezni
Hirtelen arra gondoltam, hogy a
\begin{tikzpicture}[remember picture,overlay]
...
\end{tikzpicture}
helyett máshogy illeszteném be a képet, de az overlay-t meghagyva.
Lejjebb van egy tikz által berakott színátmenetes csík, annak semmi baja. Igen ám, de a tikzpicture-nál már vannak xy-koordináták, azoknak se kéne változnia...
10-féle lény van:
-- aki ismeri a bináris számrendszert,
-- és amelyik nem.
- A hozzászóláshoz be kell jelentkezni
\documentclass[12pt]{article}
\usepackage{tikz}
\usepackage{subcaption}
\usetikzlibrary{backgrounds}
\usetikzlibrary{tikzmark}
\begin{document}
\def\nyitokepnagyitas{1}
\def\igazitas{0cm}
\def\feltolas{1cm}
\def\csikhossz{1}
\def\cim{ez bizony a cím}
\begin{figure}[h!]
\begin{subfigure}{0.47\textwidth}
\hspace{\igazitas}
\begin{tikzpicture}[remember picture,overlay]
\node[ inner sep=0pt, xshift=1.5\linewidth, yshift=-1.5cm + \feltolas ] at (pic cs:stickit) {node};
\end{tikzpicture}
\begin{flushright}
\hspace{0.5ex}%
\small
dátum
\end{flushright}
\vspace{-2ex}
\hbox{\tikz\shade[left color=black,right color=white] (0,0) rectangle (\csikhossz\columnwidth,0.4pt);}
\par
{\small
\vspace{-1.2ex}
\textsc{\cim}
}
\end{subfigure}
\begin{subfigure}{0.5\textwidth}
\vspace{-\feltolas}
\hspace{\igazitas}
example-image
\end{subfigure}
{nyitokepidezet}
\end{figure}
\hspace{-\feltolas}
valami szöveg megint
\end{document}
Ez a kód nálam lefut csont nélkül. Nálad?
- A hozzászóláshoz be kell jelentkezni
Ez gond nélkül lefut.
Ugyanez van az eredeti kódomban is, de ott leáll a fordítás. Megfigyeltem, csak akkor rohad le, ha a \feltolas értéke negatív. Felcserélve a műveletet az eredmény ismét a leállás. Alkalmaztam yshift-nek CSAK a \feltolas-t, a -5cm hozzáadása nélkül. Ez sem jó.
Kicsit olyan érzésem van, mintha a mínusz jelet (-) diviznek értelmezné, azt szövegként kezelné.
10-féle lény van:
-- aki ismeri a bináris számrendszert,
-- és amelyik nem.
- A hozzászóláshoz be kell jelentkezni
Ez gond nélkül lefut.
Ugyanez van az eredeti kódomban is, de ott leáll a fordítás.
Ezért gondolom, hogy nem itt lesz a gond.
A hibát jobban be kellene határolni, mert ennyiből nem tudom reprodukálni. Még ha a mintakódomban át is írom a \feltolas értékét negatívra, akkor is lefut (gondolom, nálad is).
Ahogy szoktam csinálni: a környező kódokat kikommentelem, akár annyira, hogy csak a gyanús rész maradjon. Ha az lefut, akkor fokozatosan adagolom hozzá a kikommentelt részeket, és amikor már nem fut, akkor lehet elkezdeni nézegetni, miért nem. Ha eddig eljutsz és nem boldogulsz vele, azt a részt tedd közzé, hátha valaki tud rá valamit mondani.
- A hozzászóláshoz be kell jelentkezni
Pontosan így szoktam én is behatárolni egy hibát.
Nálam a helyzet komplikáltabb, mert míg erre rájönnék, eltelik fél év. Egyszerűbb az utóbbi hat év teljes anyagát újraírni a nulláról. Rendesen mindent bekommentelve az összes makrónál. Szóval egyelőre úgy állok, hogy csak egyetlen gépen fut le a fordítás hibamentesen, ha az a gép elszáll, lőttek az egésznek.
10-féle lény van:
-- aki ismeri a bináris számrendszert,
-- és amelyik nem.
- A hozzászóláshoz be kell jelentkezni
Nálam a helyzet komplikáltabb, mert míg erre rájönnék, eltelik fél év. Egyszerűbb az utóbbi hat év teljes anyagát újraírni a nulláról.
Te tudod. A fenntarthatóság miatt érdemes lenne rászánni az időt, hogy hol és mi törik el.
Mi a különbség az "egyetlen gép" és a többi gép között? Biztos, hogy a frissebb tikz miatt törik meg, nem más miatt? Ha más nem, rakd fel azt a 4000 sort pastebin-re, hátha megtalálom hamarabb, mint fél év.
- A hozzászóláshoz be kell jelentkezni
Csak 25 GB a teljes kód mindennel együtt.
10-féle lény van:
-- aki ismeri a bináris számrendszert,
-- és amelyik nem.
- A hozzászóláshoz be kell jelentkezni
Kicsit megőrülök:
Ha nem így: \def\feltolas{1cm}
hanem így: \def\feltolas{+1cm} adom meg a pozitív értékeket, majd a kóban elhagyom a műveleti jeleket, a fordítás lefut. (Na ezt hívom gányolásnak, amit csinálok. Működik, jó is, csak gány. Ezzel az anomália oka nincs meg, csak tüneti kezelést kapott.)
yshift=-1.5cm + \feltolas
helyett
yshift=-1.5cm \feltolas
10-féle lény van:
-- aki ismeri a bináris számrendszert,
-- és amelyik nem.
- A hozzászóláshoz be kell jelentkezni
A szamertek az ne \def legyen hanem \newlength. Nem biztos hogy ez a megoldas de egy probat meger.
- A hozzászóláshoz be kell jelentkezni
Magát a műveletet (az összeadást) ekkor sem képes megcsinálni. A fordító megáll, majd közli, hogy nullaként értelmezve tovább lép.
10-féle lény van:
-- aki ismeri a bináris számrendszert,
-- és amelyik nem.
- A hozzászóláshoz be kell jelentkezni
Nem próbáltam ki, de a chatgpt ezt a választ adta:
A probléma az, hogy a \texttt{yshift} argumentuma egy összeadás, amelyben egy számot és egy dimenziót adunk össze. A régebbi TikZ verziók engedték a számként kezelt dimenziók használatát, azonban az újabb verziók szigorúbbak lettek.
Egy megoldás lehet a \texttt{calc} csomag használata, amely lehetővé teszi a dimenziók közvetlen összeadását. Ehhez először importálnod kell a \texttt{calc} csomagot a dokumentumban, majd a \texttt{yshift} értékét a következő módon kell megadnod: \texttt{yshift=\string\szamertek+1.5cm}.
Így az átdolgozott kód a következőképpen néz ki:
\def\szamertek{1cm}
\usepackage{calc} % calc csomag importálása
\begin{tikzpicture}[remember picture,overlay]
\node[inner sep=0pt, xshift=1.5\linewidth, yshift=\szamertek+1.5cm] at (pic cs:stickit)
{\includegraphics[width=.6\linewidth]{valami.eps}};
\end{tikzpicture}
Győződj meg arról, hogy a calc
csomagot is importálod a dokumentumban, különben a módosított kód nem fog működni.
Ezzel a módosítással a \texttt{yshift} megfelelően kezeli a \texttt{\string\szamertek} dimenziót, és a kód hiba nélkül fut.
- A hozzászóláshoz be kell jelentkezni
Az MI a "\texttt{}" -et feleslegesen rakta ki, az rossz.
Amúgy a \string-et kipróbáltam régebben, a hibaüzenet változatlan maradt.
10-féle lény van:
-- aki ismeri a bináris számrendszert,
-- és amelyik nem.
- A hozzászóláshoz be kell jelentkezni
\documentclass{article}
\usepackage{tikz}
\listfiles
\begin{document}
\pgfversion
\end{document}
Megnéztem ezzel a csomagverzióimat (2020-as TexLive verziónál megálltam, ez szándékos.)
A fenti kód a logban kiírja a verzióimat:
*File List*
article.cls 2019/12/20 v1.4l Standard LaTeX document class
size10.clo 2019/12/20 v1.4l Standard LaTeX file (size option)
tikz.sty 2020/01/08 v3.1.5b (3.1.5b)
pgf.sty 2020/01/08 v3.1.5b (3.1.5b)
pgfrcs.sty 2020/01/08 v3.1.5b (3.1.5b)
everyshi.sty 2001/05/15 v3.00 EveryShipout Package (MS)
pgfrcs.code.tex
pgfcore.sty 2020/01/08 v3.1.5b (3.1.5b)
graphicx.sty 2019/11/30 v1.2a Enhanced LaTeX Graphics (DPC,SPQR)
keyval.sty 2014/10/28 v1.15 key=value parser (DPC)
graphics.sty 2019/11/30 v1.4a Standard LaTeX Graphics (DPC,SPQR)
trig.sty 2016/01/03 v1.10 sin cos tan (DPC)
graphics.cfg 2016/06/04 v1.11 sample graphics configuration
dvips.def 2017/06/20 v3.1d Graphics/color driver for dvips
pgfsys.sty 2020/01/08 v3.1.5b (3.1.5b)
pgfsys.code.tex
pgfsyssoftpath.code.tex 2020/01/08 v3.1.5b (3.1.5b)
pgfsysprotocol.code.tex 2020/01/08 v3.1.5b (3.1.5b)
xcolor.sty 2016/05/11 v2.12 LaTeX color extensions (UK)
color.cfg 2016/01/02 v1.6 sample color configuration
pgfcore.code.tex
pgfcomp-version-0-65.sty 2020/01/08 v3.1.5b (3.1.5b)
pgfcomp-version-1-18.sty 2020/01/08 v3.1.5b (3.1.5b)
pgffor.sty 2020/01/08 v3.1.5b (3.1.5b)
pgfkeys.sty
pgfkeys.code.tex
pgfmath.sty
pgfmath.code.tex
pgffor.code.tex
tikz.code.tex
l3backend-dvips.def 2020-03-12 L3 backend support: dvips
***********
10-féle lény van:
-- aki ismeri a bináris számrendszert,
-- és amelyik nem.
- A hozzászóláshoz be kell jelentkezni
Ez az a gép, amin fordul?
- A hozzászóláshoz be kell jelentkezni
Nem, az a gép, amin azt akarom elérni, hogy forduljon le.
(Ha hazaérek, megnézem a verziószámok esetleges eltérését azon a gépen, ami régi ugyan, de hibátlan rajta a TexLive)
10-féle lény van:
-- aki ismeri a bináris számrendszert,
-- és amelyik nem.
- A hozzászóláshoz be kell jelentkezni
A fenti tikz-es node-os anomália kiakasztott, átírtam a kódot oly módon, hogy a paraméteres indítások megmaradjanak, ne kelljen mindenütt átírnom semmit, csak egyetlen helyen.
Szóval tikz-node helyett itt a friss Overpic csomag. Rövidebb, átláthatóbb minden, layeres kezelés is rendben.
\def\fejnyitooo#1#2#3#4{
%
% léniába a dátum beillesztése:
\def \honaplenia{\ev{#1}. \roma{#2}. \ev{#3}.}
%
\FloatBarrier
%
\IfFileExists{./lapvegi-toresek/lapvege-#1-#2-#3}{\input{./lapvegi-toresek/lapvege-#1-#2-#3}}{}
%
%
\noindent
\def\filenametovegeps{#1-#2-#3-1.eps}
\phantomsection
\addcontentsline{toc}{section}{\cim}
%
\vspace{\elottehezag} %címblokk előtti hely
\noindent
\begin{Overpic}[abs,unit=1mm,grid=true,tics=5]{%
\put(135,5) {\IfFileExists{kepek/#1-#2-#3.eps}{\includegraphics[width=\nyitokepnagyitas\linewidth]{kepek/#1-#2-#3}\kepszamlalo}{\includegraphics[width=\nyitokepnagyitas\linewidth,height=20ex]{example-image}}
}
\put(0,40){#4}
\put(55,90){\small\specdatum{#1}{#2}{#3}\cimelottihely}
\put(0,85){\hbox{\tikz\shade[left color=black,right color=white] (0,0) rectangle (\csikhossz\columnwidth,0.4pt);}}
\put(0,75){\small\textsc{\cim}}
}%
\end{Overpic}
}
uzsoltnak és mindenkinek köszönöm a segítséget.
------
Szerk: ...és a soregyen is megjavul, amit a TeX-nél tartani egy külön tudomány. (Ez volt a soregyennel az utolsó anomália, ezzel még az is le van tudva.)
10-féle lény van:
-- aki ismeri a bináris számrendszert,
-- és amelyik nem.
- A hozzászóláshoz be kell jelentkezni