Ti suggeriamo di rivedere questa risposta in un ambiente controllato prima di passarla alla produzione, saluti.
Soluzione:
photo
vuole un file adatto a essere incluso in un file includegraphics
. Pertanto, credo che la soluzione più semplice sia quella di creare il proprio qrcode all'interno di un comando standalone
e usare il risultato come foto in moderncv.
%File qrcode.tex -> qrcode.pdf
documentclass{standalone}
usepackage{qrcode}
begin{document}
qrcode[hyperlink,height=64pt]{http://www.ctan.org}
end{document}
documentclass[11pt,a4paper,sans]{moderncv}
moderncvstyle{classic}
usepackage{qrcode}
usepackage{graphicx}
firstname{John}
familyname{Doe}
address{83 Fancy Avenue}{Noweheresville}{Gotham City 24061}
phone[mobile]{123 456 7890}
email{[email protected]}
photo[64pt][0.5pt]{qrcode}
begin{document}
makecvtitle
end{document}
Aggiornamento: tutto in uno 😉
Con filecontents
e un pacchetto immediate
è possibile unire entrambi i file in uno e compilarli insieme:
documentclass[11pt,a4paper,sans]{moderncv}
moderncvstyle{classic}
usepackage{qrcode}
usepackage{filecontents}
begin{filecontents*}{myqrcode.tex} %<- This is the qrcode file name
documentclass{standalone}
usepackage{qrcode}
begin{document}
qrcode[hyperlink,height=64pt]{http://www.ctan.org}
end{document}
end{filecontents*}
immediatewrite18{pdflatex myqrcode.tex}
firstname{John}
familyname{Doe}
address{83 Fancy Avenue}{Noweheresville}{Gotham City 24061}
phone[mobile]{123 456 7890}
email{[email protected]}
photo[64pt][0.5pt]{myqrcode} %<- Insert previous name
begin{document}
makecvtitle
end{document}
Nel codice della classe moderncv
, lo stile classic
si può trovare un costrutto if-then-else che controlla se una classe photo
è definito (stampandolo) o no (non facendo nulla). Ho aggiunto all'interno del caso vuoto un nuovo test if-then-else, se un nuovo comando qrphoto
è definito. Se è definito, il codice lo stampa, mentre nell'altro caso non fa nulla.
Il nuovo comando per il comando qrphoto
è:
NewDocumentCommand{qrphoto}{O{64pt}O{0.4pt}m}{def@qrphotowidth{#1}def@qrphotoframewidth{#2}def@qrphoto{#3}}
Con questo comando definisco i valori necessari @qrphotowidth
ecc. per un uso successivo.
Ora possiamo modificare il comando originale con
patchcmd{makecvhead}%
{%
ifthenelse{isundefined{@photo}}{}%
}% code to patch
{% new code <=========================================================
ifthenelse{isundefined{@photo}}%
{%
ifthenelse{isundefined{@qrphoto}}%
{}%
{%
[email protected]%
hspace*{separatorcolumnwidth}fi%
color{black}% <======================== to get a black qrcode
setlength{fboxrule}{@qrphotoframewidth}%
ifdim@qrphotoframewidth=0pt%
setlength{fboxsep}{0pt}fi%
raisebox{1cm}{framebox{qrcode[hyperlink,height=@qrphotowidth]{@qrphoto}}}
}
}%
}% end new code <=====================================================
{}% success
{fail}% failure
Il comando raisebox[1cm]
è necessario per ottenere il codice qr nella giusta posizione (non ho cercato il motivo per cui è necessario qui. Il valore utilizzato va bene per dimensioni del codice qr risultante di 2 cm (che ho usato per il codice di esempio) o più. Se il vostro codice qr deve essere più piccolo, dovete cambiare il valore usato di 1cm
a un valore inferiore. Dovrete fare delle prove.
Come potete vedere, ho eliminato il comando includegraphics
. Con il comando qrphoto
qrcode... dal pacchetto qrcode
.
Con il comando
qrphoto[2cm][0.5pt]{https://tex.stackexchange.com/questions/474546/}
ad esempio, si può aggiungere un'immagine qr-code con un'altezza e una larghezza di 2cm
, una cornice intorno ad essa con una linea di 0.5pt
e il contenuto del qr-code-image è https://tex.stackexchange.com/questions/474546/
(questa domanda).
Quindi con il seguente MWE completo
documentclass[11pt,a4paper,sans]{moderncv}
moderncvstyle{classic}
usepackage{graphicx}
usepackage{qrcode}
firstname{John}
familyname{Doe}
address{83 Fancy Avenue}{Noweheresville}{Gotham City 24061}
phone[mobile]{123 456 7890}
email{[email protected]}
makeatletter
NewDocumentCommand{qrphoto}{O{64pt}O{0.4pt}m}{def@qrphotowidth{#1}def@qrphotoframewidth{#2}def@qrphoto{#3}}
% to patch the code of moderncv, version 2.0.0
%usepackage{etoolbox} % already loaded in moderncv <===================
patchcmd{makecvhead}%
{%
ifthenelse{isundefined{@photo}}{}%
}% code to patch
{% new code <=========================================================
ifthenelse{isundefined{@photo}}%
{%
ifthenelse{isundefined{@qrphoto}}%
{}%
{%
[email protected]%
hspace*{separatorcolumnwidth}fi%
color{black}% <======================== to get a black qrcode
setlength{fboxrule}{@qrphotoframewidth}%
ifdim@qrphotoframewidth=0pt%
setlength{fboxsep}{0pt}fi%
raisebox{1cm}{framebox{qrcode[hyperlink,height=@qrphotowidth]{@qrphoto}}}
}
}%
}% end new code <=====================================================
{}% success
{fail}% failure
makeatother
%photo[64pt][0.5pt]{example-image}
qrphoto[2cm][0.5pt]{https://tex.stackexchange.com/questions/474546/} %
begin{document}
makecvtitle
end{document}
si ottiene il seguente risultato:
Si noti che è possibile stampare solo una foto o un codice qr. Se si dispone di un codice definito photo
e qrphoto
viene stampata solo la foto!
Valutazioni e commenti
Puoi aggiungere valore al nostro contenuto informativo collaborando con la tua esperienza nelle recensioni.