Kristalografik düzlem yönlerini tanımlamak için Miller indekslerinin kullanıldığı XRD analizlerini çizmek için MATLAB kullanıyorum. Bu indeksler 3 veya 4 sayı içerir ve bu sayı üzerinde çubuk ile negatif değer gösterilir.MATLAB'de Miller indeksleri nasıl gösterilir?
LaTeX'te \([1\bar{1}1]\)
veya \([1\overline{1}1]\)
komutu ile yazılabilir.
XRD standartlarının spektral çizgilerinin etiketlenmesi için bu komutu kullanıyorum: Negatif değerlerin dikkate alınmadığını unutmayın. Ben 'FontName'
mülkiyet içerisinde muhtelif değiştirmek mümkün olmak istiyorum çünkü 'Interpreter','latex'
özelliğini kullanmadan negatif bir sayı üzerinde çubuğu oluşturmak nasıl otomatikleştirebilirim
std_text_hkl(j)=text(theta{i}(j)-r,0.1,['[' hkl{j} ']'],... % position and label
of j-th line of i-th standard; hkl{j} holds Miller index in string format
'parent',ax_std(i),... % association with axes of i-th standard
'rotation',90,...
'fontsize',12,...
'fontname',Font); % Font holds global font setup
. Leat'de etiketler ve kenelerdeki farklı fontlardan kaçınmak istiyorum.
DÜZENLEME: Miller indeksi üzerinde olumsuz beraberlik çizgi ise 5 metin alanları
- Mağaza endeksleri
- ayrı etiket: Magla yorumuna
sayesinde bu fikir geldi (metin çerçevesinin üst çizgi) kod
Gerçek parça:
rr=get(ax_std(i),'xlim'); % read x-axis limits of i-th standard
r=(rr(2)-rr(1))/150; % x-offset of Miller indexes
for j=1:size(dhkl,1)
theta{i}(j)=asin(lambda/(2*dhkl(j,1)))*360/pi(); %calculating of lines
%positions (Bragg's law)
line('parent',ax_std(i),...
'xdata',[theta{i}(j) theta{i}(j)],...
'ydata',[0 dhkl(j,2)],... % j-th line's reflection intensity
'color',[colors(1+mod(i-1,size(colors,1)),1:3)],...
'linewidth',3)
% Miller indexes
if theta{i}(j)>rr(1)&&theta{i}(j)<rr(2) % test if line is inside axes
std_text_lbrace(j)=text(theta{i}(j)-r,0.1,'[',...
'parent',ax_std(i),...
'verticalalignment','bottom',...
'horizontalalignment','left',...
'rotation',90,...
'fontsize',12,...
'fontname',Font);
pos=get(std_text_lbrace(j),'position');
ext=get(std_text_lbrace(j),'extent');
std_text_h(j)=text(pos(1),pos(2)+ext(4)/1.5,int2str(abs(hkl(j,1))),...
'parent',ax_std(i),...
'verticalalignment','bottom',...
'horizontalalignment','left',...
'rotation',90,...
'fontsize',12,...
'fontname',Font); % write 1st Miller index
pos=get(std_text_h(j),'position');
ext=get(std_text_h(j),'extent')
if hkl(j,1)<0 % if negative, draw line over it
wdth=get(ax0,'xlim');
wdth=wdth(2)-wdth(1);
set(std_text_h(j),'color','b','edgecolor','g')
line('parent',ax_std(i),...
'xdata',[pos(1)-wdth/280*ext(3),pos(1)-wdth/280*ext(3)],...
'ydata',[pos(2),pos(2)+ext(4)/wdth*100],...
'color','r')
end
end
Hat uzunluğuna sığamıyorum. Tek haneli için çok uzun, iki basamak için uyuyor ve daha fazla (teorik olarak) çok kısa. Neyi yanlış yapıyorum? MATLAB, döndürülen metnin 'extent'
özelliğini nasıl ölçer?
Yalnızca alt yazılarla ikinci bir metin alanı kullanır ve onu hedef numarayla eşleşecek şekilde çevirir veya döndürürüm. Bu çözüm, eşit aralıklı yazı tipiyle iyi çalışır (kurye yeni, tek aralıklı). – marsei
@Magla: İyi nokta, '' _ \ newline [111] ''bu numarayı yapmalı. Ancak, dediğiniz gibi, sadece "fixedwidth" font için (iki boşluk olmalıdır). – Crowley
"Lateks işaretleme etiketlerini kullanma" gibi birçok yanıtı, örn. http://stackoverflow.com/a/9328945/2180721.Bu, herhangi bir yazı tipinin kullanılmasına izin vermez, ancak Magla tarafından önerilen çözüm yalnızca sizin özel isteğiniz için geçerlidir ve görüntülenecek karmaşık bir lateksiniz varsa, grafik nesneleri kullanmak olanaksız hale gelir. – Oleg